我正在制作一个带有可移植类库(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的包。
我尝试减小大小所做的步骤如下:
我听说(来自朋友),在Google Play上发布单个.apk时,如果apk包含所有架构(arm、x86等)的库,并且包大小为17 MB,则当用户下载应用程序时,Google Play会生成一个具有特定移动用户特征的.apk(14 MB)。这是真的吗?如果是这样,发布一个17 MB的.apk不会有问题。
这个答案是我所提问的内容,但它没有澄清我可以省略哪些assembles或者如何排除它们。我不认为打开/解压.apk文件并删除库和assembles是一种礼貌的解决方案。
我创建了一个包含两个屏幕的应用程序。当生成.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的包。
我尝试减小大小所做的步骤如下:
- 右键单击 Android (Droid) 项目
- 点击 "属性" 选项
- 选择 "Android 选项" 标签
- 然后选择 "链接器" 选项卡
- 在链接组合框中,我选择了 Sdk Assemblies Only
- 然后重复步骤生成 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是一种礼貌的解决方案。