[過去ログ] Android Studio Part3 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。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ソースはノータッチに出来るかも。
644(1): デフォルトの名無しさん [sage] 2020/02/28(金) 13:52:14.66 ID:mGEHxTZy(2/3) AAS
>>642
これも試してないけど・・・
static public native void hogehoge(・・・
でnativeへの呼び出し口になってる部分を独立したクラスにして
これごと使いまわせば良いんじゃないかなあ。
異なるパッケージのjavaファイルを混ぜる方法はよくわからん・・・
646(1): デフォルトの名無しさん [sage] 2020/02/28(金) 17:47:42.20 ID:mGEHxTZy(3/3) AAS
>>645>最初のですと一箇所を変えて毎回soファイルをコンパイル
#define JNIFN(x) Java_company_appname_cla・・・の部分だけをxxx.hで
分離しとけばアプリ毎に一回作るだけだし、
最終的にAPKファイルにするにはAS上でビルドする必要があるので、
>soファイルは使いまわし
のほうが返って手間がかかりそうな・・・
個人的意見としては、ネイティブコードの担当者と各アプリの担当者が皆
違うとか、頻繁にC++部に修正が入るとかでないなら、AARにするメリット
はあまり無いと思う。
あと、
>外部リンク:qiita.com
AS2.xとAS3.xではNDK回りは大きく変わっているので、ネットで情報を探す
時は古い情報は役に立たないので要注意。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.040s