Cat*_*ivo 8 android android-ndk android-source apk
我尝试将预建的APK添加到我的Android版本中.APK包含几个共享库(*.so文件).它编译没有问题,但我仍然从应用程序收到一个错误,表明无法找到库.
为什么会这样?
这是android.mk代码:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := apkwithso
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_REQUIRED_MODULES := libx liby libz
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
include $(BUILD_PREBUILT)
Run Code Online (Sandbox Code Playgroud)
libx,y,z是我的libx.so,liby.so和libz.so
我还试图将.so手动从APK复制到lib目录,但它没有用.
我正在使用Android 4.1.2编译Galaxy Nexus Maguro.
Jus*_*ser 16
我自己遇到过这个问题,原因是当APK文件包含在构建中时,它们基本上绕过了安装过程.这个安装过程是从apk中提取任何共享库并放在适当位置的地方,如果从未发生过这样的库,则库将无法使用.这是因为在AOSP构建期间从源构建的包或者在构建过程中包含其预构建的共享库,或者它们的库也是从源构建的,并且在任何一种情况下,这些库都放在适当的位置.
出于这个原因,除了apk模块本身,你应该在同一个.mk文件中添加以下内容:
include $(CLEAR_VARS)
LOCAL_MODULE := libapkwithso
LOCAL_SRC_FILES := lib/libapkwithso.so # or wherever your so is
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := .so
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
include $(BUILD_PREBUILT)
Run Code Online (Sandbox Code Playgroud)
然后加:
LOCAL_REQUIRED_MODULES := libapkwithso
Run Code Online (Sandbox Code Playgroud)