我目前正在研究如何获得应用的即时应用版本。 我遇到的主要问题是如何将应用程序拆分为更小的块,以便满足即时应用模块最大4MB限制的要求。
现在我们的应用程序是一个包含多个片段视图的活动。 我们的主要Activity和Application类基本上掌握了大多数应用程序依赖项。 app gradle文件也是如此。我无法将其减少到4mb。
此时我认为除了创建一个包含原始Activity部分活动的多个活动的全新项目之外别无选择。 问题是片段视图通常与原始活动有依赖关系(因为活动或多或少是控制器)。所以我也需要修改它们。
我想知道是否有人在那里处理同样的挑战。想听听你采取什么方法来解决这种情况。
答案 0 :(得分:2)
我不确定是否有适用于所有应用的单一策略。在选择是否或如何重构您的应用程序时,有许多因素需要考虑(对于Instant Apps或其他方式)。
话虽如此,鉴于您提供的信息,这里有一些一般性指导。
选项#1 - 将当前APK降低到4MB或更低
鉴于您当前的APK大约为10MB,并且显然还有一些进一步优化大小的空间,因此可能会创建一个< = 4MB的即时应用功能APK。 docs有一些关于缩小APK尺寸的精彩信息,但这里有一些建议,根据您提供的信息,这些建议可能会给您带来最大的收益。请注意,您可以构建模块,以便这些更改仅对已编译的Instant App二进制文件产生影响,而不会影响常规APK。
xhdpi
或{{{} 1}} webp
格式,这种格式在所有Instant App设备上原生支持(对于某些图形,您也可以使用矢量绘图来查看)ConstraintLayout
,这可以帮助展平和简化布局(更高性能) )并且可能缩小尺寸shrinkResources
选项#2 - 重构您的应用
如果您认为可以将当前的APK降低到4MB或更低,那么下一步就是重构。如何实现这在很大程度上取决于您当前的代码库和应用程序的功能。但是,从较高级别开始,您应该确定应用程序中的任何逻辑断点,这些断点可以很好地排列为Instant App的关键入口点。例如,旅行应用程序可能为其酒店,航班和汽车租赁体验提供单独的入口点。
否则,您在原始问题中所做的大部分陈述都是正确的。您需要将应用从单个活动中分解为更加模块化的形式。
问题是片段视图通常具有依赖关系 原始活动(因为活动或多或少是一个控制者)。
通常应该避免对父活动有很大依赖性的子片段。如果可能的话,它们应该是相当划分的。这可能是解决问题的良好开端。
答案 1 :(得分:0)
尽管谷歌建议我为即时应用程序创建了一个全新的项目。将现有应用程序重构为功能和基础项目的整个过程很难。我花了将近一个月的时间来完成它,但失败了。我发现整个即时应用程序结构方式过于复杂,但仍然无法理解。 只需在真实应用和即时应用之间复制和粘贴代码就会更快。在许多情况下,真正的应用程序和即时应用程序之间的逻辑无论如何都略有不同。
答案 2 :(得分:0)
我们必须为200k +代码行项目做到这一点,我们的方法是创建一个仅供即时应用程序使用的新活动。我们在功能模块中创建了此活动。
然后我们将该功能使用的所有片段移动到功能模型中,并在即时应用活动和已安装的活动中使用这些片段。
然后我们将功能活动与必要的回调挂钩。
如果要在已安装的应用中排除功能活动,您只需在依赖关系链中再将该活动移动一步即可,但这对我们来说并不重要,因此我们将其保留在其中。
优点:节省大量时间 缺点:进行多项活动仍然是一种更好的设计。
答案 3 :(得分:0)
正如其他人已经提到的那样,您必须重构整个应用程序。但是任何人都没有清楚写的是下面的句子。
由于一个活动中有多个片段,因此此结构应提供将片段拆分为多个活动的功能。所有这些足够小的表格,然后是您的即时应用程序。