我在预制apk的Android.mk中:
LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/app
LOCAL_PREBUILT_JNI_LIBS:= \
@lib/armeabi-v7a/libbspatch.so  \
@lib/armeabi-v7a/libHiiirNdk.so  \
@lib/armeabi-v7a/libroot.so  \
@lib/armeabi-v7a/libuninstalledobserver.so  \
@lib/armeabi-v7a/libxdelta3.so 
LOCAL_MULTILIB :=32但是会崩溃报错:
 java.lang.UnsatisfiedLinkError: dalvik.system.PathClass
Loader[DexPathList[[zip file "/system/framework/com.google.android.maps.jar", zi
p file "/system/vendor/operator/app/friDayAppAssistant/friDayAppAssistant.apk"],
nativeLibraryDirectories=[/data/app-lib/friDayAppAssistant, /vendor/lib64, /syst
em/lib64]]] couldn't find "libroot.so"
找不到库文件,然后我就在其他mk文件中把so文件直接导入/system/lib64目录下然后又崩溃报错:
java.lang.UnsatisfiedLinkError: dlopen failed: "/system/lib64/libroot.so" is 32-bit instead of 64-bit但是我把应用卸掉,然后直接安装又能正常运行。

解决方案 »

  1.   

    app是用source编译的吧?
      

  2.   

    getprop看看下面两个prop,是不是这样的,怀疑你的系统是64bit only的
    [ro.product.cpu.abi2]: [armeabi]
    [ro.product.cpu.abi]: [armeabi-v7a]
      

  3.   

    app是在台湾官网下的,不知道是怎么编的。。
      

  4.   

    从出错信息分析,我觉得是这个app被认为是64 bit的了。系统主要是根据apk所使用的native library来决定要用64还是32bit vm的,所以你直接安装的时候是好的,而预装的时候,lib和app的关系不明确,所以不行。
    试试两个做法:
    1,so就放在apk里面,不要拿出来。
    2,so放在apk目录下,例如testapk目录结构如下:
    vendor/app/testapk/testapk.apk
    vendor/app/testapk/lib/arm/
      

  5.   

    这个问题也困扰了我们很久 后来参考了这篇博客
    https://blog.csdn.net/zhjali123/article/details/44834631
    亲测有效 感谢一下这位博主