适用于 Android 和 GSON 的 ProGuard [英] ProGuard for Android and GSON

查看:30
本文介绍了适用于 Android 和 GSON 的 ProGuard的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为我的 Android 项目设置 ProGuard.我的项目也使用 GSON.

I'm setting up ProGuard for my Android project. My project also uses GSON.

我研究了与 GSON 和 Android 兼容的 ProGuard 配置,并发现了 google-gson 提供的这个示例 https://code.google.com/p/google-gson/source/browse/trunk/examples/android-proguard-example/proguard.cfg.

I've researched ProGuard configurations for compatibility with GSON and Android and came across this example offered by google-gson https://code.google.com/p/google-gson/source/browse/trunk/examples/android-proguard-example/proguard.cfg.

ProGuard 配置复制如下:

ProGuard config copied below:

##---------------Begin: proguard configuration common for all Android apps ----------
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontpreverify
-verbose
-dump class_files.txt
-printseeds seeds.txt
-printusage unused.txt
-printmapping mapping.txt
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-allowaccessmodification
-keepattributes *Annotation*
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
-repackageclasses ''

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-dontnote com.android.vending.licensing.ILicensingService

# Explicitly preserve all serialization members. The Serializable interface
# is only a marker interface, so it wouldn't save them.
-keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}

# Preserve all native method names and the names of their classes.
-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

# Preserve static fields of inner classes of R classes that might be accessed
# through introspection.
-keepclassmembers class **.R$* {
  public static <fields>;
}

# Preserve the special static methods that are required in all enumeration classes.
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep public class * {
    public protected *;
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}
##---------------End: proguard configuration common for all Android apps ----------

##---------------Begin: proguard configuration for Gson  ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature

# For using GSON @Expose annotation
-keepattributes *Annotation*

# Gson specific classes
-keep class sun.misc.Unsafe { *; }
#-keep class com.google.gson.stream.** { *; }

# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { *; }

##---------------End: proguard configuration for Gson  ----------

问题:

  1. 我看到这个文件从2011年就没有更新了,还推荐使用吗?我问是因为 Android/GSON 从那时起发生了很大的变化,所以我不知道上面有多少是不必要的或不正确的.

  1. I see that this file has not been updated since 2011, is it still recommended for use? I ask because Android/GSON has changed quite a bit since then so I don't know how much of the above in unnecessary or incorrect.

如果不建议这样做,Android 中是否有针对 GSON 的新推荐 ProGuard 配置?

If this is not recommended, is there a new recommended ProGuard configuration for GSON in Android?

推荐答案

我认为您拥有的大多数设置默认已包含在 Android SDK 中.

I think most of those settings you have there are already included in the Android SDK by default.

所以你可以删除其中的大部分,只留在专门介绍 GSON 的部分.

So you can remove most of them, just leaving in the section devoted to GSON.

我正在 Eclipse 中使用 Android SDK Tools 22.6.3 & 进行开发无论 ProGuard 随附什么版本.

I am developing in Eclipse using Android SDK Tools 22.6.3 & whatever version of ProGuard ships with that.

这是我用于 GSON 2.2.4 的内容(as根据他们的例子):

Here's what I'm using for GSON 2.2.4 (as per their example):

##---------------Begin: proguard configuration for Gson  ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature

# Gson specific classes
-keep class sun.misc.Unsafe { *; }
#-keep class com.google.gson.stream.** { *; }

# Application classes that will be serialized/deserialized over Gson
# -keep class mypersonalclass.data.model.** { *; }

它看起来和你的完全一样,只是我不需要关于注释的那一行.

It looks exactly the same as what you have, except I don't need the line about the annotations.

你可以看到我已经注释掉了我自己添加的一些类.如果您序列化/反序列化自己的类,则需要在此处声明它们以代替对 mypersonalclass.data.model 的引用.这非常重要,因为您不希望 ProGuard 混淆 GSON 用于序列化的字段或类名.

You can see I've commented out some classes that I added myself. If you serialize/deserialize your own classes, you need to declare them here in place of the reference to mypersonalclass.data.model. This is really important, as you don't want ProGuard to obfuscate the field or class names that GSON uses for serialization.

我总是在那里留下这些类型的评论,所以我知道如何配置下一个库或应用程序.

I always leave those types of comments in there, so I know how to configure the next library or app.

这篇关于适用于 Android 和 GSON 的 ProGuard的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