设置android:extractNativeLibs = false以减少应用程序大小

ego*_*ldx 6 android apk

如果我做对了,我不确定.它似乎正在做对位.如果我将标志android:extractNativeLibs设置为true,则应用程序占用大约70MB的用户空间(是的......)但是如果我将此标志设置为false,则设备上安装的应用程序的大小会跳到大约95MB.所以我不确定用户是否会欣赏这一点.

Ove*_*r17 21

这有点棘手.当extractNativeLibs设置为false时,您的APK大小会更大.

旧的行为

当extractNativeLibs设置为true(默认)或未添加到清单时,您的本机库可以压缩存储在APK中.它们在安装过程中由PackageManager提取,并将副本放到/ data/app /中.因此,本机库有两个副本 - 在APK中压缩,在/ data/app /中压缩.

这种方法具有以下优点:

  • 较小的APK大小,因为库是压缩的

缺点:

  • 增加安装大小(Settings => Apps中的"存储"或"在磁盘上"),因为除了APK之外,提取的本机库占用磁盘空间
  • 安装时间更长
  • 较少来自Google Play的优化,例如在生成更新补丁时

新的行为

通过将extractNativeLibs设置为"false",可以启用Google在Marshmallow(Android 6)中引入的新方法.它希望这些库在APK(STORE方法)和zipaligned中未压缩存储.在安装过程中无需提取它们.在应用启动时,可以直接从APK加载库.

好处:

  • 减少了安装大小(Settings => Apps中的"存储"或"在磁盘上"),因为不需要提取库.基本上,占用的空间通常只比APK大小多一点
  • 没有增加Google Play的下载大小,因为它在APK之上使用自己的压缩
  • 通过Google Play优化更新补丁生成,从而缩小所有更新尺寸.如果更新本机库,则压缩版本将产生巨大差异,从而导致更大的修补程序,而未压缩库的修补程序将相对较小.

缺点:

  • 较大的APK大小,因为本机库未压缩

预计,我没有发现两种选择的加载性能有明显差异.

结论

extractNativeLibs ="false"选项可能对您的if有用:

  • 你不关心APK的大小 - 要么它低于100 Mb限制,要么你已经在使用扩展文件(OBB)并且可以处理APK大小的增加
  • 您关心的是Google Play中应用的更新大小
  • 你的本地库不是很大.

例如,对于使用Unity制作的游戏,由于大​​型本机库,此选项几乎不适用.

更新:Android应用程序包

Android App Bundles是Google Play宣布的新分发机制,更多详情可在官方网站上获得https://developer.android.com/platform/technology/app-bundle/https://developer.android.com/guide /应用束/

与传统的APK相比,它具有明显的优势,其中最重要的是500 Mb最大尺寸限制.重要提示:这是下载大小,而不是应用包本身或生成的APK的大小.(APK由Play生成并即时交付给设备,有关其工作原理的更多详细信息应在官方Android资源上提供).

构建AAB时,默认情况下,extractNativeLibs标志设置为"false".但是,由于Google Play会在传送到终端设备的APK之上应用压缩,因此这不会影响下载大小.这意味着这个标志只会带来Android App Bundles的好处 - 安装速度更快,磁盘尺寸更小,几乎没有额外成本,因为没有压力达到最大尺寸限制.

然而,一个令人困惑的事情是当你接近500 Mb限制时如何计算下载大小,因为AAB大小不是下载大小的指示.在bundletool中有一个特殊的命令,或者您可以尝试直接将其上传到Play.如果您的AAB远低于500 Mb,则无需担心.


mhs*_*ith 6

extractNativeLibs="false"如果你的APK包含多个ABI,可能会适得其反.假设你使用的是每个ABI 10 MB的库,可以压缩到5 MB.如果你有3个ABI,那么结果是:

extractNativeLibs ="true":

APK:       15 MB (3 x 5 MB)
Extracted: 10 MB
Total:     25 MB
Run Code Online (Sandbox Code Playgroud)

extractNativeLibs ="false":

APK:       30 MB (3 x 10 MB)
Extracted:  0 MB
Total:     30 MB
Run Code Online (Sandbox Code Playgroud)

  • 如果您拆分 apk 或使用新的“.aab”捆绑包格式,则情况并非如此。 (2认同)