3

Android アプリケーションで共有ライブラリ (.so) を使用する際に問題が発生しています。私は3つのプロジェクトを持っています:

  1. ネイティブ コード プロジェクト => .so ライブラリに C++ ファイルをビルドlibNative.soと呼びましょう

  2. Android ライブラリ プロジェクト => ネイティブ コードを呼び出します。このプロジェクトの出力は .jar ファイルです。「 stack.jar」としましょう

  3. Android ライブラリ プロジェクトを使用した Android アプリのサンプルです。

サンプル アプリケーション (3) ライブラリのプロパティ タブでは、stack.jar ファイルを .so ライブラリとリンクするように構成しました。私の .so ネイティブ ライブラリは、生成された APK に適切に含まれています。=> Eclipse はそれを " lib /armeabi" フォルダーにコピーします。

スマートフォンで APK を起動すると、次のエラーが表示されます。

Caused by: java.lang.UnsatisfiedLinkError: Couldn't load libNative:
findLibrary returned null at
java.lang.Runtime.loadLibrary(Runtime.java:365) at
java.lang.System.loadLibrary(System.java:535)

エラーは、Eclipse がlibsではなく lib フォルダーに .so ライブラリをコピーし、その System.loadLibrary がパスlibs/armeabi ...を探していることだと思います。または、私は完全に間違っているかもしれません!

ご協力ありがとうございました。

編集: APK をインストールすると、.so lib がdata/data/mypackage/libフォルダーにコピーされます。それでも、読み込めません。アプリケーションサンプルで直接ではなく、.jar ファイルでロードが行われているためでしょうか??

4

1 に答える 1

3

によると、 libExample.soという動的ライブラリが生成されました。

  1. libExample.so をプロジェクトのlibs/armeabiフォルダーに配置します (存在しない場合は作成します)。
  2. faddenが言ったように、クラスに次のコードを書きます:

    try
    {
        System.loadLibrary("Example");
    }
    catch (UnsatisfiedLinkError use)
    {
        Log.e("JNI", "WARNING: Could not load native library");
    }
    

    動作するはずです!

于 2013-07-17T07:48:22.533 に答える