问题遇到的现象和发生背景
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
- 在Android Studio里使用gradle6.0(插件3.6.4)以上版本编译程序(sync时候会自动升级对应库),debug运行时候,就发现程序无法找到liba.so, 找库代码添加输出信息:data/app/~~AQnKUYtqX0hjy7Db-HV6ww==/com.image.gxviewer-S0FwIhLVoDcCOuwMV7bcxA==/base.apk!/lib/arm64-v8a/liba.so,这个库没有找到。
登陆板子,查看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
- 同样的程序,降低一下gradle的版本5.5(插件3.5.4),再次编译后,找库代码添加输出信息:data/app/~~F5Wb4UEQsUDtwCLPYWVgJg==/com.image.gxviewer-ydxZSAvrVqtGTlc8605rsg==/lib/arm64/liba.so,这个就是正常的,库从base.apk里解压到了./lib/arm64/*.so
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文件的提取了?