将本机库从android应用移到系统库并从应用中访问它

问题描述:

我已经用android ndk编译了一个本机代码。现在,而不是将该库作为.apk的一部分,我想将它安装在android系统(system/lib64)中,并从系统加载我的应用程序。我把库推到了system/lib64,并从android应用程序的lib文件夹中删除了这些库。但是,当我尝试运行我得到将本机库从android应用移到系统库并从应用中访问它

"java.lang.UnsatisfiedLinkError: dlopen failed: library "something.so" not found" 

以下是我的makefile

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

你能分享你的makefile(Android.mk)的代码吗?当您没有推送依赖库时,会出现此问题。在这种情况下链接失败。 –

+0

删除库后也重新构建和安装应用程序。如果没有依赖关系,并且您仍然看到错误,则可能是您必须将它放入android源代码并使用mm命令重新构建库。 –

+0

我手动推送库到lib64。我可以在那里看到图书馆。我应该给System.loadLibrary(“system/lib64/smthng.so”);? – Arjun

应用程序不能从系统库位置访问非公开的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