5

スタンドアロン NDK ツールチェーンで構築したライブラリを読み込もうとしています。

libGLmove.so をビルドし、Eclipse プロジェクトの libs/armeabi に配置しました。

ただし、への呼び出しSystem.loadLibrary("GLmove")UnsatisfiedLinkError

問題を解決する方法、または Android にライブラリを見つけさせる方法についてのアイデアはありますか? ndk-build はビルド後にライブラリをどのようにパッケージ化しますか?

編集:正確なコンパイルフラグは次のとおりです。

/Users/thomas/Documents/android-ndk-r5b/toolchains/arm-eabi-4.4.0/prebuilt/darwin-x86/bin/arm-eabi-g++ --sysroot=/Users/thomas/Documents/android-ndk -r5b/platforms/android-8/arch-arm -march=armv7-a -mfloat-abi=softfp -mfpu=neon -Wl,--fix-cortex-a8 -fno-exceptions -fno-rtti -nostdlib -fpic -共有 -o GLmove.so -O3

4

5 に答える 5

4

生成された .APK ファイルをチェックインして (zip ユーティリティを使用して表示/アーカイブ解除します)、ライブラリがパッケージ化されているかどうかを確認しましたか? プロジェクト内の "libs" フォルダーと私のビルド マシンに組み込まれるものはすべて、APK の "lib" ('s' なし) というフォルダーに入ることに気付いたので、そうではないのではないかと少し疑っています。 .

Eclipse のビルド プロセスが、認識していないライブラリをパッケージ化していないことが判明しても、それほど驚かないでしょう。もちろん、これは適切な場所にあるという理由だけでパッケージ化されるリソースで起こることとは異なります。

ライブラリが APK ファイルにない場合は、パッケージ マニフェストに表示されず、署名も壊れるため、ライブラリを手動でそこに入れることはできないと思います。

Eclipse プロジェクトが NDK プロジェクトであるかどうかについては言及していません (プロジェクトを右クリックし、[Android ツール] -> [ネイティブ サポートを追加] をクリックします)。ターゲットではなく依存関係として Android.mk ファイルに。

または: ライブラリをプロジェクトの /res に配置して、System.loadLibrary() の代わりに System.load() を使用してロードすることもできます。私はそれを自分で試したことがないことを認めます。

于 2011-06-09T15:57:14.413 に答える
2

私はこれと同じ問題に遭遇していました。私が間違っていたこと。

  1. makeファイルで、「LOCAL_SRC_FILES」のスペルが間違っていました。
  2. cソースファイルでは、メソッド名の中にライブラリ名がありました

Java_com_my_namespace_libname_activity_methodName(JNIEnv* env, jobject _this) {
//Fancy Native Junk Here
}

これら2つの問題を修正したら、ndk-buildを再実行し、eclipseプロジェクトをF5で更新して動作を開始しました。

于 2011-06-02T21:09:28.287 に答える
2

多くの詳細を提供することはありませんが、.so構築した は、使用している電話のバージョンでは利用できないライブラリに依存している可能性があります.

ターゲットにしている Android SDK のバージョンを NDK に伝える方法が見つからないため、この側面がどのように機能するかについて明確な考えはありませんが、依存関係を持ち込むのは簡単なようです新しい SDK バージョンからあなたのバージョンに.soロードされるため、すべての携帯電話で読み込まれるわけではありません。

于 2011-06-04T15:02:24.257 に答える
1

System.loadLibrary( "GLmove")の構文と場所を確認してください

System.loadLibrary呼び出しは、Javaソースファイルの静的ブロックにある必要があります

static {
    System.loadLibrary("nativelib");
}

http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jniexamp.html

于 2011-06-02T05:55:19.583 に答える
1

ネイティブ ライブラリに他のライブラリが必要な場合は、最初にそれらをロードする必要があります。それでも問題が解決しない場合は、プロジェクト ディレクトリにスペースが含まれていないことを確認してください。

また、このチュートリアルが役立つ場合があります: http://mindtherobot.com/blog/452/android-beginners-ndk-setup-step-by-step/

于 2011-06-09T18:54:37.073 に答える