アンドロイドndkでネイティブコードをコンパイルしました。今、ライブラリを.apkの一部として保管するのではなく、アンドロイドシステム(system/lib64)にインストールし、私のアプリケーションをシステムからロードします。ライブラリをシステム/ lib64にプッシュし、アンドロイドアプリケーションのlibフォルダからライブラリを削除しました。私は以下のアンドロイドアプリからシステムライブラリへのネイティブライブラリの移動とアプリからのアクセス
"java.lang.UnsatisfiedLinkError: dlopen failed: library "something.so" not found"
を取得しています実行しようとすると、私のメイクファイルである。しかし
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng
LOCAL_C_INCLUDES += $(LOCAL_PATH) $(LOCAL_PATH)/Include
LOCAL_SRC_FILES := ABCProtocol/ABCProtocol.c ABCProtocol/DatalinkLayer.c ABCProtocol/PhysicalLayer.c
LOCAL_MODULE := libABCXYZProtocol
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng
LOCAL_C_INCLUDES += $(LOCAL_PATH) $(LOCAL_PATH)/$(KERNEL_DIR)/include $(LOCAL_PATH)/Include $(LOCAL_PATH)/Util $(LOCAL_PATH)/Include/Linux/XYZ $(LOCAL_PATH)/ABCProtocol
LOCAL_SRC_FILES := Linux/XYZ/ABCXYZLinux.c Util/Util.c Util/Logger.c
#LOCAL_CFLAGS += -Wno-error=format-security
LOCAL_CFLAGS += -w
LOCAL_MODULE := libABCXYZWrapper
LOCAL_SHARED_LIBRARIES :=libABCXYZProtocol
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng
LOCAL_MODULE:=com_example_reader_ABCXYZappnote_NativeLibrary
LOCAL_SRC_FILES:=com_example_reader_ABCXYZappnote_NativeLibrary.c
LOCAL_C_INCLUDES += $(LOCAL_PATH) $(LOCAL_PATH)/$(KERNEL_DIR)/include $(LOCAL_PATH)/Include $(LOCAL_PATH)/Util $(LOCAL_PATH)/Include/Linux/XYZ
#LOCAL_CFLAGS += -DANDROID
LOCAL_SHARED_LIBRARIES:=libc libABCXYZWrapper libABCXYZProtocol
include $(BUILD_SHARED_LIBRARY)
メイクファイル(Android.mk)のコードを共有できますか?この問題は、依存ライブラリをプッシュしなかった場合に発生します。このような場合、リンクが失敗します。 –
また、ライブラリを削除した後、アプリケーションを再構築してインストールしてください。依存関係がなくてもエラーが表示される場合は、アンドロイドのソースコードとmmコマンドを使用してライブラリを再度ビルドする必要があります。 –
ライブラリを手動でlib64にプッシュしました。私はそこで図書館を見ることができます。 System.loadLibrary( "system/lib64/smthng.so");を私に与えるべきですか? – Arjun