【发布时间】:2021-03-08 17:41:47
【问题描述】:
我将android:extractNativeLibs="true" 设置为Android 29,以使我的共享库被Android 提取到/data/app/%package%/...。如果适用于 APK 到 workaround Android 10 permissions 问题就可以了。
最近我不得不切换到AAB,因为我的 APK 大小超过了 100Mb 的 Google Play 限制,下载大小增加到 150Mb。从 AAB 测试 APK 安装 [Android Studio 中的“APK from app bundle”部署选项] 我注意到 /data/app/%package%/.. is empty (与纯单个 APK 安装相比)这是一个问题,因为我需要它们能够作为可执行文件执行(请参阅解决方法中的详细信息)。我检查了构建目录中的拆分 apk,它们包含适合我的测试设备的设置:
/out/base-arm64_v8a_2.apk
/out/base-ru.apk
/out/base-master_2.apk
/out/base-xxhdpi.apk
我可以在 apk 中看到共享库。
但是,对于 AAB,android:extractNativeLibs="true" 会被忽略。
这是错误还是功能?即使对于 AAB,我如何强制提取库?
PS。在 gradle.properties 中使用 Gradle 插件 5.6 和 android.enableAapt2=true。尝试了 Release 和 Debug 变体。
【问题讨论】:
-
出于好奇,您能否解释一下为什么需要提取这些库?我想了解用例。
-
正如解决方法链接中提到的那样,它们本质上是可执行文件。用例只是为了重用 3rd-party sdks/toolchains 的现有功能(为简单起见,请考虑在 Android 上使用的 GCC)。在 Java/Kotlin 中重新实现它是绝对不现实的,并且非常不希望制作可执行文件的共享库。严格要求并阻止开发人员在应用程序目录中运行可执行文件感觉非常混乱。
标签: shared-libraries apk android-10.0 android-security android-app-bundle