android 混淆 不完整版
1.不混淆容易定位问题 (易破解)
2.proguard混淆 需要一个一个的添加麻烦(不容易破解)
3.加固 不错(非常不容易破解)
不完整混淆
# Add project specific ProGuard rules here. # By default, the flags in this file are appended to flags specified # in /Users/weidingqiang/Downloads/adt-bundle-mac-x86_64-20140702/sdk/tools/proguard/proguard-android.txt # You can edit the include path and order by changing the proguardFiles # directive in build.gradle. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html # Add any project specific keep options here: # If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} # 代码混淆压缩比,在0~7之间,默认为5,一般不做修改 -optimizationpasses 5 # 混合时不使用大小写混合,混合后的类名为小写 -dontusemixedcaseclassnames # 指定不去忽略非公共库的类 -dontskipnonpubliclibraryclasses # 这句话能够使我们的项目混淆后产生映射文件# 包含有类名->混淆后类名的映射关系 -verbose # 指定不去忽略非公共库的类成员 -dontskipnonpubliclibraryclassmembers # 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。 -dontpreverify # 保留Annotation不混淆 -keepattributes *Annotation*,InnerClasses # 避免混淆泛型-keepattributes Signature # 抛出异常时保留代码行号 -keepattributes SourceFile,LineNumberTable # 指定混淆是采用的算法,后面的参数是一个过滤器 # 这个过滤器是谷歌推荐的算法,一般不做更改 -optimizations !code/simplification/cast,!field/*,!class/merging/* # 保留我们使用的四大组件,自定义的Application等等这些类不被混淆 # 因为这些子类都有可能被外部调用 -keep public class * extends android.app.Activity -keep public class * extends android.app.Appliction -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 * extends android.view.View -keep public class com.android.vending.licensing.ILicensingService # 保留support下的所有类及其内部类 -keep class android.support.** {*;} # 保留继承的 -keep public class * extends android.support.v4.** -keep public class * extends android.support.v7.** -keep public class * extends android.support.annotation.** # 保留R下面的资源 -keep class **.R$* {*;} # 保留本地native方法不被混淆 -keepclasseswithmembernames class * { native <methods>; } # 保留在Activity中的方法参数是view的方法,# 这样以来我们在layout中写的onClick就不会被影响 -keepclassmembers class * extends android.app.Activity{ public void *(android.view.View); } # 保留枚举类不被混淆 -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } # 保留我们自定义控件(继承自View)不被混淆 -keep public class * extends android.view.View{ *** get*(); void set*(***); public <init>(android.content.Context); public <init>(android.content.Context, android.util.AttributeSet); public <init>(android.content.Context, android.util.AttributeSet, int); } # 保留Parcelable序列化类不被混淆 -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } # 保留Serializable序列化的类不被混淆 -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(); } # 对于带有回调函数的onXXEvent、**On*Listener的,不能被混淆 -keepclassmembers class * { void *(**On*Event); void *(**On*Listener); } # webView处理,项目中没有使用到webView忽略即可 -keepclassmembers class fqcn.of.javascript.interface.for.webview { public *; } -keepclassmembers class * extends android.webkit.webViewClient { public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap); public boolean *(android.webkit.WebView, java.lang.String); } -keepclassmembers class * extends android.webkit.webViewClient { public void *(android.webkit.webView, jav.lang.String); } # 移除Log类打印各个等级日志的代码,打正式包的时候可以做为禁log使用,这里可以作为禁止log打印的功能使用 # 记得proguard-android.txt中一定不要加-dontoptimize才起作用 # 另外的一种实现方案是通过BuildConfig.DEBUG的变量来控制 #-assumenosideeffects class android.util.Log { # public static int v(...); # public static int i(...); # public static int w(...); # public static int d(...); # public static int e(...); #} #以上都是基本不变的 #实体类 ############################################### # 三方包 ############################################### #volley -keep class com.android.volley.** {*;} -keep class com.android.volley.toolbox.** {*;} -keep class com.android.volley.Response$* { *; } -keep class com.android.volley.Request$* { *; } -keep class com.android.volley.RequestQueue$* { *; } -keep class com.android.volley.toolbox.HurlStack$* { *; } -keep class com.android.volley.toolbox.ImageLoader$* { *; } #glide -keep public class * implements com.bumptech.glide.module.GlideModule -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** { **[] $VALUES; public *; } #-keepresourcexmlelements manifest/application/meta-data@value=GlideModule #galleryfinal -keep class cn.finalteam.galleryfinal.widget.*{*;} -keep class cn.finalteam.galleryfinal.widget.crop.*{*;} -keep class cn.finalteam.galleryfinal.widget.zoonview.*{*;} #Gson -keepattributes Signature -keep class sun.misc.Unsafe { *; } -keep class com.google.gson.examples.Android.model.** { *; } #自定义强转的类 -keep public class com.fifedu.attendancestu.models.HomeTopModel { private *; } -keep public class com.fifedu.attendancestu.models.HomeAttenceModel { private *; } #PushSDK 友盟推送 -dontwarn com.taobao.** -dontwarn anet.channel.** -dontwarn anetwork.channel.** -dontwarn org.android.** -dontwarn org.apache.thrift.** -dontwarn com.xiaomi.** -dontwarn com.huawei.** -keepattributes *Annotation* -keep class com.taobao.** {*;} -keep class org.android.** {*;} -keep class anet.channel.** {*;} -keep class com.umeng.** {*;} -keep class com.xiaomi.** {*;} -keep class com.huawei.** {*;} -keep class org.apache.thrift.** {*;} -keep class com.alibaba.sdk.android.**{*;} -keep class com.ut.**{*;} -keep class com.ta.**{*;} -keep public class **.R$*{ public static final int *; } #友盟统计 -keepclassmembers class * { public <init> (org.json.JSONObject); } #-keep public class [您的应用包名].R$*{ -keep public class com.fifedu.attendancestu.R$*{ public static final int *; } -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } #log4j -dontwarn org.apache.log4j.** -keep class org.apache.log4j.** { *;} # eventbus -keepattributes *Annotation* -keepclassmembers class ** { @org.greenrobot.eventbus.Subscribe <methods>; } -keep enum org.greenrobot.eventbus.ThreadMode { *; } # Only required if you use AsyncExecutor -keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent { <init>(java.lang.Throwable); } -keep class de.greenrobot.event.** {*;} -keepclassmembers class ** { public void onEvent*(**); void onEvent*(**); } #一些jar包 #-libraryjars ../app/libs/httpcore-4.3.jar #-libraryjars ../app/libs/httpmime-4.3.jar #-libraryjars ../app/libs/android-logging-log4j-1.0.3.jar #-libraryjars ../app/libs/log4j-1.2.17.jar #-libraryjars ../fiflibrary/libs/sunjce_provider.jar -dontwarn org.apache.http.** -keep class org.apache.http.**{*;} -dontwarn org.apache.http.entity.mime.** -keep class org.apache.http.entity.mime.**{*;} -dontwarn com.sun.crypto.provider.** -keep class com.sun.crypto.provider.**{*;} # Butterknife #-keep class butterknife.** { *; } #-dontwarn butterknife.internal.** #-keep class **$$ViewBinder { *; } #-keepclasseswithmembernames class * { @butterknife.* <fields>;} #-keepclasseswithmembernames class * { @butterknife.* <methods>;} # OkHttp3-dontwarn okhttp3.logging.** #-keep class okhttp3.internal.**{*;} #-dontwarn okio.** # Okio #-dontwarn com.squareup.** #-dontwarn okio.** #-keep public class org.codehaus.* { *; } #-keep public class java.nio.* { *; } # Retrofit #-dontwarn retrofit2.** #-keep class retrofit2.** { *; } #-keepattributes Exceptions# RxJava #-dontwarn sun.misc.** #-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* { # long producerIndex; # long consumerIndex; #} #-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef { # rx.internal.util.atomic.LinkedQueueNode producerNode; #} #-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef { # rx.internal.util.atomic.LinkedQueueNode consumerNode; #}
人的一生能做好一件事就阿弥陀佛了