android - 将 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 构建工具升级引起的。但我找不到原因。任何人都可以提供一些帮助吗?
解决方案
在查看源代码后,我发现在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 有问题。
仍在调查中。
推荐阅读
- swift - UICollectionViewDelegateFlowLayout 没有改变单元格边界
- c# - 为什么不直接使用 DateTime.Now?
- wso2 - 有没有办法更改可用于 JWT 授权的令牌端点的默认端口 (9443)?
- scala - 幻影:创建自定义索引和查询?
- javascript - Javascript在图像画布上围绕形状绘制边框
- bash - -bash:unalias:emacs:未找到
- laravel - 如何将 Laravel QueryBuilder 中的子查询链接到外部表
- vba - VBA 错误处理程序:On Error Resume 在处理程序中不起作用
- list - 如何在 Rascal 中将“IO 操作”与列表理解或映射器一起使用?
- sql - 如何从包含阿拉伯文或波斯文字母的表格中选择所有行?