我不确定,如果我做对了。它似乎正在做对位。如果我将标志android:extractNativeLibs设置为true,则应用程序占用大约70MB的用户空间(是的......)但是如果我将此标志设置为false,则设备上安装的应用程序的大小会跳到大约95MB。所以我不确定用户是否会喜欢这个。
答案 0 :(得分:17)
这有点棘手。当extractNativeLibs设置为false时,您的APK尺寸将更大。
当extractNativeLibs设置为true(默认)或未添加到清单时,您的本机库可以压缩存储在APK中。它们在安装过程中由PackageManager提取,并将副本放到/ data / app /中。因此,本机库有两个副本 - 一个在APK中压缩,一个未压缩在/ data / app /.
这种方法具有以下优点:
缺点:
Google在Marshmallow(Android 6)中引入的新方法是通过将extractNativeLibs设置为“false”来启用的。它希望这些库在APK(STORE方法)和zipaligned中未压缩存储。在安装过程中无需提取它们。在应用启动时,可以直接从APK加载库。
优点:
缺点:
预计,我没有发现两个选项的加载性能有明显差异。
extractNativeLibs =“false”选项对您的if:
非常有用例如,对于使用Unity制作的游戏,由于大型本机库,此选项几乎不适用。
Android应用套件是Google Play宣布的新分发机制,更多详情可在官方网站https://developer.android.com/platform/technology/app-bundle/和https://developer.android.com/guide/app-bundle/上找到
与传统的APK相比,它具有明显的优势,其中最重要的是150 Mb最大尺寸限制。 重要提示:这是下载大小,而不是应用包本身或生成的APK的大小。 (APK由Play生成并即时交付给设备,有关其工作原理的详细信息应在官方Android资源上提供。)
构建AAB时,默认情况下 extractNativeLibs 标志设置为“false”。但是,由于Google Play会在传送到终端设备的APK之上应用压缩,因此不会影响下载大小。这意味着这个标志只带来了Android App Bundles的好处 - 安装速度更快,磁盘尺寸更小,几乎没有额外成本,因为没有压力达到最大尺寸限制。
然而,一个令人困惑的事情是如何在接近150 Mb限制时计算下载大小,因为AAB大小并不表示下载大小。 bundletool 中有一个特殊的命令,或者您可以尝试直接将其上传到Play。如果您的AAB低于150 Mb,则无需担心。
(更新:对于应用程序包使用150 Mb大小限制而不是500 Mb;显然在开发人员预览中有500 MB可用,但截至目前尚未公开)。
答案 1 :(得分:6)
extractNativeLibs="false"
可能会适得其反。假设你使用的是每个ABI 10 MB的库,可以压缩到5 MB。如果你有3个ABI,那么结果是:
<强> extractNativeLibs = “真”强>:
APK: 15 MB (3 x 5 MB)
Extracted: 10 MB
Total: 25 MB
<强> extractNativeLibs = “假”强>:
APK: 30 MB (3 x 10 MB)
Extracted: 0 MB
Total: 30 MB
答案 2 :(得分:0)
虽然有一些重要的先决条件可以使用,但事情变得更加复杂:
更新:以下部分仅适用于Android Studio 2.1及更低版本。 从Android Studio 2.2 Preview 2和最新的构建工具开始,构建过程将自动在APK中存储未压缩和页面对齐的本机库。
更多信息:link
更新:如果您在某个时候手动为自己的应用进行了签名,则 时会调用zipalign。
警告:您必须在应用构建过程中的两个特定点之一使用zipalign,具体取决于您使用的应用签名工具:
来源:zipalign | Android Developers
Android 6+将阻止您使用未压缩的本机库安装未对齐的APK。较旧的Android并不关心并始终提取本机库。