首页 > 解决方案 > 将 gradle 构建工具从 3.6.1 升级到 4.1.0 时,特权应用程序的 dlopen 失败

问题描述

我有一个位于 /system/priv-app/MyTestApp 的应用程序。android 源代码环境为 Android P (API 28)。

起初,MyTestApp.apk 是使用 gradle 构建工具 3.6.1 构建的。然后我将它升级到 4.1.0 并构建一个新的 MyTestApp.apk 并在 rom 中预构建它。所以崩溃发生了。

E AndroidRuntime: java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/priv-app/MyTestApp/MyTestApp.apk!/lib/armeabi-v7a/libmytest.so" not found
E AndroidRuntime:       at java.lang.Runtime.loadLibrary0(Runtime.java:1016)
E AndroidRuntime:       at java.lang.System.loadLibrary(System.java:1669)

我拉取文件/system/priv-app/MyTestApp/MyTestApp.apk,解压文件,发现libmytest.so存在。它肯定是由 gradle 构建工具升级引起的。但我找不到原因。任何人都可以提供一些帮助吗?

标签: androidandroid-gradle-pluginzipalign

解决方案


在查看源代码后,我发现在bionic/linker/linker.cpp

if (entry.method != kCompressStored || (entry.offset % PAGE_SIZE) != 0) {
  close(fd);
  return -1;
}

entry.offset % PAGE_SIZE != 0此条件失败。

所以我猜 AGP 4.1+ 的 zipalign 有问题。

仍在调查中。


推荐阅读