android - 使用 proguard 从 google play 服务中提取 GCM

标签 android google-play google-cloud-messaging proguard

你不必像我想的那样做,现在简单多了,看下面的答案!

我想使用混淆器从 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

还有更多 - 您可以在下面的链接中找到它们(没有必要一一列出)。

来源: https://developers.google.com/android/guides/setup

关于android - 使用 proguard 从 google play 服务中提取 GCM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26912006/

相关文章:

android - Google Play 商店中同名的应用

android - 谷歌云消息 : 100 multiple senders limitation

android - 多条推送消息 : The content of the adapter has changed but ListView did not receive a notification

google-cloud-messaging - 应用程序应何时在 GCM 中请求实例 ID 和注册 token ?

android - Horizo​​ntalScrollView 不起作用

java - 如何重置微调器的值?

android - Google Play 控制台 - 针对不同国家/地区的多个 APK

google-play - Google Play应用内结算-列出购买

android - 将填充应用于 PreferenceFragment

android - FFMPEG 输出文件不包含任何流 [Android] video concat