【问题标题】:How to customize Google play services to decrease jar size?如何自定义 Google Play 服务以减小 jar 大小?
【发布时间】:2015-07-03 15:59:30
【问题描述】:

不知道有没有办法自定义google-play-services.jar

Google play services version 6.1

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

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

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

有什么建议吗?

[编辑]

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

【问题讨论】:

  • 你试过开启 ProGuard 吗?
  • @Squeazer 是的,我想使用 proGuard,但我记得在现场我能够检查/取消选中带有功能的标志并下载自定义 jar。今天找不到了

标签: android google-play-services


【解决方案1】:

理想情况下,您应该使用 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 大小应该减小。

【讨论】:

  • 非常感谢!这将我从65k method issue 中救了出来!
  • 谢谢谢谢谢谢!由于 65k 方法问题,我把头发扯掉了。这太棒了。
  • 你能告诉我我可以删除哪个文件夹我只需要gcm功能我不确定我可以删除哪个(
【解决方案2】:

在 Android Studio 中,您可以使用来自 google play 服务的单个库,例如

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 没有单独的库;通过包含基础库来包含它们

【讨论】:

    【解决方案3】:

    请记住:

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

    如果您正在使用 Gradle 并且只想自动排除 Play Services 中您不使用的部分,这是最简单、最快和最有效的方法:https://gist.github.com/Takhion/10a37046b9e6d259bb31

    只需按照建议添加它并在您需要的部分上评论exclude

    对于您不想每次都通过 Proguard 的调试版本非常有用;)

    【讨论】:

    • @fessy 在同一个文件夹中添加strip_play_services.gradle,您的应用程序的build.gradle 并在其中添加apply from: 'strip_play_services.gradle'(我在各种插件之后执行此操作)。如果您使用 Proguard,请将要点中的行添加到您的 proguard-rules.txt 中,然后您就可以设置了!现在重建并享受:)
    • @Takhion 这可以从谷歌播放服务库项目中排除这些类吗?因为我使用的是 Eclipse 而不是 Android Studio。
    • @Amarnath 脚本依赖于 Gradle。从技术上讲,您可以手动剥离软件包,但这是一个巨大的痛苦……如果可以,您应该切换到 Gradle / Android Studio!
    【解决方案4】:

    你的目标是 android 2.3 吗?

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

    从这里:Google+


    MultiDex 支持库

    所以您的应用程序变得太大:您超出了 Dex 限制。也许您已经利用了一些可以减轻体重的可笑有用的库(Google Play Services,我在看着您)。你不得不求助于限制你的应用程序的功能或做疯狂的黑客来解决这个限制。没有了:欢迎使用 MultiDexApplication!

    MultiDexApplication 是sdk\extras\android\support\multidex\library\libs 中一个简单的 android-support-multidex.jar 的一部分,它通过让您的应用程序扩展 MultiDexApplication,在所有 API 4+ 设备上为您提供 MultiDex 支持(嗯,直到 v21,您可以在本地获得它)或在应用程序的 attachBaseContext 中调用 MultiDex.install(context)。而已。认真的。

    注意:在进入 Multidex 兔子洞之前,你应该真的,真的 Proguard。

    Link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      • 2021-06-18
      相关资源
      最近更新 更多