代码混淆
(例子在末尾)
解决办法:只需要将被调用的Java类标注为不混淆即可。 -keep class package.classname{*;}
解决办法:找到代码,看是代码写的问题,还是混淆后的问题。如果没有混淆正常运行的话,一般都是因为混淆后遇到了各种问题才报的错。我们项目中遇到的问题是因为没有让proguard保持泛型,所以强转的时候报错。只需要在proguard文件里面加上泛型即可-keepattributes Signature
解决办法:在proguard文件里设置不混淆R文件 -keep class **.R$* { *; }
可能是泛型混淆了 泛型即可-keepattributes Signature
<span style="font-family:FangSong_GB2312;font-size:12px;color:#333333;">#指定代码的压缩级别-optimizationpasses 5#包明不混合大小写-dontusemixedcaseclassnames#不去忽略非公共的库类-dontskipnonpubliclibraryclasses#优化 不优化输入的类文件-dontoptimize#预校验-dontpreverify# 混淆时所采用的算法-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*#保护注解-keepattributes *Annotation*# 保持哪些类不被混淆-keep public class * extends android.app.Fragment-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#如果有引用v4包可以添加下面这行#-keep public class * extends android.support.v4.app.Fragment- -keep public class * extends android.support.** { *; }
#如果引用了v4或者v7包-dontwarn android.support.*#忽略警告-ignorewarning#####################记录生成的日志数据,gradle build时在本项目根目录输出#################混淆时是否记录日志-verbose#apk 包内所有 class 的内部结构-dump class_files.txt#未混淆的类和成员-printseeds seeds.txt#列出从 apk 中删除的代码-printusage unused.txt#混淆前后的映射-printmapping mapping.txt#####################记录生成的日志数据,gradle build时 在本项目根目录输出-end#####################混淆保护自己项目的部分代码以及引用的第三方jar包library - start ########如果不想混淆 keep 掉 保留一个完整的包#-keep class com.lippi.recorder.iirfilterdesigner.** {*; }#项目特殊处理代码#忽略警告#-dontwarn com.lippi.recorder.utils**#如果用用到Gson解析包的,直接添加下面这几行就能成功混淆,不然会报错。#//原因分析,可能是高版本的 sdk 通过 proguard 混淆代码时默认已经将 lib目录中的 jar 都已经添加到打包脚本中,所以不需要再次手动添加# 混淆jar#-libraryjars libs/gson-2.2.4.jar# 混淆类#-keep class sun.misc.Unsafe { *; }# 混淆包#-keep class com.google.gson.examples.android.model.** { *; }#dialog-keep class me.drakeet.materialdialog.** { *; }#加载框-keep class com.kaopiz.kprogresshud.** { *; }#下拉刷新-keep class in.srain.cube.views.ptr.** { *; }#实体类不混淆-keep class com.ousrslook.shimao.commen.ioc.** { *; } #不能混淆 否则注解无效-keep class com.ousrslook.shimao.model.** { *; } #不能混淆-keep class com.ousrslook.shimao.net.XaResult{ *; }#统一返回的实体类泛型不能混淆#-keep class com.ousrslook.shimao.net.** { *; }####混淆保护自己项目的部分代码以及引用的第三方jar包library-end####-keep public class * extends android.view.View {public <init>(android.content.Context);public <init>(android.content.Context, android.util.AttributeSet);public <init>(android.content.Context, android.util.AttributeSet, int);public void set*(...);}#保持 native 方法不被混淆-keepclasseswithmembernames class * {native <methods>;}#保持自定义控件类不被混淆-keepclasseswithmembers class * {public <init>(android.content.Context, android.util.AttributeSet);}#保持自定义控件类不被混淆-keepclassmembers class * extends android.app.Activity {public void *(android.view.View);}#保持 Parcelable 不被混淆-keep class * implements android.os.Parcelable {public static final android.os.Parcelable$Creator *;}#保持 Serializable 不被混淆-keepnames class * implements java.io.Serializable#保持 Serializable 不被混淆并且enum 类也不被混淆-keepclassmembers class * implements java.io.Serializable {static final long serialVersionUID;private static final java.io.ObjectStreamField[] serialPersistentFields;!static !transient <fields>;!private <fields>;!private <methods>;private void writeObject(java.io.ObjectOutputStream);private void readObject(java.io.ObjectInputStream);java.lang.Object writeReplace();java.lang.Object readResolve();}#保持枚举 enum 类不被混淆 如果混淆报错,建议直接使用上面的 -keepclassmembers class * implements java.io.Serializable即可-keepclassmembers enum * {public static **[] values();public static ** valueOf(java.lang.String);}-keepclassmembers class * {public void *ButtonClicked(android.view.View);}#不混淆资源类-keepclassmembers class **.R$* {public static <fields>;}-keep class **.R$* { *; }#避免混淆泛型 如果混淆报错建议关掉-keepattributes Signature</span>
原文:http://www.cnblogs.com/jiaoxiake/p/6537258.html