混淆代码总结

来源:互联网 发布:js 定义对象属性 编辑:程序博客网 时间:2024/06/14 06:59

混淆代码网址很棒的网址:

1.Android项目实战(二十五):Android studio 混淆+打包+验证是否成功

2.Android Studio(十一):代码混淆及打包apk

3.Android代码混淆之混淆规则

4.Error:warning: Ignoring InnerClasses attribute for an anonymous inner class

5.Android App 混淆、打包、错误日志追踪

6.Android分享:代码混淆那些事

7.关于混淆的好多网址及问题:

配置Android sdk:

把sdk目录下的platform-tools和tools路径配置到path中,用分号间隔

cmd输入adb或者是android -h说明配置成功

反编译:

1.apk重命名为zip,复制classes.dex到dex2jar-2.0文件夹下

2.cmd执行cd C:\Users\27c1\Desktop\dex2jar-2.0\dex2jar-2.0----enter

3.再输入d2j-dex2jar.bat classes.dex,ok,多了一个classes.jar文件

4.jd.gui.exe打开上边那个jar文件就是Java代码

android在打包的时候,应用程序会进行代码优化,优化的过程就把注解给去掉了。 

在前面加上这一句,注解就可以保留了:

[java] view plain copy
  1. -keepattributes *Annotation*  

打包成功后app运行崩溃的处理:

#Crash信息处理--keep住源文件以及行号

-keepattributes SourceFile,LineNumberTable

#保留数据库--记住一定不要加public-----------注明:这个是加密数据库

[java] view plain copy
  1. -keep  class net.sqlcipher.** {*;}  
  2. -keep  class net.sqlcipher.database.** {*;}  

#autolayout--记住要写成1.4.5的依赖,1.4.3的会报AutoContentFrameLayout的错

[java] view plain copy
  1. -keep class com.zhy.** { *; }  
  2. -dontwarn com.zhy.**  
正式签名打包:

release.apk集成到AS-build-outputs-apk下

配置gradle的环境变量:

gradle路径:D:\Android\gradle\gradle-2.14.1

path中添加:D:\Android\gradle\gradle-2.14.1\bin

再加一个GRADLE_HOME:D:\Android\gradle\gradle-2.14.1

高德地图:

AndroidStudio获取shar1:Terminal下输入如下:

D:\>keytool -list -v -keystore d:\ddlx.jks -alias ddlx -storepass ddlxddkj -keypass ddlxddkj

关于libs下jar包的问题:

将jar包复制到libs下,右键add as library,build.gradle下就会有compile file(__.jar)

如果有这句话,libs下自动加载

[java] view plain copy
  1. sourceSets {   
  2.     main { jniLibs.srcDirs = ['libs'] }  
  3. }  

如果没有,单独 compile file

切记:

哎呀  微信分享不花钱    微信支付是要花钱的呀   阿西吧~

[java] view plain copy
  1. #mob  
  2. -keep class android.net.http.SslError  
  3. -keep class android.webkit.**{*;}  
  4. -keep class cn.sharesdk.**{*;}  
  5. -keep class com.sina.**{*;}  
  6. -keep class m.framework.**{*;}  
  7. -keep class **.R$* {*;}  
  8. -keep class **.R{*;}  
  9. -dontwarn cn.sharesdk.**  
  10. -dontwarn **.R$*  
  11.   
  12. #Retrofit  
  13. -dontwarn retrofit2.**  
  14. -keep class retrofit2.** { *; }  
  15.   
  16. #RxJava RxAndroid  
  17. -dontwarn sun.misc.**  
  18. -keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {  
  19.     long producerIndex;  
  20.     long consumerIndex;  
  21. }  
  22. -keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {  
  23.     rx.internal.util.atomic.LinkedQueueNode producerNode;  
  24. }  
  25. -keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {  
  26.     rx.internal.util.atomic.LinkedQueueNode consumerNode;  
  27. }  
统计Android studio中有多少方法数:

build.gradle(project):

[java] view plain copy
  1. buildscript {  
  2.     repositories {  
  3.         jcenter()  
  4.     }  
  5.     dependencies {  
  6.         classpath 'com.android.tools.build:gradle:2.2.2'  
  7.         classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.6.1'// 项目根目录build.gradle配置代码  
  8.         // NOTE: Do not place your application dependencies here; they belong  
  9.         // in the individual module build.gradle files  
  10.     }  
  11. }  
build.gradle(app):

[java] view plain copy
  1. apply plugin: 'com.android.application'  
  2. apply plugin: 'com.getkeepsafe.dexcount'//在项目build.gardle中配置代码  
注意:要仔细观察

最后统计的方法数是methods,feilds在项目-app-build-outputs-dexcount-release.txt中

开启混淆开关:

