调试板子的apk程序,提示/base.apk!/lib/arm64-v8a下无法找到so库的问题

问题遇到的现象和发生背景

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

  1. 在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
  1. 同样的程序,降低一下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文件的提取了?

看看这个能解决吗
【错误记录】Android 应用配置第三方 so 动态库 ( /data/app/comxxx==/base.apk/lib/arm64-v8a]couldn‘t find “libx.so“ )_韩曙亮的博客-CSDN博客

首先看你这个相机使用的依赖,如果是编译时不打包进入apk那就可能导致运行时设备环境中没有该so库。如果你的设备可以使用adb install来安装apk,应该可以先用来调试看是不是这个问题导致的,如果是你可以把apk的格式改为zip,然后解压,打开lib,里面arm64-v8a中应该有你需要的那个so库,把这个so库放到手机中即可

软硬件兼容性考虑下吧,既然降低版本可以成功解压,那应该是兼容性的问题吧