现在写的app 基本都是经过混淆了的,如果不混淆, 发布出去,别人一反编译 就可以直接看你的源码了
ok 来说一下混淆吧:
build.gradle文件
apply plugin: 'com.android.application'
android {
//签名文件 改为自己的路径
signingConfigs {
config {
keyAlias 'xiao'
keyPassword 'key'
storeFile file('F:/Android/keystore.jks')
storePassword 'key'
// v2SigningEnabled false //是否采用APK Signature Scheme v2
}
}
compileSdkVersion 25
buildToolsVersion '25.0.3'
//useLibrary 'org.apache.http.legacy'
defaultConfig {
applicationId "com.web"
minSdkVersion 16
targetSdkVersion 25
versionCode 12
versionName "1.0.0"
jackOptions {
enabled true
}
signingConfig signingConfigs.config
}
buildTypes {
release {
signingConfig signingConfigs.config
// 是否进行混淆
minifyEnabled false
// 混淆文件的位置
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
// 不显示Log
buildConfigField "boolean", "LOG_DEBUG", "false"
//Zipalign优化
zipAlignEnabled true
// 移除无用的resource文件
shrinkResources true
}
debug {
signingConfig signingConfigs.config
// 显示Log
buildConfigField "boolean", "LOG_DEBUG", "true"
versionNameSuffix "-debug"
minifyEnabled false
zipAlignEnabled false
shrinkResources false
}
}
compileOptions {
targetCompatibility 1.8
sourceCompatibility 1.8
}
productFlavors {
}
}
dependencies {
// 编译libs目录下的所有jar包
compile fileTree(include: ['*.jar'], dir: 'libs')
//noinspection GradleCompatible
compile 'com.android.support:support-v4:25.3.1'
compile 'com.android.support:design:25.3.1'
compile 'com.github.bumptech.glide:glide:3.7.0'
}
proguard-rules.pro混淆文件
#####################################################################################
# start on 2017/5/16 15:59
# update author: qihao on 2017/7/4 17:53 http://blog.csdn.net/gfg156196
# Email:sin2t@sina.com
#
#####################################################################################
#指定代码的压缩级别
-optimizationpasses 5
#包名不混合大小写
-dontusemixedcaseclassnames
#不去忽略非公共的库类
-dontskipnonpubliclibraryclasses
#优化 不优化输入的类文件
-dontoptimize
#混淆时是否做预校验
-dontpreverify
#混淆时是否记录日志
-verbose
# 混淆时所采用的算法
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
#保护注解
-keepattributes *Annotation*
#如果引用了v4或者v7包
-dontwarn android.support.**
#保持 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);
}
# 保持自定义控件类不被混淆
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
# 保持自定义控件类不被混淆
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
#保持 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>;
}
#避免混淆泛型 如果混淆报错建议关掉
#–keepattributes Signature
#关闭所有日志 log, java.io.Print, printStackTrace
-assumenosideeffects class android.util.Log {
public static *** e(...);
public static *** w(...);
public static *** i(...);
public static *** d(...);
public static *** v(...);
}
-assumenosideeffects class java.io.PrintStream {
public *** print(...);
public *** println(...);
}
-assumenosideeffects class java.lang.Throwable {
public *** printStackTrace(...);
}
#####################################################################################
# end 2017/7/4 17:53 http://blog.csdn.net/gfg156196
#
#
#####################################################################################
赠送源码:https://github.com/yugu88/MagicWX。
《最完整的Android逆向知识体系》