精华内容
下载资源
问答
  • 混淆配置文件

    2016-11-11 10:21:03
    Android 混淆配置文件
  • AS配置文件+gradle配置+混淆配置 1.Android Studio 配置文件 2.gradle配置文件(可自行删减) 3. 混淆配置文件(包含混淆规则和混淆配置

    AS配置文件+gradle配置+混淆配置

    1.Android Studio 配置文件:配置文件


    2.gradle配置文件(可自行删减)

    apply plugin: 'com.android.application'
    
        //获取local.properties的内容
        Properties properties = new Properties()
        properties.load(project.rootProject.file('local.properties').newDataInputStream())
    
    
        android {
        compileSdkVersion 19
        buildToolsVersion "25.0.2"
    
    
        // 使用签名文件进行签名的两种方式
        //第一种:使用gradle直接签名打包,配置keystore签名
        signingConfigs {
        release {
        keyAlias '1.0'
        keyPassword 'huyu'
        storeFile file('E:/Studio_备份/xx/xx上传/xx.keystore')
        storePassword 'huyu'
        //            v2SigningEnabled false //禁用V2签名模式,V2签名模式仅在7.0以上可以安装,减少APP安装过程时间和更多的保护机制
        // 或者使用面板签名的时候,勾选V1,V2可以兼容各个版本
        }
        debug {
        keyAlias 'androiddebugkey'
        keyPassword 'android'
        storeFile file('E:/Studio_备份/debug-keystore/huyu-debug.keystore')
        storePassword 'android'
        }
        }
    
        //第二种:为了保护签名文件,把它放在local.properties中并在版本库中排除,不把这些信息写入到版本库中(注意,此种方式签名文件中不能有中文)
        //    signingConfigs {
        //        config {
        //            keyAlias properties.getProperty("keystroe_keyAlias")
        //            keyPassword properties.getProperty("keystroe_keyPassword")
        //            storeFile file(properties.getProperty("keystroe_storeFile"))
        //            storePassword properties.getProperty("keystroe_storePassword")
        //        }
        //    }
    
        defaultConfig {
        applicationId "com.huyu.test"
        minSdkVersion 15
        targetSdkVersion 19
        versionCode 20170505
        versionName "2.04.170505"
    
        // dex突破65535的限制
        // 第一步:
        //         multiDexEnabled true
        // 第二步: 在dependencies 添加依赖
        // compile 'com.android.support:multidex:1.0.0'
        // 第三步:
        // Application继承一下MultiDexApplication即可。
        }
    
        //屏蔽lint的严格检查
        lintOptions {
        abortOnError false
        disable 'MissingTranslation'    // 防止在发布的时候出现因MissingTranslation导致Build Failed!
    
        //        checkReleaseBuilds false      // 为了解决多个manifest中相同activity重复注册的问题(主要是用在多渠道配置不同的manifest文件)
        }
    
        //配置编译的jdk版本
        //    compileOptions {
        //        sourceCompatibility JavaVersion.VERSION_1_7
        //        targetCompatibility JavaVersion.VERSION_1_7
        //    }
    
        /** 报 Duplicate files copied in APK META-INF/DEPENDENCIES File 1: xxx.jar File 2: xxx.jar
        貌似说两个包里面的文件重复了*/
        //    packagingOptions {
        //        exclude 'META-INF/DEPENDENCIES'
        //        exclude 'META-INF/NOTICE'
        //        exclude 'META-INF/LICENSE'
        //        exclude 'META-INF/LICENSE.txt'
        //        exclude 'META-INF/NOTICE.txt'
        //    }
    
        //打包配置debug模式下,使用正式版签名,此操作主要为了方便调试微信,新浪等第三方登录授权
        buildTypes {
        release {
        minifyEnabled true
        shrinkResources true //2.2版本该功能无法使用(必须和 minifyEnabled true 一起使用)
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.release
        }
        debug {
        zipAlignEnabled false   //默认是true, 只有显示配置为true时,才会生成unaligned.apk
        minifyEnabled false     //不启用混淆
        shrinkResources false   //默认是false, true为删除无用资源
        signingConfig signingConfigs.debug   //不配置签名项,会生成无签名的apk
    
        // 动态在 BuildConfig.java 添加字段,在Java代码中调用 BuildConfig.FLAG_LOG
        // buildConfigField "boolean", "FLAG_LOG", "true"
        // buildConfigField "String", "API_HOST", "\"http://api.huyu.com\""  // 字符串变量
        }
        }
    
        // 引用了 aar 资源1:需要加上下面这句;2.需要在 dependences 中加上 compile (name:'aar文件名', ext:'aar')
        repositories {
        flatDir {
        dirs 'libs'
        }
        }
    
        //    sourceSets {
        //        baidu {
        //            // 设置不同的 AndroidManifest 文件
        //            // 一定要写相对路径,将原始manifest中的内容copy到为每个包单独配置的manifest中去,
        //            // 1.删除 AndroidManifest_baidu.xml 中配置包名的代码,因为已经在gradle.build中配置过了,不能重复配置
        //            // 2.在AndroidManifest_baidu.xml 中 application 标签下添加 tools:replace="android:label,android:icon"(具体可以参考报错信息)
        //            manifest.srcFile 'src/baidu/AndroidManifest_baidu.xml'
        //            java.srcDirs = ['src/baidu/java']
        //            res.srcDirs = ['src/baidu/res']
        //            assets.srcDirs = ['src/baidu/assets']
        //        }
        //    }
    
    
        //配置多版本的apk, 需要在终端执行  gradlew assembleRelease  将生成不同渠道的release版apk
        //不同的Flavor若需要对应不同的资源文件或者代码或者AndroidManifest.xml文件,均可以在src下简历对应flavor的文件夹,再覆盖资源即可。
        //注意:覆盖资源的路径要与main下面路径一致
        productFlavors{
    
    
        baidu {
        applicationId "com.huyu.baidu"  //替换包名
    
        // 动态在 BuildConfig.java 添加字段,  引用:  BuildConfig.isGooglePlay
        buildConfigField "boolean", "isGooglePlay", "false"
        buildConfigField "String", "XIAOMI_APPID", '"你自己的key"'
        buildConfigField "String", "XIAOMI_APPKEY", '"你自己的key"'
    
    
        // 替换配置文件中的 ${app_name} 等占位符(${applicationId} 除外)
        manifestPlaceholders = [
        //                    app_icon: "@mipmap/ic_launcher",
        app_name : "@string/app_name",
        JPUSH_APPKEY : "你自己的key",
        XIAOMI_APPID : "你自己的key",
        XIAOMI_APPKEY : "你自己的key"
        ]
    
        // resValue  动态在res/value/目录下根据第一个参数如 strings.xml 添加字段,所以添加前不能存在同名字段
        // bools.xml 添加字段,所以添加前不能存在同名字段
        // 在java代码中获取这里的配置属性: context.getResources().getString(R.string.isGooglePlayVersion);
        //            resValue("string" , "app_name","xx")
        // resValue("bool" , "isGooglePlay", 'false')
    
        }
    
        google {
        applicationId "com.huyu.gplay"
    
        buildConfigField "boolean", "isGooglePlay", "true"
        buildConfigField "String", "XIAOMI_APPID", '"你自己的key"'
        buildConfigField "String", "XIAOMI_APPKEY", '"你自己的key"'
    
        manifestPlaceholders = [
        app_name : "@string/app_name_gplay",
        JPUSH_APPKEY : "你自己的key",
        XIAOMI_APPID : "你自己的key",
        XIAOMI_APPKEY : "你自己的key"
        ]
    
        }
    
        }
    
    
        //这里修改apk文件名
        android.applicationVariants.all { variant ->
        variant.outputs.each { output ->
        def outputFile = output.outputFile
        if (outputFile != null && outputFile.name.endsWith('.apk')) {
        def fileName = "huyu_${variant.productFlavors[0].name}" +
        "_V${defaultConfig.versionName}" +
        "_${releaseTime() }.apk"
        output.outputFile = new File(outputFile.parent, fileName)
        }
        }
        }
    
    
        /**一般大多数是出现在图片上,.jpg修改成了.png就会出现这个问题*/
        aaptOptions {
        cruncherEnabled = false
        useNewCruncher = false
        }
    
        }
    
    
        // 定义一个打包时间
        def releaseTime() {
        return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
        }
    
        dependencies {
        compile fileTree(include: ['*.jar'], dir: 'libs')
        compile(name: 'BDUpdateSDK', ext: 'aar')
        }
    在项目根目录的 local.properties 中 添加如下信息(可以隐藏keystrore信息)
        #对应自己实际的证书路径和名字,在这里由于签名文件是放在app目录下,因为没有写绝对路径。
        keystroe_storeFile=E\:/Studio/keystore/huyu.keystore
        keystroe_storePassword=huyu
        keystroe_keyAlias=1.0
        keystroe_keyPassword=huyu
    

    3. 混淆配置文件(包含混淆规则和混淆配置)

    ######################################################################
        #
        #   1.语法规则
        #       (成员变量不管是否被引用,都不会删除,若指定就保留,未指定就重命名)
        #       加 names 和 不加 names 区别:
        #               不加 names:   当 类的成员没有被引用时,这个类不会被删除
        #               加   names:   当 类的成员没有被引用时,这个类会被删除
        #
        #       关键字                         1.压缩删除              2.类名是否保留(删除后)              3.成员是否保留(删除后)                   描述
        #
        #   keep                         先删除 未被引用的方法                  保留                   再保留 指定成员名,最后重命名 其余成员名
        #
        #   keepclassmembers             先删除 未被引用的方法                  重名                   再保留 指定成员名,最后重命名 其余成员名
        #
        #   keepclasseswithmembers       先删除 未被引用的方法       指定成员存在就保留,不存在就重名     再保留 指定成员名,最后重命名 其余成员名
        #
        #   keepnames                    先删除 未被引用的方法                  保留                   再保留 指定成员名,最后重命名 其余成员名
        #
        #   keepclassmembernames         先删除 未被引用的方法                  重名                   再保留 指定成员名,最后重命名 其余成员名
        #
        #   keepclasseswithmembernames   先删除 未被引用的方法       指定成员存在就保留,不存在就重名     再保留 指定成员名,最后重命名 其余成员名
        #
        #   -keepattributes attribute_name,...                  保护给定的可选属性,例如LocalVariableTable,EnclosingMethod,
        #                                                             Deprecated, Synthetic 等.
        #   -dontwarn [class_filter]      不打印指定类的警告信息(不是每个第三方SDK都需要-dontwarn,这取决于混淆时第三方SDK是否出现警告,需要的时候再加上)
        #
        #
        #       通配符	            描述
        #       	            匹配类中的所有字段
        #       	        匹配类中的所有方法
            #       	            匹配类中的所有构造函数
                #       ?	                匹配单个字符
                #       %	                匹配任何基础类型的类型名
                #       *	                匹配任意长度字符,但不含包名分隔符(.)。
                #                               比如说我们的完整类名是com.example.test.MyActivity,使用com.*,或者com.exmaple.*都是无法匹配的,因为*无法匹配包名中的分隔符,
                #                               正确的匹配方式是com.exmaple.*.*,或者com.exmaple.test.*,这些都是可以的。
                #                               但如果你不写任何其它内容,只有一个*,那就表示匹配所有的东西。
                #       *(当用在类里面时)	    匹配任何字段和方法
                #       **	                匹配任意长度字符,并且包含包名分隔符(.)。
                #                               比如 android.support.** 就可以匹配android.support包下的所有内容,包括任意长度的子包。
                #       ***	                匹配任意参数类型。
                #                               比如void set*(***)就能匹配任意传入的参数类型,*** get*()就能匹配任意返回值的类型。
                #       …	                匹配任意长度的任意类型参数。
                #                               比如void test(…)就能匹配任意void test(String a)或者是void test(int a, String b)这些方法。
                #       $	                指内部类
                #
                #
                #
                #   2.不能混淆的代码
                #       1.需要反射的代码
                #       2.系统接口(AndroidMainfest 中的类(四大组件,Application 的子类), Framework 层下所有的类,support包, webview,js等)
                #       3.Jni接口
                #       4.需要序列号和反序列化的代码
                #       5.与服务端进行元数据交互的实体类(JSON、XML中对应的实体类)
                #       6.GSON、fastjson 等框架时,所写的 JSON 实体类
                #       7.第三方库一般是不需要混淆的
                #
                ######################################################################
    
    
    
    
                ######################################################################
                #
                # 1.特殊处理
                #
    
                # 实体类(在开发的时候我们可以将所有的实体类放在一个包内,这样我们写一次混淆就行了)
                -keep public class com.huyu.entity.** {
                public void set*(***);
                public *** get*();
                public *** is*();
                }
    
                # 接口(对外接口的public类名和成员名,否则外部无法调用)
                -keep public interface com.huyu.interfaces.**{*;}
                -keep public enum com.test.test.**{*;}
    
    
                # 内部类或内部接口
                -keep class com.huyu.utils.MyUtils$* {*;}
    
                # 测试 keep
                -keep class com.huyu.utils.TestKeep{
                public void use2();
                }
                -keepclassmembers class com.huyu.utils.TestKeepclassmembers{
                public void use2();
                }
                -keepclasseswithmembers class com.huyu.utils.TestKeepclasseswithmembers{
                public void use1();
                }
                -keepnames class com.huyu.utils.TestKeepnames{
                public void use2();
                public void use4(int);
                public void use5(int);
                }
                -keepclassmembernames class com.huyu.utils.TestKeepclassmembernames{
                public void use2();
                }
                -keepclasseswithmembernames class com.huyu.utils.TestKeepclasseswithmembernames{
                public void use1();
                }
    
                # 项目中其他Module的警告
                #-dontwarn com.test.**
    
                # 反射类
                # 一般而言,使用反射一般会有以下方式,可以搜索代码,找到相关的类,然后在混淆配置里面进行保留
                # Class.forName(“SomeClass”)
                # SomeClass.class
                # SomeClass.class.getField(“someField”)
                # SomeClass.class.getDeclaredField(“someField”)
                # SomeClass.class.getMethod(“someMethod”, new Class[] {})
                # SomeClass.class.getMethod(“someMethod”, new Class[] { A.class })
                # SomeClass.class.getMethod(“someMethod”, new Class[] { A.class, B.class })
                # SomeClass.class.getDeclaredMethod(“someMethod”, new Class[] {})
                # SomeClass.class.getDeclaredMethod(“someMethod”, new Class[] { A.class })
                # SomeClass.class.getDeclaredMethod(“someMethod”, new Class[] { A.class, B.class })
                # AtomicIntegerFieldUpdater.newUpdater(SomeClass.class, “someField”)
                # AtomicLongFieldUpdater.newUpdater(SomeClass.class, “someField”)
                # AtomicReferenceFieldUpdater.newUpdater(SomeClass.class, SomeType.class, “someField”)
                #
                #-keep class com.huyu.reflectClass { *; }  # 保留反射的 类名 和 类的所有成员
    
    
                # js交互
                # 在app中与HTML5的JavaScript的交互进行特殊处理,如
                # package com.ljd.example;
                #
                # public class JSInterface {
                #     @JavascriptInterface
                #     public void callAndroidMethod(){
                #         // do something
                #     }
                # }
                # 我们需要确保这些js要调用的原生方法不能够被混淆,于是我们需要做如下处理
                # -keepclassmembers class com.ljd.example.JSInterface {
                #    ;
                    # }
    
                    #
                    #
                    #
                    ######################################################################
    
    
    
                    ######################################################################
                    #
                    # 2.常用第三方jar处理
                    # (格式)
                    # -dontwarn com.alibaba.**
                    # -keep class com.alibaba.** {*;}
                    #
    
                    # 机智云
                    -dontwarn com.gizwits.**
                    -keep class com.gizwits.**{ *;}
    
                    # Volley
                    -keep class com.android.volley.** {*;}
                    -keep class com.android.volley.toolbox.** {*;}
                    -keep class com.android.volley.Response$* { *; }
                    -keep class com.android.volley.Request$* { *; }
                    -keep class com.android.volley.RequestQueue$* { *; }
                    -keep class com.android.volley.toolbox.HurlStack$* { *; }
                    -keep class com.android.volley.toolbox.ImageLoader$* { *; }
    
                    # N62
                    -keep public class com.p2p.core.MediaPlayer{
                    public private ;
                        private int mNativeContext;
                        }
                        -keep public class com.p2p.core.VideoView{
                        public private ;
                            }
    
                            #pinyin4j
                            -dontwarn net.soureceforge.pinyin4j.**
                            -dontwarn demo.**
                            -keep class net.sourceforge.pinyin4j.** { *;}
                            -keep class demo.** { *;}
                            -keep class com.hp.** { *;}
    
                            #nineoldandroids
                            -dontwarn com.nineoldandroids.*
                            -keep class com.nineoldandroids.** { *;}
    
                            # UIL
                            -keep class com.nostra13.universalimageloader.** { *; }
                            -keepclassmembers class com.nostra13.universalimageloader.** {*;}
    
                            # 阿里产品(fastjson等)
                            -dontwarn com.alibaba.**
                            -keep class com.alibaba.** { *; }
    
                            # 腾讯产品(QQ授权,微信授权等)
                            -dontwarn com.tencent.**
                            -keep class com.tencent.** {*;}
    
                            # 百度产品(推送,自升级等)
                            -dontwarn com.baidu.**
                            -keep class com.baidu.**{*; }
    
                            # 极光推送
                            -dontwarn cn.jpush.**
                            -dontwarn cn.jiguang.**
                            -keep class cn.jpush.** { *; }
                            -keep class cn.jiguang.** { *; }
    
                            # 小米推送
                            #可以防止一个误报的 warning 导致无法成功编译,如果编译使用的 Android 版本是 23。
                            -dontwarn com.xiaomi.push.**
                            #这里 com.xiaomi.mipushdemo.DemoMessageRreceiver 改成 app 中定义的完整类名
                            #-keep class cn.jpush.android.service.PluginXiaomiPlatformsReceiver {*;}
    
                            # 讯飞语音
                            -dontwarn com.iflytek.**
                            -keep class com.iflytek.** {*;}
    
                            #
                            #
                            #############################################################################
    
    
    
                            ######################################################################
                            #
                            # 3.基础不用动的规则
                            #
                            -dontskipnonpubliclibraryclasses # 不忽略非公共的库类
                            -dontskipnonpubliclibraryclassmembers   # 指定不去忽略非公共库的类成员
                            -optimizationpasses 5            # 指定代码的压缩级别在0~7之间,默认为5,一般不做修改
                            -dontusemixedcaseclassnames      # 不使用大小写混合,混合后的类名为小写
                            -dontpreverify                   # 混淆时不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度
                            -verbose                         # 混淆时记录日志
                            -dontoptimize                    # 不优化输入的类文件,优化选项是默认打开的(如果需要删除log,此选项需要去除)
                            -keepattributes Signature        # 不混淆泛型,如果混淆报错建议关掉
                            -keepattributes EnclosingMethod  # 不混淆反射
                            -keepattributes *Annotation*,InnerClasses     # 保持注解,内部类
                            -keepattributes SourceFile,LineNumberTable    # 抛出异常时保留代码行号
                            -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*  # 混淆时所采用的算法(谷歌推荐)
    
                            # 保留我们使用的四大组件,自定义的Application等等这些类不被混淆,因为这些子类都有可能被外部调用
                            -keep public class * extends android.app.Application
                            -keep public class * extends android.app.Fragment
                            -keep public class * extends android.app.Activity
                            -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
                            -keep public class com.google.vending.licensing.ILicensingService
                            -keep public class * extends android.os.IInterface
    
                            #记录生成的日志数据
                            -dump class_files.txt            #列出 apk包内所有class的内部结构
                            -printseeds seeds.txt            #列出 未混淆的类和成员
                            -printusage unused.txt           #列出 未被使用的代码
                            -printmapping mapping.txt        #列出 混淆前后的映射
    
                            -dontwarn android.support.**                        # 不提示兼容库的错误警告
                            -keep class android.support.** {*;}                 # 保留support下的所有类及其内部类
                            -keep public class * extends android.support.**     # 保留support下v4,v7等子类
                            -keep class **.R$* {*;}          # 保留R下面的资源
    
                            #保持 含有 native 函数 的 类 和 native 成员函数 不被混淆
                            -keepclasseswithmembernames class * {
                            native ;
                                }
    
                                #保持Activity中的方法参数是view的方法,如 xml 布局使用了 doClick 等事件
                                -keepclassmembers class * extends android.app.Activity {
                                public void *(android.view.View);
                                }
    
                                #保持 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 ;
                                    !private ;
                                        !private ;
                                            private void writeObject(java.io.ObjectOutputStream);
                                            private void readObject(java.io.ObjectInputStream);
                                            java.lang.Object writeReplace();
                                            java.lang.Object readResolve();
                                            }
    
                                            # 保留枚举类不被混淆(如果报错,可以去掉这项)
                                            -keepclassmembers enum * {
                                            public static **[] values();
                                            public static ** valueOf(java.lang.String);
                                            }
    
                                            # 保持自定义控件类不被混淆
                                            -keepclasseswithmembers class * {
                                            public (android.content.Context, android.util.AttributeSet);
                                                }
                                                -keepclasseswithmembers class * {
                                                public (android.content.Context, android.util.AttributeSet, int);
                                                    }
                                                    -keep public class * extends android.view.View {
                                                    *** get*();
                                                    void set*(***);
                                                    public (android.content.Context);
                                                        public (android.content.Context, android.util.AttributeSet);
                                                            public (android.content.Context, android.util.AttributeSet, int);
                                                                }
    
                                                                # 对于带有回调函数的onXXEvent、**On*Listener的,不能被混淆
                                                                -keepclassmembers class * {
                                                                void *(**On*Event);
                                                                void *(**On*Listener);
                                                                }
    
                                                                #-----------处理webView处理---------------
                                                                -keepclassmembers class fqcn.of.javascript.interface.for.webview {
                                                                public *;
                                                                }
                                                                -keepclassmembers class * extends android.webkit.webViewClient {
                                                                public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
                                                                public boolean *(android.webkit.WebView, java.lang.String);
                                                                }
                                                                -keepclassmembers class * extends android.webkit.webViewClient {
                                                                public void *(android.webkit.webView, jav.lang.String);
                                                                }
    
                                                                # 移除一些log代码
                                                                -assumenosideeffects class android.util.Log {
                                                                public static *** v(...);
                                                                public static *** i(...);
                                                                public static *** d(...);
                                                                public static *** w(...);
                                                                public static *** e(...);
                                                                }
    #
    #
    #
    ######################################################################
    

    展开全文
  • 混淆打包Android library工程的混淆配置文件
  • android studio混淆文件配置proguard-rules.pro,以及各类架包混淆选择,混淆设定
  • Android 混淆文件配置

    2017-08-11 15:13:46
    第一次配置混淆文件,盗用的别人的模板,也不知道合不合格,反正最后打包没问题,其实主要的变动是在第三方,有些使用的是官方的使用...如果你不知道第三方的混淆配置,就这样写,没问题的# Add project specific ProGu

    第一次配置混淆文件,盗用的别人的模板,也不知道合不合格,反正最后打包没问题,其实主要的变动是在第三方,有些使用的是官方的使用配置,有的没找到就直接使用万能写法
    比如融云:
    -dontwarn io.rong.push.**
    -keep class io.rong.push.** {*;}
    如果你不知道第三方的混淆配置,就这样写,没问题的

    # Add project specific ProGuard rules here.
    # By default, the flags in this file are appended to flags specified
    # in /Users/wangwei/Library/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 *;
    #}
    #-------------------------------------------定制化区域----------------------------------------------
    #---------------------------------1.实体类---------------------------------
    
    #本程序
    -keep class com.kb.lifecool.bean.** {*;}
    
    #-------------------------------------------------------------------------
    
    #---------------------------------2.第三方包-------------------------------
    #阿里云
    -keep class com.alibaba.sdk.android.oss.** { *; }
    -dontwarn okio.**
    -dontwarn org.apache.commons.codec.binary.**
    
    #融云
    -dontwarn io.rong.push.**
    -keep class io.rong.push.** {*;}
    #图片选择
    -dontwarn cn.finalteam.rxgalleryfinal.**
    -keep class cn.finalteam.rxgalleryfinal.** {*;}
    #地址选择
    -dontwarn kankan.wheel.**
    -keep class kankan.wheel.** {*;}
    #
    -dontwarn com.amap.api.**
    -keep class com.amap.api.** {*;}
    #小米推送
    -dontwarn com.xiaomi.push.**
    -keep class com.xiaomi.push.** {*;}
    #
    -dontwarn okhttp3.**
    -keep class okhttp3.** {*;}
    #
    -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;
    }
    
    # GSON
    -keep class sun.misc.Unsafe { *; }
    -keep class com.google.gson.examples.android.model.** { *; }
    
    # ButterKnife
    -keep class butterknife.** { *; }
    -dontwarn butterknife.internal.**
    -keep class **$$ViewBinder { *; }
    -keepclasseswithmembernames class * {
        @butterknife.* <fields>;
    }
    -keepclasseswithmembernames class * {
        @butterknife.* <methods>;
    }
    #phototView
    -dontwarn com.github.chrisbanes.PhotoView.**
    -keep class com.github.chrisbanes.PhotoView.** {*;}
    #轮播图
    -dontwarn com.jude.rollviewpager.RollPagerView.**
    -keep class com.jude.rollviewpager.RollPagerView.** {*;}
    #剪切图片
    -dontwarn com.yalantis.ucrop.**
    -keep class com.yalantis.ucrop.** { *; }
    -keep interface com.yalantis.ucrop.** { *; }
    #提示小圆点
    -dontwarn com.jauker.widget.**
    -keep class ccom.jauker.widget.** { *; }
    #侧滑删除
    -dontwarn com.github.mcxtzhang.SwipeDelMenuLayout.**
    -keep class com.github.mcxtzhang.SwipeDelMenuLayout.** { *; }
    #运行时权限
    -dontwarn com.zhy.m.**
    -keep class com.zhy.m.** {*;}
    -keep interface com.zhy.m.** { *; }
    -keep class **$$PermissionProxy { *; }
    
    #-------------------------------------------------------------------------
    
    #---------------------------------3.与js互相调用的类------------------------
    
    
    
    #-------------------------------------------------------------------------
    
    #---------------------------------4.反射相关的类和方法-----------------------
    
    -keep class com.kb.lifecool.utils.StatusBarCompat { *; }
    
    #----------------------------------------------------------------------------
    #---------------------------------------------------------------------------------------------------
    
    #-------------------------------------------基本不用动区域--------------------------------------------
    #---------------------------------基本指令区----------------------------------
    #代码混淆的压缩比例,值在0-7之间
    -optimizationpasses 5
    #指定不去忽略非公共的库的类的成员
    -dontskipnonpubliclibraryclassmembers
    #生成原类名和混淆后的类名的映射文件
    -printmapping proguardMapping.txt
    #指定混淆是采用的算法
    -optimizations !code/simplification/cast,!field/*,!class/merging/*
    #不混淆Annotation
    -keepattributes *Annotation*,InnerClasses
    #不混淆泛型
    -keepattributes Signature
    #抛出异常时保留代码行号
    -keepattributes SourceFile,LineNumberTable
    #----------------------------------------------------------------------------
    #---------------------------------默认保留区---------------------------------
    -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 * extends android.view.View
    -keep public class com.android.vending.licensing.ILicensingService
    -keep class android.support.** {*;}
    
    -keep public class * extends android.view.View{
        *** get*();
        void set*(***);
        public <init>(android.content.Context);
        public <init>(android.content.Context, android.util.AttributeSet);
        public <init>(android.content.Context, android.util.AttributeSet, int);
    }
    -keepclasseswithmembers class * {
        public <init>(android.content.Context, android.util.AttributeSet);
        public <init>(android.content.Context, android.util.AttributeSet, int);
    }
    -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();
    }
    -keep class **.R$* {
     *;
    }
    -keepclassmembers class * {
        void *(**On*Event);
    }
    #----------------------------------------------------------------------------
    
    #---------------------------------webview------------------------------------
    -keepclassmembers class fqcn.of.javascript.interface.for.Webview {
       public *;
    }
    -keepclassmembers class * extends android.webkit.WebViewClient {
        public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
        public boolean *(android.webkit.WebView, java.lang.String);
    }
    -keepclassmembers class * extends android.webkit.WebViewClient {
        public void *(android.webkit.WebView, jav.lang.String);
    }
    #----------------------------------------------------------------------------
    #---------------------------------------------------------------------------------------------------
    
    
    
    
    
    展开全文
  • Android混淆文件配置

    2019-09-26 19:23:14
    正常一个APP都会开启混淆,但是有时后接手的项目并没有开启混淆,然后自己修改的时候就很蛋疼,因为开启混淆便会报错,如果有一些没有用过的第三方库更要自己去处理,这里就记录一下安卓常见的混淆文件和常规用法。...

    前言

    正常一个APP都会开启混淆,但是有时后接手的项目并没有开启混淆,然后自己修改的时候就很蛋疼,因为开启混淆便会报错,如果有一些没有用过的第三方库更要自己去处理,这里就记录一下安卓常见的混淆文件和常规用法。

    混淆好处以及哪些是不能混淆的

    面试常问混淆好处,我们张口就来:

    • 打包时会去掉无用资源有效减少APK体积(尤其对一些开发不规范导致很多无效代码和资源文件)其实这也可以变向的解决64k问题
    • 增加反编译成本,有效提高APK安全性(其实很多APK都会用第三方加密工具如360、爱加密)

    但是并不是什么都可以混淆的:(具体配置代码都有)

     - 实体类
     - 序列化对象
     - 反射
     - 枚举
     - resource
     - native方法(像java调用c++)
     - 一些自定义控件
     - Gson对象
    

    开启混淆

       buildTypes {
            debug {
                // 显示Log
                buildConfigField "boolean", "LOG_DEBUG", "true"
    
                minifyEnabled false//是否开启混淆
                zipAlignEnabled true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//加载的混淆文件
                signingConfig signingConfigs.debug
            }
            release {
                // 不显示Log
                buildConfigField "boolean", "LOG_DEBUG", "false"
    
                minifyEnabled true//是否开启混淆
                zipAlignEnabled true
                // 移除无用的resource文件
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//混淆文件位置
                signingConfig signingConfigs.release
            }
        }
    

    可以看到其实是否开启混淆通过:

    minifyEnabled true//是否开启混淆
    proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’//混淆文件位置

    但是你开启混淆会打包很慢的所以这里一定要区分当前打包模式是:debug还是release,一般debug打包提供测试用,我们不会开启混淆。

    如何打签名包

    通过AS工具面板Build ---->Generate Singned Bundle or APK
    我们选择apk后,输入好签名密码:
    在这里插入图片描述这里如果你设置渠道包的话会选择当前渠道,我这就简单选择release点击finish便可。

    混淆文件配置

    重头戏来啦,在android中常用的混淆文件(可以复制我这个常用的然后再添加)

    指定代码的压缩级别
    -optimizationpasses 5
    #包明不混合大小写
    -dontusemixedcaseclassnames
    #不去忽略非公共的库类
    -dontskipnonpubliclibraryclasses
     #优化  不优化输入的类文件
    -dontoptimize
     #预校验
    -dontpreverify
     #混淆时是否记录日志
    -verbose
     # 混淆时所采用的算法
    -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
    #保护注解
    -keepattributes *Annotation*
    #如果有引用v4包可以添加下面这行
    -keep public class * extends android.support.v4.app.Fragment
    #忽略警告
    -ignorewarning
    ##记录生成的日志数据,gradle build时在本项目根目录输出##
    #apk 包内所有 class 的内部结构
    -dump proguard/class_files.txt
    #未混淆的类和成员
    -printseeds proguard/seeds.txt
    #列出从 apk 中删除的代码
    -printusage proguard/unused.txt
    #混淆前后的映射
    -printmapping proguard/mapping.txt
    ########记录生成的日志数据,gradle build时 在本项目根目录输出-end######
    #如果引用了v4或者v7包
    -dontwarn android.support.**
    #保持 native 方法不被混淆
    -keepclasseswithmembernames class * {
        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*(...);
    }
    
    #保持 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 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类打印各个等级日志的代码,打正式包的时候可以做为禁log使用,这里可以作为禁止log打印的功能使用,另外的一种实现方案是通过BuildConfig.DEBUG的变量来控制
    #-assumenosideeffects class android.util.Log {
    #    public static *** v(...);
    #    public static *** i(...);
    #    public static *** d(...);
    #    public static *** w(...);
    #    public static *** e(...);
    #}
    
    #-------------------------------------------定制化区域----------------------------------------------
    #---------------------------------1.实体类---------------------------------
    -keep class 自己项目的包名.bean.** { *; }
    
    #########################################################第三方的配置开始#######################
    ############shareSDK混淆配置################
    -keep class cn.sharesdk.**{*;}
    -keep class com.sina.**{*;}
    -keep class **.R$* {*;}
    -keep class **.R{*;}
    -keep class com.mob.**{*;}
    #####EventBus混淆配置
    -keepattributes *Annotation*
    -keepclassmembers class ** {
        @org.greenrobot.eventbus.Subscribe <methods>;
    }
    -keep enum org.greenrobot.eventbus.ThreadMode { *; }
    
    # Only required if you use AsyncExecutor
    -keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
        <init>(java.lang.Throwable);
    }
    
    ###########极光混淆配置
    -dontoptimize
    -dontpreverify
    
    -dontwarn cn.jpush.**
    -keep class cn.jpush.** { *; }
    -keep class * extends cn.jpush.android.helpers.JPushMessageReceiver { *; }
    
    -dontwarn cn.jiguang.**
    -keep class cn.jiguang.** { *; }
    
    
    ###########okhttputils 和okhttp相关的 的混淆####################
    #okhttputils
    -dontwarn com.zhy.http.**
    -keep class com.zhy.http.**{*;}
    
    #okhttp
    -dontwarn okhttp3.**
    -keep class okhttp3.**{*;}
    
    
    #okio
    -dontwarn okio.**
    -keep class okio.**{*;}
    
    -dontwarn com.squareup.okhttp.**
    -dontwarn javax.annotation.**
    -dontwarn com.android.volley.toolbox.**
    -dontwarn com.facebook.infer.**
    -keep class com.squareup.okhttp.** { *;}
    -keep interface com.squareup.okhttp.** { *; }
    
    ######################### Retrofit混淆配置##############################
    -dontnote retrofit2.Platform
    -dontnote retrofit2.Platform$IOS$MainThreadExecutor
    -dontwarn retrofit2.Platform$Java8
    -keepattributes Signature
    -keepattributes Exceptions
    
    #########################友盟的混淆配置################
    
    -keep class com.umeng.** {*;}
    -keepclassmembers class * {
       public <init> (org.json.JSONObject);
    }
    
    -keepclassmembers class * {
       public <init>(org.json.JSONObject);
    }
    -keep public class [com.uutus.huaxia.geography].R$*{
    public static final int *;
    }
    -keepclassmembers enum * {
        public static **[] values();
        public static ** valueOf(java.lang.String);
    }
    -keep public class [com.uutus.huaxia.geography].R$*{
    public static final int *;
    }
    
    ###############加密混淆###########
    ########腾讯X5内核浏览器中的的代码不被混淆#####
    -keep class com.tencent.** {*;}
    ########RSA中的代码不被混淆
    -keep class Decoder.** {*;}
    -keep class org.bouncycastle.** {*;}
    
    ################Glide加载图片添加混淆
    -keep public class * implements com.bumptech.glide.module.GlideModule
    -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
      **[] $VALUES;
      public *;
    }
    ######## glide类库
    ########  com.github.bumptech.glide:okhttp3-integration:1.4.0@aar中的代码不被混淆
    ########  jp.wasabeef:glide-transformations:2.0.1 不被混淆
    -keep class com.bumptech.** {*;}
    -keep class jp.wasabeef.glide.** {*;}
    ##########  保证类库Image 中导入的jar包不被混淆
    -keep class com.davemorrissey.** {*;}
    -keep class com.filippudak.** {*;}
    -keep class am.util.** {*;}
    -keep class com.blankj.** {*;}
    
    #########################################################第三方的配置结束#######################
    
    #==================gson && protobuf==========================
    -dontwarn com.google.**
    -keep class com.google.gson.** {*;}
    -keep class com.google.protobuf.** {*;}
    
    #ProGuard 混淆
    
    # keep住源文件以及行号
    -keepattributes SourceFile,LineNumberTable
    
    
    -keepattributes Signature
    -dontwarn com.jcraft.jzlib.**
    -keep class com.jcraft.jzlib.**  { *;}
    
    -dontwarn sun.misc.**
    -keep class sun.misc.** { *;}
    
    -dontwarn com.alibaba.fastjson.**
    -keep class com.alibaba.fastjson.** { *;}
    
    -dontwarn sun.security.**
    -keep class sun.security.** { *; }
    
    -dontwarn com.google.**
    -keep class com.google.** { *;}
    
    -dontwarn com.avos.**
    -keep class com.avos.** { *;}
    
    -keep public class android.net.http.SslError
    -keep public class android.webkit.WebViewClient
    
    -dontwarn android.webkit.WebView
    -dontwarn android.net.http.SslEr
    -dontwarn android.webkit.WebViewClient
    
    -dontwarn android.support.**
    
    -dontwarn org.apache.**
    -keep class org.apache.** { *;}
    
    -dontwarn org.jivesoftware.smack.**
    -keep class org.jivesoftware.smack.** { *;}
    
    -dontwarn com.loopj.**
    -keep class com.loopj.** { *;}
    
    
    -dontwarn org.xbill.**
    -keep class org.xbill.** { *;}
    
    -keepattributes *Annotation*
    
    
    # Gson
    -keep class com.example.testing.retrofitdemo.bean.**{*;} # 自定义数据模型的bean目录
    #gson
    #如果用用到Gson解析包的,直接添加下面这几行就能成功混淆,不然会报错。
    
    ##---------------Begin: proguard configuration for Gson  ----------
    # Gson uses generic type information stored in a class file when working with fields. Proguard
    # removes such information by default, so configure it to keep all of it.
    -keepattributes Signature
    
    # For using GSON @Expose annotation
    -keepattributes *Annotation*
    
    # Gson specific classes
    -dontwarn sun.misc.**
    #-keep class com.google.gson.stream.** { *; }
    
    # Prevent proguard from stripping interface information from TypeAdapterFactory,
    # JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
    -keep class * implements com.google.gson.TypeAdapterFactory
    -keep class * implements com.google.gson.JsonSerializer
    -keep class * implements com.google.gson.JsonDeserializer
    # Application classes that will be serialized/deserialized over Gson
    
    
    ##---------------End: proguard configuration for Gson  ----------
    
    #基础混淆添加配置
    -keepclassmembers class **.R$* {
        public static <fields>;
        public static final int *;
    }
    -keepclassmembers class * extends android.app.Activity { # 保持自定义控件类不被混淆
        public void *(android.view.View);
    }
    

    Ps: 这个也是我找的其实蛮全的,基本上常用的像:Gosn fastJson、Okhttp,以及一些初始化配置这里都用。
    但是需要注意的是:

    关于实体类和一些自己常用的混淆命令

    我们知道实体类是不能混淆的,并且每个项目的实体类都不一样的,比如:你的实体类完整包名字:

    com.xxx.xxx.bean
    -keep class com.xxx.xxx.bean.**{*;}
    表示当前路径下全部文件都保持不被混淆

    还有一个常用命令是:
    -dontwarn

    很多时候你会发现有些不能混淆的类你加了keep配置但是打包还是报错,编译不通过,这个时候你不妨用上这个命令比如:
    -keep class com.jianke.ui.{*;}
    -dontwarn com.jianke.ui.

    这个表示不对当前包名下类警告,让编译通过

    还有一些
    -libraryjars class_path 不混淆指定的jar库(android 项目中一般不混淆引入的第三方类库)
    等,具体可以看:
    最全面的混淆规则

    展开全文
  •  * 混淆文件的位置 * proguard-android.txt 默认的混淆文件(SDK目录/tools/proguard/) * proguard-rules.pro 让我们自行添加混淆规则文件(相应module的目录下) */ proguardFiles getDefaultProguardFile('...
    /**
     * 混淆文件的位置
    * proguard-android.txt 默认的混淆文件(SDK目录/tools/proguard/)
    * proguard-rules.pro 让我们自行添加混淆规则文件(相应module的目录下)
    */

    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'


    proguard-android.txt 是谷歌默认的混淆文件   用于参考

    proguard-rules.pro  是自定义混淆的规则文件





    展开全文
  • 之前对项目混淆一直了解不是很透,趁着打包正式项目的时候有特意的去了解了一番,做些记录,备忘!-optimizationpasses 5-dontusemixedcaseclassnames-dontskipnonpubliclibraryclasses-dontpreverify-verbose-...
  • 混淆配置

    千次阅读 2019-02-28 11:14:20
    1.创建一个混淆配置文件,命名为proguard-rules.pro(项目创建时可能已经包含) -optimizationpasses 5 -dontusemixedcaseclassnames -dontpreverify -verbose -optimizations !code/simplification/arithmetic,!...
  • 已解决 Android Studio 混淆配置后 应该输出的mapping 文件 seed 文件 unused 文件
  • 压缩包根目录下有我修改的安卓JAVA项目混淆配置文件,proguard自带的混淆配置文件在SAMPLE目录下,但混淆后运行经常报错,因此根据查阅网上资料做了修改,测试通过。可以作为个性化混淆配置的基础版
  • 压缩包根目录下有我修改的安卓JAVA项目混淆配置文件,proguard自带的混淆配置文件在SAMPLE目录下,但混淆后运行经常报错,因此根据查阅网上资料做了修改,测试通过。可以作为个性化混淆配置的基础版
  • 应用的混淆配置文件

    2017-06-27 14:23:49
    -keepclassmembers class fqcn.of.javascript....#webView js调用不混淆,否则取不到数据 -keepclassmembers class com.zyp.ui.WebActivity$* { ; } #shrink,测试后发现会将一些无效代码给移除,即没有被显示调用
  • Android studio 代码混淆配置 release { minifyEnabled true //开启混淆配置 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules....//混淆配置文件 -optimizationpasses 5 -do
  • #打开project.properties文件中的proguard.config。 -optimizationpasses 5 # 指定代码的压缩级别 -dontusemixedcaseclassnames # ...
  • -optimizationpasses 5 #混淆压缩比率 -dontusemixedcaseclassnames # 是否使用大小写混合 -verbose # 混淆时是否记录日志 -dontpreverify # 混淆时是否做预校验 -optimizations !code/simplification/...
  • #default #指定压缩级别 -optimizationpasses 5 -dontusemixedcaseclassnames #不跳过非公共的库的类成员 -...#混淆时采用的算法 -optimizations !code/simplification/arithmetic,!field/*,!cla
  • 下载混淆配置文件,复制到您当前项目的根目录下。混淆的过程如下:  1、下载混淆文件文件名为proguard.cfg;  2、把下载下来的文件拷贝到您工程的根目录下;  3、在default.properties文件中填写如下代码: ...
  • 刚好程序报错中的com.b.a.a.a 就是指的idea/libraries中的一个包中的类,即为com.loopj.android.http.AsyncHttpClient,不知道怎么在混淆配置文件中忽略这些包的混淆。最后通过配置,发现这些包还是被混淆了,不知道...
  • 混淆studio 使用Proguard进行混淆,其是一个压缩、优化和混淆java字节码文件的一个工具。功能:Shrinking(压缩)、Optimization(优化)、Obfuscattion(混淆)、Preverification(预校验)四个操作。优点:1.删除项目无用...
  • 如何写一个混淆配置文件

    千次阅读 2016-11-30 20:31:16
    一、混淆apk的必要性 当我们的app开发完毕上传各大应用市场的时候如果我们不进行apk的混淆就会导致app的安全性大大的降低,你也不想自己幸幸苦苦做完的项目就这么轻易的被别人窃取了。混淆虽然不能完全防止别人反...
  • 在打包进行 Android studio 中混淆的时候 有时候会遇到(尤其是初次混淆时) 就会遇到 在不进行混淆的时候 一切正常 但是在混淆之后 就无数据了 下面 我就给大家 介绍一下 混淆文件配置 # Add project specific ...
  • android 混淆配置

    2017-08-08 11:44:17
    android 混淆配置一般混淆:-optimizationpasses 5#包明不混合大小写 -dontusemixedcaseclassnames#不去忽略非公共的库类 -dontskipnonpubliclibraryclasses #优化 不优化输入的类文件 -dontoptimize #预校验 -...
  • Android Studio如何混淆 为什么要混淆 了解安卓程序编译的会知道 其实我们的apk并不是很安全,从apk从可以解包出,步骤: 将apk文件改成zip结尾 然后解压zip 然后就会发现里面有一个classes.dex dex2jar 这个工具将...
  • Android混淆配置

    千次阅读 2018-05-16 14:52:29
    项目到了快发布的时候,我们必然会对项目打包进行混淆,这样做可以提高别人对我们项目反编译的难度,其实...\sdk\tools\proguard\proguard-android.txt 下提供了默认的混淆配置,我们打开这个文件查看,发现开头有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,874
精华内容 749
关键字:

文件混淆配置