如何减小使用Visual Studio 2015构建的apk大小?

3
我正在制作一个带有可移植类库(PCL)的Xamarin Forms应用程序。
我创建了一个包含两个屏幕的应用程序。当生成.apk时,我注意到它太大了。我发现这是由于链接器/链接过程造成的。
我生成.apk的步骤如下:
1. 生成配置: 发布 - 任何CPU 2. 构建 --> 清理解决方案 3. 构建 --> 构建解决方案 4. 在解决方案资源管理器中,选择Android(Droid)项目 5. 构建 --> 导出Android包(.apk) 6. apk包在project_folder/bin/Release/project-name.Droid-Signed.apk
结果是一个大小约为17 MB的包。
我尝试减小大小所做的步骤如下:
  1. 右键单击 Android (Droid) 项目
  2. 点击 "属性" 选项
  3. 选择 "Android 选项" 标签
  4. 然后选择 "链接器" 选项卡
  5. 在链接组合框中,我选择了 Sdk Assemblies Only
  6. 然后重复步骤生成 apk。

当选择链接组合框时:

  • Sdk Assembles only: apk 的大小相同(17 MB)
  • Sdk and User Assembles: 大小减小(13 MB),但我认为这太多了。此外,在移动设备上安装包并运行应用程序时,它会立即停止。我认为这与某些依赖项未被包含有关。

注:

  • 我还没有设置图像资源。
  • 我从 NuGet 中包含了一个 ZXing 依赖项。

编辑:

我解压了 apk,它的结构是:

  • /assemblies/(10.8 MB,包含许多.dll文件)
  • /lib/armeabi/(2.84 MB,包含libmonodroid.so和libmonosgen-2.0.so)
  • /lib/armeabi-v7a/(2.80 MB,包含libmonodroid.so和libmonosgen-2.0.so)
  • /lib/x86/(3.41 MB,包含libmonodroid.so和libmonosgen-2.0.so)
  • /META-INF/(100 KB)
  • /res/(1.02 MB)
  • AndroidManifest.xml(4 KB)
  • classes.dex(2.5 MB)
  • environment(1 KB)
  • NOTICE(1 KB)
  • resources.arsc(241 KB)
  • typemap.jm(332 KB)
  • typemap.mj(381 KB)

一种解决方案是为每个体系结构创建一个.apk。在这种情况下,每个.apk占用13-14 MB,在lib文件夹中仅包括特定体系结构的libmonodroid.so和libmonosgen-2.0.so。我仍然认为14 MB太大了。

我如何知道assembles文件夹中可以省略哪些文件?
我听说(来自朋友),在Google Play上发布单个.apk时,如果apk包含所有架构(arm、x86等)的库,并且包大小为17 MB,则当用户下载应用程序时,Google Play会生成一个具有特定移动用户特征的.apk(14 MB)。这是真的吗?如果是这样,发布一个17 MB的.apk不会有问题。
这个答案是我所提问的内容,但它没有澄清我可以省略哪些assembles或者如何排除它们。我不认为打开/解压.apk文件并删除库和assembles是一种礼貌的解决方案。

1
我建议您遵循tiny sunlight的建议,解压缩您的.apk文件并查看其中的大文件。您可以简单地提取.apk文件,然后在Windows上使用类似WinDirStat的工具(https://windirstat.info/),或者在Mac上使用Disk Inventory X(http://www.derlien.com/)。 - Jon Douglas
3
你的APK中包含哪个ABI?对于基于NDK的Mono运行时加用户程序集,大约13MB左右......请查看我的答案https://dev59.com/0ZDea4cB1Zd3GeqPdZT8#33416893。 - SushiHangover
2
可能是请帮助减小Xamarin.Android apk大小的重复问题。 - SushiHangover
@JonDouglas,正如你建议的那样,我使用了WinDirStat工具来查看哪些文件最重。我解压了apk包,发现只有“lib”文件夹占用了9 MB(每个架构分别为x86、armeabi和armeabi-v7a,每个架构占用3 MB)。 - stivex
@SushiHangover 是的,我已经尝试使用Linking来减小apk的大小,但是我无法显著地减小大小。一个没有图片的两个屏幕的应用程序,14 MB太重了,从Google Play下载。也许我漏掉了一些步骤。我不明白为什么链接过程不能显著减小apk的大小。也许我需要在我的代码或项目中定义一些标签或声明? - stivex
显示剩余2条评论
1个回答

1
你可以解压apk文件以查看是哪个部分导致了它的体积过大。你也可以破解apk文件以查看其中包含的程序包。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接