Android Studio打包的应用程序,升级Gradle版本后(同步自动升级依赖的包),安装或在调试时候,程序中的so库无法找到,登陆相机发现/data/app/AQnKUYtqX0hjy7Db-HV6ww==/com.image.gxviewer-S0FwIhLVoDcCOuwMV7bcxA==/的这个目录下,并没有从base.apk里解压出来liba.so到目录/data/app/AQnKUYtqX0hjy7Db-HV6ww==/com.image.gxviewer-S0FwIhLVoDcCOuwMV7bcxA==/lib/arm64
Android Studio 2020.3.1 Gradle
NDK r10e
JAVA 1.8
板子:android 12
登陆板子,查看data/app/~~AQnKUYtqX0hjy7Db-HV6ww==/com.image.gxviewer-S0FwIhLVoDcCOuwMV7bcxA==/目录下内容如下:
rk3588_s:/data/app/~~AQnKUYtqX0hjy7Db-HV6ww==/com.image.gxviewer-S0FwIhLVoDcCOuwMV7bcxA== #
3147776 drwxrwxr-x 3 system system 4096 2022-10-19 15:13 .
3147782 drwxrwxr-x 3 system system 4096 2022-10-19 15:13 ..
3147777 -rw-r--r-- 1 system system 13430235 2022-10-19 15:13 base.apk
3147780 drwxr-xr-x 3 system system 4096 2022-10-19 15:13 lib
lib/arm64
查看base.apk的文件,里包含了我依赖的库,就是安装时候没有解压出来。
# zipinfo -1 base.apk | grep \.so <
lib/arm64-v8a/liba.so
META-INF/androidx.cursoradapter_cursoradapter.version
lib/arm64-v8a/libc.so
res/drawable/abc_text_cursor_material.xml
lib/arm64-v8a/libd.so
resources.arsc
rk3588_s:/data/app/~~98MHjXfmYb0dud_fNz9IxA==/com.example.buildjar-CHoDhtbPxPmfU4Qok-C-Gw== # ls -lla
total 12872
drwxrwxr-x 4 system system 4096 2022-10-19 14:22:23.040067272 +0800 .
drwxrwxr-x 3 system system 4096 2022-10-18 22:04:40.610239746 +0800 ..
-rw-r--r-- 1 system system 13161979 2022-10-18 22:04:40.543573073 +0800 base.apk
drwxr-xr-x 3 system system 4096 2022-10-18 22:04:40.596906411 +0800 lib
drwxr-xr-x 3 system system 4096 2022-10-18 22:04:40.596906411 +0800 lib/arm64
lib/arm64/liba.so
lib/arm64/lic.so
lib/arm64/libd.so
drwxrwx--x 3 system install 4096 2022-10-19 14:22:23.040067272 +0800 oat
按照网上的帖子内容,把这些库同步存放的路径是:app/main/jniLibs/和libs目录都有,以及修改abiFilters等都没有效果.
android {
compileSdkVersion 28
defaultConfig {
......
ndk{
abiFilters "armeabi-v7a","arm64-v8a"
}
}
sourceSets{
main{
jniLibs.srcDirs = ['libs']
}
}
......
}
├── libs
│ ├── arm64-v8a
│ │ ├── liba.so
│ │ ├── libc.so
│ │ └── libd.so
│ ├── armeabi-v7a
│ │ ├── liba.so
│ │ ├── libc.so
│ │ └── libd.so
│ └── galaxy-android-source.jar
└── src
├── androidTest
│ └── java
│ └── gxviewer
├── main
│ ├── AndroidManifest.xml
│ ├── cpp
│ ├── java
│ ├── jniLibs
│ │ ├── arm64-v8a
│ │ │ ├── liba.so
│ │ │ ├── libc.so
│ │ │ └── libd.so
│ │ └── armeabi-v7a
│ │ │ ├── liba.so
│ │ │ ├── libc.so
│ │ │ └── libd.so
从现象上来看,和gradle的版本存在直接的关系,但为啥会影响到安装的so文件的提取了?
首先看你这个相机使用的依赖,如果是编译时不打包进入apk那就可能导致运行时设备环境中没有该so库。如果你的设备可以使用adb install来安装apk,应该可以先用来调试看是不是这个问题导致的,如果是你可以把apk的格式改为zip,然后解压,打开lib,里面arm64-v8a中应该有你需要的那个so库,把这个so库放到手机中即可
软硬件兼容性考虑下吧,既然降低版本可以成功解压,那应该是兼容性的问题吧