[java] view plain copy
  1. build.gradle(app):  
  2. android {  
  3.     buildTypes {  
  4.         release {  
  5.             minifyEnabled true  
  6.             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'  
  7.             // 不显示Log  
  8.             buildConfigField "boolean""LOG_DEBUG""false"  
  9.             //Zipalign优化  
  10.             zipAlignEnabled true  
  11.             // 移除无用的resource文件  
  12.             shrinkResources true  
  13. //            signingConfig signingConfigs.release  //使用上述签名信息  
  14.         }  
  15.         debug{  
  16.             //开启代码混淆  
  17.             minifyEnabled true  
  18.             // 移除无用的resource文件  
  19.             shrinkResources true  
  20.             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'  
  21.         }  
  22.     }  
  23.     lintOptions {  
  24.         abortOnError false  
  25.     }  
  26. }  
proguard配置文件:

[java] view plain copy
  1. # Add project specific ProGuard rules here.  
  2. # By default, the flags in this file are appended to flags specified  
  3. # in C:\Users\123\AppData\Local\Android\Sdk/tools/proguard/proguard-android.txt  
  4. # You can edit the include path and order by changing the proguardFiles  
  5. # directive in build.gradle.  
  6. #  
  7. # For more details, see  
  8. #   http://developer.android.com/guide/developing/tools/proguard.html  
  9.   
  10. # Add any project specific keep options here:  
  11.   
  12. # If your project uses WebView with JS, uncomment the following  
  13. # and specify the fully qualified class name to the JavaScript interface  
  14. class:  
  15. #-keepclassmembers class fqcn.of.javascript.interface.for.webview {  
  16. #   public *;  
  17. #}  
  18.   
  19. -optimizationpasses 5                                                           # 指定代码的压缩级别  
  20. -dontusemixedcaseclassnames                                                     # 是否使用大小写混合  
  21. -dontskipnonpubliclibraryclasses                                                # 是否混淆第三方jar  
  22. -dontpreverify                                                                  # 混淆时是否做预校验  
  23. -verbose                                                                        # 混淆时是否记录日志  
  24. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*        # 混淆时所采用的算法  
  25.   
  26. -keep public class * extends android.app.Activity                               # 保持哪些类不被混淆  
  27. -keep public class * extends android.app.Application                            # 保持哪些类不被混淆  
  28. -keep public class * extends android.app.Service                                # 保持哪些类不被混淆  
  29. -keep public class * extends android.content.BroadcastReceiver                  # 保持哪些类不被混淆  
  30. -keep public class * extends android.content.ContentProvider                    # 保持哪些类不被混淆  
  31. -keep public class * extends android.app.backup.BackupAgentHelper               # 保持哪些类不被混淆  
  32. -keep public class * extends android.preference.Preference                      # 保持哪些类不被混淆  
  33. -keep public class com.android.vending.licensing.ILicensingService              # 保持哪些类不被混淆  
  34.   
  35. -keepclasseswithmembernames class * {                                           # 保持 native 方法不被混淆  
  36.     native <methods>;  
  37. }  
  38.   
  39. -keepclasseswithmembers class * {                                               # 保持自定义控件类不被混淆  
  40.     public <init>(android.content.Context, android.util.AttributeSet);  
  41. }  
  42.   
  43. -keepclasseswithmembers class * {  
  44.     public <init>(android.content.Context, android.util.AttributeSet, int);     # 保持自定义控件类不被混淆  
  45. }  
  46.   
  47. -keepclassmembers class * extends android.app.Activity {                        # 保持自定义控件类不被混淆  
  48.    public void *(android.view.View);  
  49. }  
  50.   
  51. ##保持自定义组件不被混淆  
  52. #-keep public class * extends android.view.View {  
  53. #    public <init>(android.content.Context);  
  54. #    public <init>(android.content.Context, android.util.AttributeSet);  
  55. #    public <init>(android.content.Context, android.util.AttributeSet, int);  
  56. #    public void set*(...);  
  57. #}  
  58.   
  59. # 保持枚举 enum 类不被混淆  
  60. -keepclassmembers enum * {  
  61.     public static **[] values();  
  62.     public static ** valueOf(java.lang.String);  
  63. }  
  64.   
  65. #保持 Serializable 不被混淆  
  66. -keepnames class * implements java.io.Serializable  
  67.   
  68. # 保持 Parcelable 不被混淆  
  69. -keep class * implements android.os.Parcelable {  
  70.   public static final android.os.Parcelable$Creator *;  
  71. }  
  72.   
  73. #保持 Serializable 不被混淆并且enum 类也不被混淆  
  74. -keepclassmembers class * implements java.io.Serializable {  
  75.     static final long serialVersionUID;  
  76.     private static final java.io.ObjectStreamField[] serialPersistentFields;  
  77.     private void writeObject(java.io.ObjectOutputStream);  
  78.     private void readObject(java.io.ObjectInputStream);  
  79.     java.lang.Object writeReplace();  
  80.     java.lang.Object readResolve();  
  81. }  
  82.   
  83. #保持枚举 enum 类不被混淆 如果混淆报错,建议直接使用上面的 -keepclassmembers class * implements java.io.Serializable即可  
  84. #-keepclassmembers enum * {  
  85. #  public static **[] values();  
  86. public static ** valueOf(java.lang.String);  
  87. #}  
  88.   
  89. #如果有引用v4包可以添加下面这行  
  90. -keep class android.support.v4.** { *; }  
  91. -keep public class * extends android.support.v4.**  
  92. -keep public class * extends android.app.Fragment  
  93.   
  94. #如果引用了v4或者v7包,可以忽略警告,因为用不到android.support  
  95. -dontwarn android.support.**  
  96.   
  97. -keepclassmembers class * {  
  98.     public void *ButtonClicked(android.view.View);  
  99. }  
  100.   
  101. #不混淆资源类  
  102. -keepclassmembers class **.R$* {  
  103.     public static <fields>;  
  104. }  
  105.   
  106. #Gson  
  107. -keepattributes Signature  
  108. -keepattributes *Annotation*  
  109. -keep class sun.misc.Unsafe { *; }  
  110.   
  111. #xUtils  
  112. -keep class * extends java.lang.annotation.Annotation {*;}  
  113. -keep class com.otb.designerassist.activity.** {*;}  
  114.   
  115. #ButterKnife  
  116. -keep class butterknife.** { *; }  
  117. -dontwarn butterknife.internal.**  
  118. -keep class **$$ViewBinder { *; }  
  119.   
  120. -keepclasseswithmembernames class * {  
  121.     @butterknife.* <fields>;  
  122. }  
  123.   
  124. -keepclasseswithmembernames class * {  
  125.     @butterknife.* <methods>;  
  126. }  
  127.   
  128. #微信分享支付登录  
  129. -keep class com.tencent.mm.sdk.** {  
  130.    *;  
  131. }  
  132.   
  133. #支付宝支付  
  134. #-libraryjars libs/alipaySDK-20161009.jar  
  135. #  
  136. #-keep class com.alipay.android.app.IAlixPay{*;}  
  137. #-keep class com.alipay.android.app.IAlixPay$Stub{*;}  
  138. #-keep class com.alipay.android.app.IRemoteServiceCallback{*;}  
  139. #-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}  
  140. #-keep class com.alipay.sdk.app.PayTask{ public *;}  
  141. #-keep class com.alipay.sdk.app.AuthTask{ public *;}  
  142.   
  143. #高德地图  
  144. #3D 地图  
  145. -keep   class com.amap.api.maps.**{*;}  
  146. -keep   class com.autonavi.amap.mapcore.*{*;}  
  147. -keep   class com.amap.api.trace.**{*;}  
  148. #定位  
  149. -keep class com.amap.api.location.**{*;}  
  150. -keep class com.amap.api.fence.**{*;}  
  151. -keep class com.autonavi.aps.amapapi.model.**{*;}  
  152.   
  153. #搜索  
  154. -keep   class com.amap.api.services.**{*;}  
  155.   
  156. #2D地图  
  157. -keep class com.amap.api.maps2d.**{*;}  
  158. -keep class com.amap.api.mapcore2d.**{*;}  
  159.   
  160. #导航  
  161. -keep class com.amap.api.navi.**{*;}  
  162. -keep class com.autonavi.**{*;}  
  163.   
  164. #Glide混淆  
  165. -keep public class * implements com.bumptech.glide.module.GlideModule  
  166. -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {  
  167.   **[] $VALUES;  
  168.   public *;  
  169. }  
  170.   
  171. # 以libaray的形式引用的图片加载框架,不想混淆(注意,此处不是jar包形式,想混淆去掉"#")  
  172. #-keep class com.nostra13.universalimageloader.** { *; }  
  173.   
  174. #适配器  
  175. -keep class com.uyac.elegantlife.adapter.**{*;}  
  176.   
  177. #二维码  
  178. #-libraryjars libs/core-3.0.0.jar  
  179.   
  180. #OkHttp  
  181. -dontwarn com.squareup.okhttp.**  
  182. -keep class com.squareup.okhttp.** {*;}  
  183. -keep interface com.squareup.okhttp.** {*;}  
  184. -dontwarn okio.**  
  185.   
  186. #小米push keep包下的所有类  
  187. -keep class com.xiaomi.push.service.receivers.NetworkStatusReceiver {*;}  
  188. -keep public class * extends android.content.BroadcastReceiver  
  189. #可以防止一个误报的 warning 导致无法成功编译,如果编译使用的 Android 版本是 23。  
  190. -dontwarn com.xiaomi.push.**  
  191. #小米push service  
  192.   
  193. #Warning:com.xiaomi.push.service.XMPushService: can't find referenced method 'void setLatestEventInfo(android.content.Context,java.lang.CharSequence,java.lang.CharSequence,android.app.PendingIntent)' in library class android.app.Notification  
  194. -dontwarn org.apache.http.**  
  195. -dontwarn android.net.http.AndroidHttpClient  
  196. -dontwarn com.google.android.gms.**  
  197. -dontwarn com.android.volley.toolbox.**  
  198.   
  199. #Warning:library class android.test.AndroidTestCase extends or implements program class junit.framework.TestCase  
  200. -dontwarn org.mockito.**  
  201. -dontwarn sun.reflect.**  
  202. -dontwarn android.test.**  
  203.   
  204. #Warning:library class org.apache.http.conn.scheme.LayeredSocketFactory extends or implements program class org.apache.http.conn.scheme.SocketFactory  
  205. -keep class org.apache.http.** { *; }  
  206. -dontwarn org.apache.http.**  
  207. -dontwarn android.net.**  
  208.   
  209. #Warning:org.junit.internal.runners.statements.FailOnTimeout: can't find referenced class java.lang.management.ManagementFactory  
  210. #-dontwarn org.hamcrest.**  
  211.   #-dontwarn android.test.**  
  212.   #-dontwarn android.support.test.**  
  213.   #  
  214.   #-keep class org.hamcrest.** {  
  215.   #   *;  
  216.   #}  
  217.   
  218. -keep class org.junit.** { *; }  
  219. -dontwarn org.junit.**  
  220.   
  221. -keep class junit.** { *; }  
  222. -dontwarn junit.**  
  223.   
  224. #-keep class sun.misc.** { *; }  
  225. #-dontwarn sun.misc.**  
  226.   
  227. #autolayout 主类继承的Activity--  
  228. #注意:autolayout要改成1.4.5的版本  
  229. -keep class * extends com.zhy.autolayout.AutoLayoutActivity  
  230.   
  231. -keep class com.zhy.** { *; }  
  232. -dontwarn com.zhy.**  
  233.   
  234. #pulltorefresh  
  235. -dontwarn com.handmark.pulltorefresh.library.**  
  236. -keep class com.handmark.pulltorefresh.library.** { *;}  
  237. -dontwarn com.handmark.pulltorefresh.library.extras.**  
  238. -keep class com.handmark.pulltorefresh.library.extras.** { *;}  
  239. -dontwarn com.handmark.pulltorefresh.library.internal.**  
  240. -keep class com.handmark.pulltorefresh.library.internal.** { *;}  
  241.   
  242. #屏蔽警告  
  243. #-ignorewarnings  
  244.   
  245. #测试签名打包后app崩溃无法运行的问题  
  246. -keepattributes EnclosingMethod  
  247.   
  248. #保留数据库工具类  
  249. -keep class com.ddgl.ddlx.utility.**{*;}  
  250.   
  251. #-keep class com.kklink.yuexia.db.**{*;}  
  252. #-keep class com.kklink.database.**{*;}  
  253.   
  254. #-keep class com.ddgl.ddlx.** { *; }  
  255. -keepattributes *Annotation*  
  256.   
  257. #保留model实体  
  258. -keep class com.ddgl.ddlx.model.**{*;}  
  259. -keep class com.ddgl.ddlx.dao.**{*;}  
  260.   
  261. #关于数据库  
  262. #保留数据库驱动--数据库驱动往往是动态加载的  
  263. -keep class * implements java.sql.Driver  
  264.   
  265. -keep  class net.sqlcipher.** {  
  266.     *;  
  267. }  
  268.   
  269. -keep  class net.sqlcipher.database.** {  
  270.     *;  
  271. }  
  272.   
  273. -keep class * extends java.util.ListResourceBundle {  
  274.     protected Object[][] getContents();  
  275. }  
  276.   
  277. -keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable {  
  278.     public static final *** NULL;  
  279. }  
  280.   
  281. -keepnames @com.google.android.gms.common.annotation.KeepName class *  
  282. -keepclassmembernames class * {  
  283.     @com.google.android.gms.common.annotation.KeepName *;  
  284. }  
  285.   
  286. -keepnames class * implements android.os.Parcelable {  
  287.     public static final ** CREATOR;  
  288. }  
  289. -dontwarn com.google.android.gms.**  
  290. -dontwarn com.google.common.**  
  291.   
  292. #Crash信息处理--keep住源文件以及行号  
  293. -keepattributes SourceFile,LineNumberTable  
感悟:其实并不难 只是找不到。只要用心去找bug,就一定能够找到答案,只是时间长短不同而已。