混淆代码总结
2017-07-14 16:44
190 查看
混淆代码网址很棒的网址:
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
-keepattributes *Annotation*
打包成功后app运行崩溃的处理:
#Crash信息处理--keep住源文件以及行号
-keepattributes SourceFile,LineNumberTable
#保留数据库--记住一定不要加public-----------注明:这个是加密数据库
[java] view
plain copy
-keep class net.sqlcipher.** {*;}
-keep class net.sqlcipher.database.** {*;}
#autolayout--记住要写成1.4.5的依赖,1.4.3的会报AutoContentFrameLayout的错
[java] view
plain copy
-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下自动加载
[java] view
plain copy
sourceSets {
main { jniLibs.srcDirs = ['libs'] }
}
如果没有,单独 compile file
切记:
哎呀 微信分享不花钱
微信支付是要花钱的呀 阿西吧~
[java] view
plain copy
#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):
[java] view
plain copy
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):
[java] view
plain copy
apply plugin: 'com.android.application'
apply plugin: 'com.getkeepsafe.dexcount'//在项目build.gardle中配置代码
注意:要仔细观察
最后统计的方法数是methods,feilds在项目-app-build-outputs-dexcount-release.txt中
开启混淆开关:
[java] view
plain copy
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配置文件:
[java] view
plain copy
# 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,就一定能够找到答案,只是时间长短不同而已。
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
-keepattributes *Annotation*
打包成功后app运行崩溃的处理:
#Crash信息处理--keep住源文件以及行号
-keepattributes SourceFile,LineNumberTable
#保留数据库--记住一定不要加public-----------注明:这个是加密数据库
[java] view
plain copy
-keep class net.sqlcipher.** {*;}
-keep class net.sqlcipher.database.** {*;}
#autolayout--记住要写成1.4.5的依赖,1.4.3的会报AutoContentFrameLayout的错
[java] view
plain copy
-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下自动加载
[java] view
plain copy
sourceSets {
main { jniLibs.srcDirs = ['libs'] }
}
如果没有,单独 compile file
切记:
哎呀 微信分享不花钱
微信支付是要花钱的呀 阿西吧~
[java] view
plain copy
#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):
[java] view
plain copy
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):
[java] view
plain copy
apply plugin: 'com.android.application'
apply plugin: 'com.getkeepsafe.dexcount'//在项目build.gardle中配置代码
注意:要仔细观察
最后统计的方法数是methods,feilds在项目-app-build-outputs-dexcount-release.txt中
开启混淆开关:
[java] view
plain copy
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配置文件:
[java] view
plain copy
# 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 APK反编译(最新更新)
- Android 混淆代码总结
- Android 混淆代码总结
- Android 混淆代码总结
- Android代码混淆技术总结(一)
- Android 混淆代码总结
- Arcgis For Android项目代码proguard混淆问题总结
- Android 混淆代码总结
- android 混淆代码异常总结
- 【转】Android 混淆代码总结
- Android App 瘦身总结 第三章 代码混淆及优化
- Android 混淆代码问题总结
- android 通过eclipse混淆代码 打包 + proguard 总结
- Android开发中混淆代码总结
- android代码混淆报错总结:java.io.IOException: Please correct the above
- android 代码混淆经验总结(转载)
- Android 混淆代码总结
- Android 混淆代码总结
- Dotfuscator针对C#代码混淆方法总结
- Android 代码混淆总结