【问题标题】:Google Play Services (fused location provider) increases app size significantly?Google Play Services(融合位置提供商)显着增加应用程序大小?
【发布时间】:2014-12-27 12:10:07
【问题描述】:

我刚刚为我的应用添加了位置感知功能,基于 here 描述的简单“获取最后已知位置”功能,该功能使用融合位置提供程序。

我一直在努力使我的应用程序尽可能地轻量级,但令人失望的是,在添加简单位置感知的过程中,我的 apk 大小已从 185K 变为 2.1M。实际代码本身当然没有增加这么多,所以我假设它是从某个地方拉入一个大库。

知道如何再次减小我的 apk 大小吗?

谢谢。

【问题讨论】:

  • google play 服务库不断增长,它肯定会增加您的应用程序大小。按照@Mike 的建议启用 proguard,但您使用的 Google Play 服务中的类越多,您的应用程序就会越大。

标签: android geolocation google-play-services fusedlocationproviderapi


【解决方案1】:

几件事可以提供帮助:

  1. 使用 ProGuard 去除未使用的代码 - 大多数人在开发构建时禁用此功能,以避免额外的构建时间,并为发布构建启用。

  2. 使用新的粒度依赖管理introduced in Play Services 6.5。您可以选择您需要的 Play Services 组件并排除其他组件。来自文档:

在 6.5 之前的 Google Play 服务版本中,您必须将整个 API 包编译到您的应用中。在某些情况下,这样做会使您的应用中的方法数量(包括框架 API、库方法和您自己的代码)保持在 65,536 个限制以下变得更加困难。

从 6.5 版开始,您可以有选择地将 Google Play 服务 API 编译到您的应用中。

可以在here 中找到您可以包含的各个 API 的列表。

【讨论】:

  • 很好的答案。我首先尝试(2),将“compile 'com.google.android.gms:play-services:6.5.+'”替换为“compile 'com.google.android.gms:play-services-location:6.5.+' " 在我的 build.gradle 文件的依赖项部分。这将 sdk 减少到 1.5M ......很好但并不出色。然后我也尝试了(1),在 build.gradle 的 buildTypes>release 部分中将“minifyEnabled false”替换为“minifyEnabled true”。这使 sdk 大小降至 880K。仍然比我原来的 185K 大很多,但比 2.1M 好很多。谢谢!我想这大概是我能做到的最低点了吧?
  • 我想是的,是的。这里还有一个关于 SO 的悬而未决的问题,它表明包括 Play Services 然后 not 使用任何 API 仍然不允许 ProGuard 剥离整个 Play Services 代码。我不知道为什么会这样。
【解决方案2】:

在发布APP之前使用proGuard应该解决这个问题。我和android强烈推荐你。 proGuard 带有 android SDK 和混淆(在对您的应用程序进行逆向工程后使其更难阅读)并缩小您的代码。这意味着它会杀死您不使用的死代码,而您正在使用 right now 只是谷歌播放服务的一小部分。您使用的课​​程越多,您的应用程序就会越大。 Proguard 在逻辑上只能切断未使用的代码。希望对你有帮助

您可以在此处阅读有关如何在 android 中使用 proguard 的更多信息: http://developer.android.com/tools/help/proguard.html

他通常在这里做什么: http://proguard.sourceforge.net/

【讨论】:

  • 感谢您的回答。这是正确的,我只能将一个答案标记为“正确”,我感到很遗憾,但 stkent 的答案有两个建议,这两个建议都有助于减少本身的大小。
  • 但我比他快了近一个小时.....而且我认为你无论如何都会使用 proguard 所以另一个建议并不是什么大事,因为它会自动完成 proguard 的工作。 ..他们只是“工作”,因为你先做了第二个。如果您确实直接使用了 proguard,那么您在逻辑上就会与现在的大小相同......所以我现在也感觉很糟糕;)@drmrbrewer
  • 使用细粒度的依赖关系可以让您不必为调试构建启用 ProGuard - 否则,当您达到 64k 方法限制时,它将被强制 - 这将在开发时加快您的构建过程,因此同时使用技术结合起来确实有优势。
  • @stkent 你是对的,如果你真的达到极限可能很重要。仅当您使用大型外部库时才会发生这种情况。但无论如何,我也会坚持这一点:developer.android.com/tools/building/multidex.html
猜你喜欢
  • 2013-08-02
  • 2013-09-01
  • 2014-10-02
  • 2014-11-29
  • 2013-09-26
  • 2016-09-20
  • 2014-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多