我不确定是否有适用于所有应用程序的单一策略。在选择是否或如何重构您的应用程序(针对即时应用程序或其他方式)时,需要考虑许多因素。
话虽如此,鉴于您提供的信息,这里有一些一般性指导。
选项 #1 - 将当前 APK 减少到 4MB 或更少
鉴于您当前的 APK 约为 10MB,并且显然还有进一步优化大小的空间,因此可以创建一个 <=4MB 的 Instant App 功能 APK。文档有一些关于减少 APK 大小的重要信息,但这里有一些建议,根据您提供的信息,这些建议可能会给您带来最大的收益。请注意,您可以构建您的模块,以便这些更改仅影响您编译的 Instant App 二进制文件,而不影响您的常规 APK。
- 可绘制资源 - 删除多个密度桶,只保留一个桶(Android 系统仍会自动缩放资产以适应您不包括的其他密度),您可能只想保留
xhdpi
或可能xxhdpi
- 可绘制资源 - 如果有任何大型可绘制资源,请查看是否可以删除它们(例如,闪屏可绘制资源——即时应用不需要闪屏,因为系统会在即时应用启动之前为您显示)
- 可绘制资源 - 使用您留下的可绘制资源,看看您是否可以转换为
webp
所有即时应用设备本机支持的格式(对于某些图形,您还可以查看使用矢量可绘制资源)
- 翻译字符串——你能根据你最大的市场删除其中的一些吗?Instant Apps 还没有在某些国家/地区推出(确切的列表有望很快发布),但如果您有针对印度、印度尼西亚或巴西(新兴市场)的字符串,您可以为您的 Instant App 删除这些字符串
- 布局文件 - 如果您有尺寸特别大的特定布局文件,您可能需要考虑使用更新的布局管理器,例如
ConstraintLayout
,这可以帮助扁平化和简化您的布局(性能更高)并可能缩小尺寸
- 库和代码 - 您的代码中是否有任何可能与 Instant App 无关的库或部分?如果是这样,请确保删除模块的结构,以便它们不包含在 Instant App 二进制文件中
- 否则请确保您已启用 Proguard minify并
shrinkResources
打开
选项 #2 - 重构您的应用程序
如果您认为无法将当前 APK 减少到 4MB 或更小,那么下一步就是考虑重构。这在很大程度上取决于您当前的代码库和应用程序的功能。但是,从高层次上看,您应该识别应用程序中的任何逻辑断点,这些断点可以很好地排列为即时应用程序的关键入口点。例如,一个旅游应用程序可能为其酒店、航班和汽车租赁体验提供单独的入口点。
否则,您在原始问题中所做的大多数陈述听起来都是正确的。您需要将您的应用程序从单个活动分解为更加模块化的形式。
问题是片段视图通常与原始活动有依赖关系(因为活动或多或少是一个控制器)。
您通常应该避免子片段严重依赖其父活动。如果可能的话,它们应该被完全分隔开。这可能是解决问题的良好第一步。