更新到 Gradle 5.6.4 和 Android Studio 3.6.1 后 nativeLibraryDir 显示为空

Posted

技术标签:

【中文标题】更新到 Gradle 5.6.4 和 Android Studio 3.6.1 后 nativeLibraryDir 显示为空【英文标题】:nativeLibraryDir appears empty after updating to Gradle 5.6.4 and Android Studio 3.6.1 【发布时间】:2020-06-15 07:12:21 【问题描述】:

在将 Gradle 从 5.4.1 更新到 5.6.4 并将 android Studio 从 3.5.3 更新到 3.6.1 之后,我的库似乎不再存在于 nativeLibraryDir 中。我当前访问我的库的实现如下:

File libDirectory = new File(context.getApplicationInfo().nativeLibraryDir);
String files[] = libDirectory.list();

在更新之前,我可以调试并看到“文件”数组包含我所有库的列表,如预期的那样。 更新后,'files' 数组显示为空。

我分析了我的 APK 并确认包中确实存在这些库。

我是否以糟糕的方式检索路径?是否有我不知道的必需权限?我正在使用 CMake 构建我的库:

externalNativeBuild 
    cmake 
        path '../../../common/CMakeLists.txt'
    

使用 NDK 版本 21.0.6113669

更新: 恢复到 NDK r19c 会产生相同的结果

更新:libDirectory 在更新前后解析为 /data/app/com.example.application-1/lib/arm

更新:在 gradle.properties 中设置 android.useNewApkCreator=false 会产生相同的结果

更新:使用设备文件资源管理器,我可以在更新之前查看 lib/arm/ 文件夹中的库。更新后,lib/arm/ 文件夹的大小仍然相同(4KB),但我无法再查看文件夹内的内容。文件夹权限似乎没有改变。

【问题讨论】:

找到解决办法了吗? 同样的问题,关注 【参考方案1】:

我也遇到了这个问题,终于解决了:

// AndroidManifest.xml
<application
  ...
  android:extractNativeLibs="true"  
  ...
>

extractNativeLibs 设置为true 时,so files 复制到lib/xxx 文件夹。

【讨论】:

另见:***.com/questions/42998083/… 拯救了我的一天谢谢。【参考方案2】:

使用这个版本

dependencies 
    classpath 'com.android.tools.build:gradle:3.6.0'


使用 Gradle 5.6.4

【讨论】:

这些版本仍然存在问题

以上是关于更新到 Gradle 5.6.4 和 Android Studio 3.6.1 后 nativeLibraryDir 显示为空的主要内容,如果未能解决你的问题,请参考以下文章

更新gradle后Android单元测试无法解析被测类

最低支持的Gradle版本是6.1.1。当前版本为5.6.4

更新到 android gradle 插件 3.5 后的 proguard 问题

Android Gradle:signingConfig.name 不能为空

SDK接入之Could not find gradle.jar (com.android.tools.build:gradle:3.6.4)

Flutter 运行发布失败:支持的最低 Gradle 版本为 5.6.4。当前版本是 5.6.2