Android studio 混淆打包 proguard-rules.pro 与 bulid.gradle 配置总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gfg156196/article/details/74348160

现在写的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:[email protected]
#
#####################################################################################
    #指定代码的压缩级别
    -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
#
#
#####################################################################################


如有需要请复制使用  如发现遗漏请留言。








猜你喜欢

转载自blog.csdn.net/gfg156196/article/details/74348160