gomo544409 2022-10-20 10:59 采纳率: 0%
浏览 223
已结题

调试板子的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文件的提取了?

  • 写回答

3条回答 默认 最新

报告相同问题?

问题事件

  • 系统已结题 10月28日
  • 修改了问题 10月20日
  • 修改了问题 10月20日
  • 创建了问题 10月20日