[過去ログ] Android Studio Part3 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
643(1): デフォルトの名無しさん [sage] 2020/02/28(金) 13:22:34.25 ID:mGEHxTZy(1/3) AAS
>>642642(2): 640 [sage] 2020/02/28(金) 12:11:16.64 ID:EnnwOLKH(1/3) AAS
新しいプロジェクト「cpptest」にsoファイルをコピーして実行したら下記エラーが出て
java.lang.UnsatisfiedLinkError: No implementation found for int[] sample.test.cpptest.MainActivity.intFromJNI(int[])
ライブラリ作成時のプロジェクト「cppmodule」の関数名にプロジェクト名が入っているので、
・Java_sample_test_cppmodule_MainActivity_intFromJNI(
の「cppmodule」を「cpptest」に書き換えてビルドしてからコピーしたら、System.loadLibrary()で呼び出すことは出来ました
ただ毎回新たなプロジェクト名に合わせて関数名を変えてビルドし直すのは面倒ですしヒューマンエラーの元ですし、
プロジェクト名に依存しない汎用的な関数名にすることは出来ないのでしょうか?
>プロジェクト名に依存しない汎用的な関数名にすることは出来ないのでしょうか?
自分は、下記のように関数名の要変更部分をマクロにすることで
一ヶ所だけ変えれば良いようにしてる。
// 関数名の変換マクロ
#define JNIFN(x) Java_company_appname_classname_##x
:
extern "C" JNIEXPORT jboolean JNICALL
JNIFN(InitSdCore)(JNIEnv *env, jclass /*type*/, jclass ctx,・・・
:
extern "C" JNIEXPORT void JNICALL
JNIFN(CancelInit)(JNIEnv* /*env*/, jclass /*type*/, jboolean bSet・・・
実際に試してみてはないけど、CMakeLists.txt でコンパイラへのコマンドラ
インオプションを記述出来るから
target_compile_options(
-DJNIFN(x) Java_company_appname_classname_##x
)
とか記述しとけば、Cソースはノータッチに出来るかも。
645(1): 640 [sage] 2020/02/28(金) 16:43:54.21 ID:EnnwOLKH(2/3) AAS
>>643-644
回答ありがとうございます、最初のですと一箇所を変えて毎回soファイルをコンパイルする必要があるのですね
native呼び出し部分をパッケージごとクラスにすれば、soファイルは使いまわしが出来るかもしれませんね
外部リンク:qiita.com
モジュールでJNIが使えないのが謎ですが、試してみます
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.046s