as开启混淆时自己出现的问题,及解决

个人在使用as开启混淆时,出现了闪退问题,我是使用Gson进行自动解析,由于混淆时没有注意实体类的问题造成的,不对实体类进行混淆就可以了,其他的小问题自己在不断的打包调试中也能发现及慢慢改正


使用as开启混淆时,通用的规则如下:

-optimizationpasses 5          #代码混淆压缩比,在0~7之间,默认为5,一般不做修改
-dontusemixedcaseclassnames   #混合时不使用大小写混合,混合后的类名为小写
-dontskipnonpubliclibraryclasses   #指定不去忽略非公共库的类
#don‘t optimize 不要优化;将会关闭优化,导致日志语句不会被优化掉。所以不能有这个配置
#-dontoptimize
#不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
-dontpreverify
#这句话能够使我们的项目混淆后产生映射文件包含有类名->混淆后类名的映射关系
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*  # 混淆时所采用的算法
-dontskipnonpubliclibraryclassmembers  #指定不去忽略非公共库的类
#保留Annotation不混淆
-keepattributes *Annotation*,InnerClasses

-keep public class * extends android.app.Activity      # 保持哪些类不被混淆
-keep public class * extends android.app.Fragment       # 保持哪些类不被混淆
-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    # 保持哪些类不被混淆

#保留support下的所有类及其内部类
-keep class android.support.** {*;}

-keepclasseswithmembernames class * {  # 保持 native 方法不被混淆
    native ;
}
-keepclasseswithmembers class * {   # 保持自定义控件类不被混淆
    public (android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {# 保持自定义控件类不被混淆
    public (android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity { # 保持自定义控件类不被混淆
    public void *(android.view.View);
}
-keepclassmembers enum * {     # 保持枚举 enum 类不被混淆
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable { # 保持 Parcelable 不被混淆
    public static final android.os.Parcelable$Creator *;
}
-keepnames class * implements android.os.Parcelable {
    public static final ** CREATOR;
}
#保持 Serializable 不被混淆
-keepnames class * implements java.io.Serializable
#对于带有回调函数的onXXEvent的,不能被混淆
-keepclassmembers class * {
    void *(**On*Event);
}
#保持资源文件不被混淆
-keepclassmembers class **.R$* {
    public static ;
}
-keep class **.R$* { *; }


但是如果使用Gson进行数据解析的时候要注意Gson自身的混淆

-keep class com.google.gson.stream.** { *; }
-keep class com.google.gson.examples.android.model.** { *; }
最重要的是,解析时使用的实体类一定不要混淆,不要然会出现闪退问题

-keep class 包名.entity.** { *; } #实体类不参与混淆

使用okhttp时,混淆要加上

-dontwarn okhttp3.**
-dontwarn okio.**



buildTypes {
    release {
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
 
  
shrinkResources 开启后会自动检测无用的资源进行删除

你可能感兴趣的:(Android问题及解决)