混淆代码总结
来源:互联网 发布:怎么开好淘宝店? 编辑:程序博客网 时间:2024/06/16 15:19
混淆代码网址很棒的网址:
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在打包的时候,应用程序会进行代码优化,优化的过程就把注解给去掉了。
在前面加上这一句,注解就可以保留了:
-keepattributes *Annotation*
打包成功后app运行崩溃的处理:
#Crash信息处理--keep住源文件以及行号-keepattributes SourceFile,LineNumberTable
#保留数据库--记住一定不要加public-----------注明:这个是加密数据库
-keep class net.sqlcipher.** {*;}-keep class net.sqlcipher.database.** {*;}
#autolayout--记住要写成1.4.5的依赖,1.4.3的会报AutoContentFrameLayout的错
-keep class com.zhy.** { *; }-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下自动加载
sourceSets { main { jniLibs.srcDirs = ['libs'] }}
如果没有,单独 compile file
切记:
哎呀 微信分享不花钱 微信支付是要花钱的呀 阿西吧~
#mob-keep class android.net.http.SslError-keep class android.webkit.**{*;}-keep class cn.sharesdk.**{*;}-keep class com.sina.**{*;}-keep class m.framework.**{*;}-keep class **.R$* {*;}-keep class **.R{*;}-dontwarn cn.sharesdk.**-dontwarn **.R$*#Retrofit-dontwarn retrofit2.**-keep class retrofit2.** { *; }#RxJava RxAndroid-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;}统计Android studio中有多少方法数:
build.gradle(project):
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.2.2' classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.6.1'// 项目根目录build.gradle配置代码 // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files }}build.gradle(app):
apply plugin: 'com.android.application'apply plugin: 'com.getkeepsafe.dexcount'//在项目build.gardle中配置代码注意:要仔细观察
最后统计的方法数是methods,feilds在项目-app-build-outputs-dexcount-release.txt中
开启混淆开关:
build.gradle(app):android { buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' // 不显示Log buildConfigField "boolean", "LOG_DEBUG", "false" //Zipalign优化 zipAlignEnabled true // 移除无用的resource文件 shrinkResources true// signingConfig signingConfigs.release //使用上述签名信息 } debug{ //开启代码混淆 minifyEnabled true // 移除无用的resource文件 shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } lintOptions { abortOnError false }}proguard配置文件:
# Add project specific ProGuard rules here.# By default, the flags in this file are appended to flags specified# in C:\Users\123\AppData\Local\Android\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 *;#}-optimizationpasses 5 # 指定代码的压缩级别-dontusemixedcaseclassnames # 是否使用大小写混合-dontskipnonpubliclibraryclasses # 是否混淆第三方jar-dontpreverify # 混淆时是否做预校验-verbose # 混淆时是否记录日志-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* # 混淆时所采用的算法-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 # 保持哪些类不被混淆-keepclasseswithmembernames class * { # 保持 native 方法不被混淆 native <methods>;}-keepclasseswithmembers class * { # 保持自定义控件类不被混淆 public <init>(android.content.Context, android.util.AttributeSet);}-keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet, int); # 保持自定义控件类不被混淆}-keepclassmembers class * extends android.app.Activity { # 保持自定义控件类不被混淆 public void *(android.view.View);}##保持自定义组件不被混淆#-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*(...);#}# 保持枚举 enum 类不被混淆-keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String);}#保持 Serializable 不被混淆-keepnames class * implements java.io.Serializable# 保持 Parcelable 不被混淆-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}#保持 Serializable 不被混淆并且enum 类也不被混淆-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();}#保持枚举 enum 类不被混淆 如果混淆报错,建议直接使用上面的 -keepclassmembers class * implements java.io.Serializable即可#-keepclassmembers enum * {# public static **[] values();# public static ** valueOf(java.lang.String);#}#如果有引用v4包可以添加下面这行-keep class android.support.v4.** { *; }-keep public class * extends android.support.v4.**-keep public class * extends android.app.Fragment#如果引用了v4或者v7包,可以忽略警告,因为用不到android.support-dontwarn android.support.**-keepclassmembers class * { public void *ButtonClicked(android.view.View);}#不混淆资源类-keepclassmembers class **.R$* { public static <fields>;}#Gson-keepattributes Signature-keepattributes *Annotation*-keep class sun.misc.Unsafe { *; }#xUtils-keep class * extends java.lang.annotation.Annotation {*;}-keep class com.otb.designerassist.activity.** {*;}#ButterKnife-keep class butterknife.** { *; }-dontwarn butterknife.internal.**-keep class **$$ViewBinder { *; }-keepclasseswithmembernames class * { @butterknife.* <fields>;}-keepclasseswithmembernames class * { @butterknife.* <methods>;}#微信分享支付登录-keep class com.tencent.mm.sdk.** { *;}#支付宝支付#-libraryjars libs/alipaySDK-20161009.jar##-keep class com.alipay.android.app.IAlixPay{*;}#-keep class com.alipay.android.app.IAlixPay$Stub{*;}#-keep class com.alipay.android.app.IRemoteServiceCallback{*;}#-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}#-keep class com.alipay.sdk.app.PayTask{ public *;}#-keep class com.alipay.sdk.app.AuthTask{ public *;}#高德地图#3D 地图-keep class com.amap.api.maps.**{*;}-keep class com.autonavi.amap.mapcore.*{*;}-keep class com.amap.api.trace.**{*;}#定位-keep class com.amap.api.location.**{*;}-keep class com.amap.api.fence.**{*;}-keep class com.autonavi.aps.amapapi.model.**{*;}#搜索-keep class com.amap.api.services.**{*;}#2D地图-keep class com.amap.api.maps2d.**{*;}-keep class com.amap.api.mapcore2d.**{*;}#导航-keep class com.amap.api.navi.**{*;}-keep class com.autonavi.**{*;}#Glide混淆-keep public class * implements com.bumptech.glide.module.GlideModule-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** { **[] $VALUES; public *;}# 以libaray的形式引用的图片加载框架,不想混淆(注意,此处不是jar包形式,想混淆去掉"#")#-keep class com.nostra13.universalimageloader.** { *; }#适配器-keep class com.uyac.elegantlife.adapter.**{*;}#二维码#-libraryjars libs/core-3.0.0.jar#OkHttp-dontwarn com.squareup.okhttp.**-keep class com.squareup.okhttp.** {*;}-keep interface com.squareup.okhttp.** {*;}-dontwarn okio.**#小米push keep包下的所有类-keep class com.xiaomi.push.service.receivers.NetworkStatusReceiver {*;}-keep public class * extends android.content.BroadcastReceiver#可以防止一个误报的 warning 导致无法成功编译,如果编译使用的 Android 版本是 23。-dontwarn com.xiaomi.push.**#小米push service#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-dontwarn org.apache.http.**-dontwarn android.net.http.AndroidHttpClient-dontwarn com.google.android.gms.**-dontwarn com.android.volley.toolbox.**#Warning:library class android.test.AndroidTestCase extends or implements program class junit.framework.TestCase-dontwarn org.mockito.**-dontwarn sun.reflect.**-dontwarn android.test.**#Warning:library class org.apache.http.conn.scheme.LayeredSocketFactory extends or implements program class org.apache.http.conn.scheme.SocketFactory-keep class org.apache.http.** { *; }-dontwarn org.apache.http.**-dontwarn android.net.**#Warning:org.junit.internal.runners.statements.FailOnTimeout: can't find referenced class java.lang.management.ManagementFactory#-dontwarn org.hamcrest.** #-dontwarn android.test.** #-dontwarn android.support.test.** # #-keep class org.hamcrest.** { # *; #}-keep class org.junit.** { *; }-dontwarn org.junit.**-keep class junit.** { *; }-dontwarn junit.**#-keep class sun.misc.** { *; }#-dontwarn sun.misc.**#autolayout 主类继承的Activity--#注意:autolayout要改成1.4.5的版本-keep class * extends com.zhy.autolayout.AutoLayoutActivity-keep class com.zhy.** { *; }-dontwarn com.zhy.**#pulltorefresh-dontwarn com.handmark.pulltorefresh.library.**-keep class com.handmark.pulltorefresh.library.** { *;}-dontwarn com.handmark.pulltorefresh.library.extras.**-keep class com.handmark.pulltorefresh.library.extras.** { *;}-dontwarn com.handmark.pulltorefresh.library.internal.**-keep class com.handmark.pulltorefresh.library.internal.** { *;}#屏蔽警告#-ignorewarnings#测试签名打包后app崩溃无法运行的问题-keepattributes EnclosingMethod#保留数据库工具类-keep class com.ddgl.ddlx.utility.**{*;}#-keep class com.kklink.yuexia.db.**{*;}#-keep class com.kklink.database.**{*;}#-keep class com.ddgl.ddlx.** { *; }-keepattributes *Annotation*#保留model实体-keep class com.ddgl.ddlx.model.**{*;}-keep class com.ddgl.ddlx.dao.**{*;}#关于数据库#保留数据库驱动--数据库驱动往往是动态加载的-keep class * implements java.sql.Driver-keep class net.sqlcipher.** { *;}-keep class net.sqlcipher.database.** { *;}-keep class * extends java.util.ListResourceBundle { protected Object[][] getContents();}-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable { public static final *** NULL;}-keepnames @com.google.android.gms.common.annotation.KeepName class *-keepclassmembernames class * { @com.google.android.gms.common.annotation.KeepName *;}-keepnames class * implements android.os.Parcelable { public static final ** CREATOR;}-dontwarn com.google.android.gms.**-dontwarn com.google.common.**#Crash信息处理--keep住源文件以及行号-keepattributes SourceFile,LineNumberTable感悟:其实并不难 只是找不到。只要用心去找bug,就一定能够找到答案,只是时间长短不同而已。
- android 代码混淆总结
- Android 混淆代码总结
- Android 混淆代码总结
- Android 混淆代码总结
- Android 混淆代码总结
- Android 、混淆代码总结
- Android 混淆代码总结
- Android 混淆代码总结
- Android 混淆代码总结
- Android 混淆代码总结
- Android 混淆代码总结
- Android 混淆代码总结
- Android 混淆代码总结
- Android 混淆代码总结
- Android 混淆代码总结
- Android 混淆代码总结
- Android 混淆代码总结
- Android 混淆代码总结
- 从欧几里得算法到组合数取模
- android ListView的item含有多个EditText导致错位
- MongoDB数据库介绍以及MongoVUE的简单使用
- Python爬虫,教你三步搞定
- js数字计算 误差 解决方法
- 混淆代码总结
- Hdu5860 Death Sequence
- Spring配置之<context:*>标签的三两事
- 丢失的第一个整数
- linux pid 管理
- 微信小程序中css样式media标签
- 拉丁方阵
- Maven:mirror和repository 区别
- RequireJS学习笔记--基础知识篇