在遇到dreared dex方法限制错误的问题时,我一直在努力找到快速解决问题的方法。我的apk在使用proguard后被13k方法收缩,其中大部分来自我使用的库。以下是构建过程的相关输出(有些修改)。
-obfuscate:
[mkdir] Created dir: /bin/proguard
[jar] Building jar: /bin/proguard/original.jar
[proguard] ProGuard, version 5.0
[proguard] Reading input...
[proguard] Reading program jar [/libs/kryo-2.24.0.jar]
[proguard] Reading program jar [/libs/jackson-databind-2.1.1.jar]
[proguard] Reading program jar [libs/okhttp-1.1.0.jar]
[proguard] Reading program jar [/libs/realm-0.72.0.jar]
[proguard] Reading program jar [/libs/tape-1.1.0.jar]
[proguard] Reading program jar [/libs/google-play-services.jar]
[proguard] Reading program jar [/libs/AudienceNetwork.jar]
[proguard] Initializing...
[proguard] Ignoring unused library classes...
[proguard] Original number of library classes: 7170
[proguard] Final number of library classes: 1712
[proguard] Printing kept classes, fields, and methods...
[proguard] Shrinking...
有没有什么方法可以指导Proguard for Android在收缩后,但在它们被aapt打包成一个巨大的blob之前,保存中间jar(这些库的收缩版本,符合我的代码需求,具有所使用的一组功能,仅此而已)?
您可以创建Google Play Services的自定义缩小版本,这可能足以避免65K方法ID的限制。我在Droidcon London 2014关于创建较小应用程序的演示中包含了一些可能的ProGuard配置,以创建这样一个缩小的库。