質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
JNI

JNI(Java Native Interface)は、Javaプラットフォームにおいて、Javaで記述されたプログラムと、他の言語で書かれたネイティブコードを連携するためのインタフェース仕様である

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

COCOS2D-X

COCOS2D-Xは、 2Dゲームを手軽に開発できるフレームワークのことです。 iPhone(iOS)向け、Android等に対応しており、 実質ワンソースで開発が可能です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1344閲覧

C++側から、Javaで書いたメソッドの呼び出し(ネイティブ連携?)がしたい

Ragea

総合スコア6

JNI

JNI(Java Native Interface)は、Javaプラットフォームにおいて、Javaで記述されたプログラムと、他の言語で書かれたネイティブコードを連携するためのインタフェース仕様である

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

COCOS2D-X

COCOS2D-Xは、 2Dゲームを手軽に開発できるフレームワークのことです。 iPhone(iOS)向け、Android等に対応しており、 実質ワンソースで開発が可能です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/08/04 06:00

編集2019/08/07 06:13

前提・実現したいこと

AndroidStudioでcocos2d-xを使ってAndroidアプリ開発をしています。
C++側からJavaで書いたメソッドの呼び出しをしたいのですが、undefined reference to〜というエラーが出てビルドができません。
調べたところメソッドが未実装というエラーのようなのですが、自分では実装しているつもりです。
どこを修正すればエラーが出なくなるでしょうか。

発生している問題・エラーメッセージ

HelloWorldScene.cpp:125: error: undefined reference to 'NativeLauncher::launchNative()' clang++: error: linker command failed with exit code 1 (use -v to see invocation) ninja: build stopped: subcommand failed.

該当のソースコード

cpp

1// HelloWorldScene.cpp 2 3#include "HelloWorldScene.h" 4#include "SimpleAudioEngine.h" 5#include "NativeLauncher.h" 6 7〜略〜 8 9void HelloWorld::menuCloseCallback(Ref* pSender) 10{ 11 NativeLauncher::launchNative(); 12}

cpp

1// NativeLauncher.h 2 3#include "cocos2d.h" 4 5#ifdef __cplusplus 6extern "C" { 7#endif 8 9#ifndef NativeLauncher_h 10#define NativeLauncher_h 11 12class NativeLauncher{ 13 public: 14 static void launchNative(); 15}; 16 17#endif 18/* NativeLauncher_h */ 19 20#ifdef __cplusplus 21} 22#endif 23

cpp

1// NativeLauncher.cpp 2 3#include <stdio.h> 4#include "NativeLauncher.h" 5#include <jni.h> 6#include "platform/android/jni/JniHelper.h" 7#define CLASS_NAME "org/cocos2dx/cpp/AppActivity" 8 9void NativeLauncher::launchNative(){ 10 cocos2d::JniMethodInfo t; 11 if(cocos2d::JniHelper::getStaticMethodInfo(t, CLASS_NAME, "launchNative", "()V")){ 12 t.env->CallStaticVoidMethod(t.classID, t.methodID); 13 t.env->DeleteLocalRef(t.classID); 14 } 15}

java

1// AppActivity.java 2 3public class AppActivity extends Cocos2dxActivity { 4 private static AppActivity me = null; 5 6 @Override 7 protected void onCreate(Bundle savedInstanceState) { 8 super.setEnableVirtualButton(false); 9 super.onCreate(savedInstanceState); 10 11〜中略〜 12 13 me = this; 14 } 15 16 public static void launchNative(){ 17 System.out.println("launchNative"); 18 } 19}

試したこと

・extern "C" の追加
・メソッド名の変更
・Android.mkへ
LOCAL_SRC_FILES := $(LOCAL_PATH)/../../../Classes/NativeLauncher.cpp
の追加

補足情報(FW/ツールのバージョンなど)

http://glassonion.hatenablog.com/entry/20150318/1426687171
https://rakuishi.com/archives/5817/
こちらのサイトを参考にコーディングしました。
Xcode上でのiOSへのBuild、Runは成功しています。

・cocos2d-x 3.17.2
・AndroidStudio 3.4.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

こちらを参考に

// gradle.properties // ndk-buildに書き換え↓ // PROP_BUILD_TYPE=cmake PROP_BUILD_TYPE=ndk-build

投稿2019/08/09 07:34

Ragea

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問