Android 多渠道打包 gradle部分,如何处理代码混淆问题

来源:互联网 发布:文件收发管理系统 源码 编辑:程序博客网 时间:2024/05/20 23:29

1.Android 多渠道打包简介,看注释

apply plugin: 'com.android.application'android {    compileSdkVersion 24    buildToolsVersion "24.0.3"    //配置签名文件    signingConfigs {        debug {            // No debug config        }        config {            storeFile file("../appkey/Invest2.jks")   //其中../表示项目名那一层文件夹   后面是签名文件            storePassword "capiadmin"            keyAlias "capi"            keyPassword "capiadmin"        }    }    defaultConfig {        applicationId "com.liu.ijkdemo"        minSdkVersion 16        targetSdkVersion 24        versionCode 1        versionName "1.0"        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"        signingConfig signingConfigs.config //申明配置签名文件        multiDexEnabled true    }    buildTypes {        debug {            signingConfig signingConfigs.config        }        release {            buildConfigField("boolean", "LOG_DEBUG", "false")            minifyEnabled true//代码混淆            zipAlignEnabled true            //移除无用的resource文件            shrinkResources true            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'            signingConfig signingConfigs.config            //批量打包            applicationVariants.all { variant ->                variant.outputs.each { output ->                    def outputFile = output.outputFile                    if (outputFile != null && outputFile.name.endsWith('.apk')) {                        //输出apk名称为:渠道名_版本名_时间.apk                        def fileName = "${variant.productFlavors[0].name}_v${defaultConfig.versionName}_${releaseTime()}.apk"                        output.outputFile = new File(outputFile.parent, fileName)                        output.outputFile = new File(outputFile.parent, fileName)                    }                }            }        }    }    sourceSets {        main {            jniLibs.srcDirs = ['libs']        }    }    //配置多渠道打包,打包后包名开始为ijkdemo_relase,ijkdemo_debug    productFlavors {        ijkdemo_relase {            applicationId "com.liu.ijkdemo.relase"            resValue("string", "app_name", "IJKPlayerDemo")            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "ijk_relase", APP_NAME: "IJKPlayerDemo"]        }        ijkdemo_debug {            applicationId "com.liu.ijkdemo.debug"            resValue("string", "app_name", "IJKPlayerDemo测试版")            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "ijk_debug", APP_NAME: "IJKPlayerDemo测试版"]        }    }}//打包时间格式def releaseTime() {    return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))}dependencies {    compile fileTree(include: ['*.jar'], dir: 'libs')    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {        exclude group: 'com.android.support', module: 'support-annotations'    })    compile 'com.android.support:appcompat-v7:24.2.1'    testCompile 'junit:junit:4.12'    compile files('libs/txrtmpsdk.jar')    compile files('libs/universal-image-loader-1.9.4.jar')    compile 'com.android.support:support-v4:24.2.1'    // ijk视频播放    compile 'tv.danmaku.ijk.media:ijkplayer-java:0.7.4'    compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.7.4'    //   # Other ABIs: optional    compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.7.4'    compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.7.4'    //  # ExoPlayer as IMediaPlayer: optional, experimental    compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.7.4'}


2.在上述代码中你可以看到:minifyEnabled:true时表示开启了google默认的代码混淆。【我反编译过几个app:如微信,去哪儿都是代码混淆过】

①代码混淆规则(即:不混淆部分)在什么地方配置?答案:写入proguard-rules.pro文件


②代码混淆规则该如何写?

不混淆部分通常包括:导入的三方包,依赖文件,以及service,contentprovider部分【大部分需要混淆保持的三方包都会注明需要keep的部分】

③代码混淆后,反编译会看到很多类变成了a,aa,b,c,d,e之类的类名了,不再是原类名

0 0
原创粉丝点击