android studio:多版本,多渠道编译

proguard混淆

一般release发布版本是需要启用混淆的,这样别人反编译之后就很难分析你的代码,而我们自己开发调试的时候是不需要混淆的,所以debug不启用混淆。对release启用混淆的配置如下:

android {

    buildTypes {

        release {

            minifyEnabled true//是否启动混淆

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

        }

  }

}

多版本,多渠道编译

构建变量= 构建类型 + product flavor

其中 构建类型一般是 debug与 release, 也可自定义构建类型

Product flavor有产品的味道的意思。

可为每个 product flavor 单独配置资源文件 layout 与 drawable.如果与main有冲突编译优先会取flavor.   value会与 main合并。 也可为 每个 falvor 单独创建目录java文件,在flavor下单独存在,各个flavor互不冲突,但不可与main有冲突,否则编译不过。

资源优先级(覆盖原则:从左到右 优先级逐步降低):

Buildtype -------->product falvor ------->main---->库中的资源


可在每个 product flavor中 自定义

versionCode

versionName

会覆盖 默认defaultConfig中的 versionCode与versionName


另外,可以在product flavor中 自定义资源变量,根据构建变量,编译出apk后,运行后就可以取出该资源变量的值。根据该变量值,华数apk 做出相应的UI调整,以及业务规则修改。 product flavor的buildConfigField属性也可以解决该问题,编译出apk后,可以获得静态变量 BuildConfig.channel的值

声明如下:

buildConfigField "String", "channel", name

例子如下:

flavorDimensions("channel", "region")

productFlavors {

//渠道名

        hangzhou { dimension "region"

            resValue("string", "region", "China")}

        zhejiang { dimension "region"

            resValue("string", "region", "chongqing")}


//版本名

        tcl {

            dimension "channel"

            versionCode 1234

            versionName "AAA-1234"

            resValue("string", "versionType", "TCL")

        } 

对于jar包多版本区别打包,实例如下:

tclCompile files('libs/***.jar')

chuangweiHCompile files('libs/***.jar')

chuangweiLCompile files('libs/***.jar')

changhongCompile files('libs/***.jar')

buildTypes

buildTypes {

  release {

        debuggable true    minifyEnabled true //启用Proguard    

        shrinkResources true //是否清理无用资源,依赖于minifyEnabled    

        zipAlignEnabled true //是否启用zipAlign压缩    

        signingConfig signingConfigs.release

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

  debug {

        debuggable true    

        minifyEnabled false  //不启用Proguard    

        shrinkResources false //是否清理无用资源,依赖于minifyEnabled    

        zipAlignEnabled false //是否启用zipAlign压缩    

        signingConfig signingConfigs.debug

  }

}

注意:

  1 .minifyEnabled 会对代码进行混淆和压缩,shrinkResources 会对比R文件对无用资源进行删除

  2.minifyEnabled 设置为true时shrinkResources 的设置才会生效

你可能感兴趣的:(android studio:多版本,多渠道编译)