2016-10-04 6 views
0

アンドロイド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) 
+0

メイクファイル(Android.mk)のコードを共有できますか?この問題は、依存ライブラリをプッシュしなかった場合に発生します。このような場合、リンクが失敗します。 –

+0

また、ライブラリを削除した後、アプリケーションを再構築してインストールしてください。依存関係がなくてもエラーが表示される場合は、アンドロイドのソースコードとmmコマンドを使用してライブラリを再度ビルドする必要があります。 –

+0

ライブラリを手動でlib64にプッシュしました。私はそこで図書館を見ることができます。 System.loadLibrary( "system/lib64/smthng.so");を私に与えるべきですか? – Arjun

答えて

0

アプリケーションは、システム・ライブラリの場所から非パブリックAPIにアクセスすることを許可されていません:https://developer.android.com/about/versions/nougat/android-7.0-changes.html#ndk。あなたのアプリで使用されるライブラリは、あなたのアプリにパッケージ化されている必要があります。

なぜあなたはそれらを/ system/libに入れたいのですか?

+0

私はAndroid 6.0 SDKでこれをやろうとしていますが、ターゲットデバイスも6.0です。私はAPKでパッケージ化すると動作しないネイティブライブラリにいくつかの操作(ハードウェアへのアクセス)があるので、私はシステム/ libからライブラリを使用するとうまくいくと思った – Arjun

+0

あなたはそのアプリを出荷できません –

+0

私は、このアプリケーションを出荷する予定はありません。リファレンスボード用です。当社の内部でのみ使用しています。 – Arjun

関連する問題