你不必像我想的那样做,现在简单多了,看下面的答案!
我想使用混淆器从 google play 服务中提取 GCM(我已经用完了 65k 方法限制,但我不想拆分 dex 文件)。但是我无法摆脱这个异常(exception):
java.lang.NoClassDefFoundError: com.google.android.gms.R$string
这是我的混淆器配置:
-injars sdk/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar
-outjars google-play-services-push.jar
-libraryjars sdk/extras/android/support/v4/android-support-v4.jar
-libraryjars sdk/platforms/android-21/android.jar
-verbose
-forceprocessing
-dontoptimize
-dontobfuscate
-dontwarn com.google.**.R
-dontwarn com.google.**.R$*
-dontnote
-keep public class com.google.android.gms.common.** {
public protected *;
}
-keep public class com.google.android.gms.gcm.** {
public protected *;
}
-keep class com.google.android.gms.common.internal.safeparcel.SafeParcelable {
java.lang.String NULL;
}
-keepnames @com.google.android.gms.common.annotation.KeepName class *
-keepclassmembernames class * {
@com.google.android.gms.common.annotation.KeepName *;
}
-keepnames class * implements android.os.Parcelable {
public static final ** CREATOR;
}
-keep class * extends java.util.ListResourceBundle {
protected Object[][] getContents();
}
-keepattributes InnerClasses
-keep class **.R
-keep class **.R$* {
<fields>;
}
基于 https://www.saikoa.com/files/media/ProGuard_DroidconLondon2014.pdf + 我尝试保留字符串资源。
最佳答案
现在不需要,因为您可以将 google play 服务拆分成单独的包
例子:
谷歌账户登录
com.google.android.gms:play-services-auth:8.3.0
Google Actions,基础客户端库
com.google.android.gms:play-services-base:8.3.0
谷歌应用索引
com.google.android.gms:play-services-appindexing:8.3.0
Google 应用邀请
com.google.android.gms:play-services-appinvite:8.3.0
谷歌分析
com.google.android.gms:play-services-analytics:8.3.0
谷歌云消息传递
com.google.android.gms:play-services-gcm:8.3.0
还有更多 - 您可以在下面的链接中找到它们(没有必要一一列出)。
关于android - 使用 proguard 从 google play 服务中提取 GCM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26912006/