如何自定义Google Play服务以减少jar大小?

时间:2014-10-22 11:37:20

标签: android google-play-services

我想知道是否有办法自定义google-play-services.jar

Google play services version 6.1

我发现新版本有24K方法,使我的应用程序超出Max方法计数(~65K),因此我无法创建APK文件(或DEX)。

过去我在某个网站上看到您可以通过启用/禁用来配置google-play-services.jar  未使用的功能

我的旧罐子重量是7K(而不是19K),我不能跳到24K,太膨胀了。

有什么建议吗?

[编辑]

我发现 this 问题@Eric Lafortune建议使用Proguard

4 个答案:

答案 0 :(得分:14)

理想情况下,您应该使用ProGurad,但是您可以按照以下两个步骤操作:

第1步:从jar文件中删除未使用的类

使用zip文件管理器(如Winrar或7zip)打开库项目中的 google-play-services.jar 。您会找到许多文件夹,例如maps, games,只需删除您不需要的文件夹。请务必保留common, dynamic, internal

第2步:从res文件夹中删除未使用的资源

google-play-services_lib \ res文件夹中的大多数资源可能没用,因此您可以删除它。其中包括values-af, values-am, ....您需要保留的是颜色,drawable, drawable-hdpivalues文件夹。

刷新并构建 google-play-services_lib 项目和项目。你的apk大小应该减少。

答案 1 :(得分:5)

在Android Studio中您可以使用Google播放服务中的单个库,例如

compile 'com.google.android.gms:play-services:7.5.0'

这些行:

compile 'com.google.android.gms:play-services-maps:7.5.0'
compile 'com.google.android.gms:play-services-ads:7.5.0'
compile 'com.google.android.gms:play-services-analytics:7.5.0'
compile 'com.google.android.gms:play-services-location:7.5.0'

此处提供完整列表https://developers.google.com/android/guides/setup

某些API没有单独的库;通过包含基础库来包含它们

答案 2 :(得分:4)

请记住:

  • 始终建议使用Proguard
  • MultiDex,尽管在运行时增加了开销,但是当你真正使用所有这些方法时,是唯一可行的解​​决方案(这种情况很少见!)

如果您使用的是Gradle,并且只想自动排除您不使用的Play服务部分,这是最简单,最快速,最有效的方式:https://gist.github.com/Takhion/10a37046b9e6d259bb31

只需按照建议添加,然后对{strong>需要的部分exclude发表评论!

对于调试构建非常有用,你希望每次都能通过Proguard;)

答案 3 :(得分:0)

你是否以android 2.3为目标?

如果没有,请使用MultiDex支持库。

从这里开始:Google+


MultiDex支持库

所以你的应用程序变得太大了:你超过了Dex限制。也许你已经利用了那些可能会失去一些重量的一些非常有用的库(谷歌播放服务,我看着你)。您不得不诉诸于限制应用程序的功能或做出疯狂的黑客来解决限制。不再:欢迎使用MultiDexApplication!

MultiDexApplication是sdk\extras\android\support\multidex\library\libs中的一个简单的android-support-multidex.jar的一部分,通过让你的应用程序为你提供所有API 4+设备的MultiDex支持(好吧,直到v21,你可以在这里得到它)扩展MultiDexApplication或在应用程序的attachBaseContext中调用MultiDex.install(context)。就是这样。严重。

注意:在走下Multidex兔子洞之前,你应该真的,真的是Proguard。

Link