7

ネイティブ アクティビティを含む Android プロジェクトがあります。このネイティブ アクティビティは、「main」という名前の共有ライブラリ (libmain.so ファイル) を使用して開始します。( ndk/samples/native-activity のコードで)

このアプリは正常に動作します。

「メイン」モジュールの Android.mk ファイル:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE    := main
LOCAL_SRC_FILES := main.cpp

LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv1_CM

LOCAL_STATIC_LIBRARIES := android_native_app_glue game

include $(BUILD_SHARED_LIBRARY)

$(call import-module,android/native_app_glue)

ここで、「メイン」ライブラリで使用される別の共有ライブラリ (ゲーム エンジンなど) を追加したいと考えています。「ゲーム」モジュール (libgame.so) を作成しました。

しかし、「メイン」を「ゲーム」にリンクすると、次のようになります。

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE    := main
LOCAL_SRC_FILES := main.cpp

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../game

LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv1_CM
LOCAL_LDLIBS += $(LOCAL_PATH)/../../libs/$(TARGET_ARCH_ABI)/libgame.so

LOCAL_STATIC_LIBRARIES := android_native_app_glue game

include $(BUILD_SHARED_LIBRARY)

$(call import-module,android/native_app_glue)

コードなしで変更なし!
アプリが起動しなくなり、Logcat に次のエラーが表示されます。

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mycompany.myproject/android.app.NativeActivity}: java.lang.IllegalArgumentException: Unable to load native library: /data/data/com.mycompany.myproject/lib/libmain.so

このクラッシュは、共有ライブラリへのリンクを追加したことが原因です...

共有ライブラリにリンクするとアプリが読み込まれない (クラッシュする) のはなぜですか?
ネイティブ Android プロジェクト (no-java / native-activity) で共有ライブラリを使用するにはどうすればよいですか?
(可能だと思います...そうでなければ、ネイティブのアクティビティはかなり制限されます...)

ありがとう !:)

4

1 に答える 1

0

すべての共有ライブラリを AndroidManifest.xml ファイルにリストする必要があると思います。

<meta-data android:name="android.app.lib_name" android:value="game" />
<meta-data android:name="android.app.lib_name" android:value="main" />

ライブラリの順序がわからない。うまくいかない場合は、順序を変更してみてください。

于 2012-02-02T18:28:29.143 に答える