第一招:使用buildTypes
buildTypes {
release {
minifyEnabled false
debuggable false
jniDebuggable false
'proguard-rules.pro'
}
debug {
debuggable true
jniDebuggable true
versionNameSuffix '.2016041601'
}
}
- 1.在buildType中可以默认有两种模式,debug和release模式,当然你自己还可以再添加其他模式。
2.下面是buildType中的常用属性
minifyEnabled 混淆处理 shrinkResources 去除无用资源 signingConfig 签名 proguardFiles 混淆配置 applicationIdSuffix 增加APP ID的后缀 versionNameSuffix 增加versionName的后缀 debuggable 是否保留调试信息 jniDebuggable 是否保留JNI调试信息
3.还有的属性可以在属性栏里的Build–>Edit Build Types中查看
第二招:使用productFlavors
productFlavors {
first {
applicationIdSuffix ".first"
// applicationId 'com.busterace.multichannel.first'
buildConfigField "boolean", "AUTO_UPDATES", "false"
manifestPlaceholders = [META_DATA_1 :"first_app",
META_DATA_2 :"first_app"]
}
second {
applicationId 'com.busterace.multichannel.second'
buildConfigField "boolean", "AUTO_UPDATES", "false"
manifestPlaceholders = [META_DATA_1 :"second_app",
META_DATA_2 :"second_app"]
}
third {
applicationId 'com.busterace.multichannel'
buildConfigField "boolean", "AUTO_UPDATES", "true"
manifestPlaceholders = [META_DATA_1 :"third_app",
META_DATA_2 :"third_app"]
signingConfig signingConfigs.release
}
}
- 1.在属性栏Build中–>Edit Product Flavor 可以添加多种打包渠道,里面也可以配置一些属性。
- 2.从上图可以看出来defaultConfig也是Flavor中的一个,打包时会优先使用你选择的Flavor配置,如果没有再使用defaultConfig中的配置。
- 3.注意:build type与product flavor 是多对多的关系,也就是说能够打六个不同类型的包,分别是
- first_debug.apk
- second_debug.apk
- third_debug.apk
- first_release.apk
- second_release.apk
- third_release.apk
- 4.在java代码中使用设置的属性:当我们进行build工程的时候,android studio会自动生成BuildConfig.java文件,这样当我们需要使用时就非常方便,下面是使用代码
applicationId.setText("application_id:" + BuildConfig.APPLICATION_ID);
第三招:使用manifest资源占位符
在AndroidManifest中有些属性需要修改,比如友盟的value,测试的与正式的是不一样的,这时候就可以使用资源占位符来替换,注意manifestPlaceholders的写法,尤其是多个的写法!
AndroidManifest文件中
<meta-data android:name="meta_data_1" android:value="${META_DATA_1}"/>
<meta-data android:name="meta_data_2" android:value="${META_DATA_2}"/>
app.gradle文件中的product flavor中来替换资源
first {
manifestPlaceholders = [META_DATA_1 :"first_app",
META_DATA_2 :"first_app"]
}
第四招:使用buildConfigField
- 在第二招里面我们已经可以配置一些属性了,但是有时候还是不能满足我们,不过还是有办法的,我们可以在flavor中使用buildConfigField自己创建想要的属性,注意:里面的三个值缺一不可
first {
buildConfigField "boolean", "AUTO_UPDATES", "false"
}
- 使用的方法和第二招中一样,都是在BuildConfig.java中会自动生成字段,去调用就好
第五招(大招):使用资源覆盖
- 有些资源图片我们也想做到替换怎么办,使用资源覆盖,在src文件夹下面建立对应flavor的资源文件就能实现该效果。
这里面我替换了图片和部分字符串资源
经过上面5个招数大部分要替换的都可以做到了,合理使用上面5个招数,让打包更加方便~
附录:
1.Build Variants
- 当我们使用点击Run App时
- 我们可能不知道下载到手机上的是哪个渠道打出来的包,或者要选择自己想要的渠道去调试,可以在属性栏中Build–>Select Build Variants
- 在这里就可以选择想要的渠道了
2.flavor的那些事
- 1.如果在Build Flavors的界面中对某个flavor进行重命名,那么在app.gradle中之前写的一些属性就会因为studio自动生成flavor而覆盖掉丢失,所以想改名字最好在gradle中修改!
- 2.当选择了build variant,对应的flavor的图标也会有相应的变化。看下图
3.签名
- 如果想要将release版本的apk通过Run app的方式直接下载到手机上需要配置下签名文件
代码方式
signingConfigs {
release {
storeFile file('E:/AndroidStudioProjects/MultiChannel/releaseKey.jks')
keyAlias 'release'
keyPassword '123456'
storePassword '123456'
}
}
下面是flavor的代码
third {
signingConfig signingConfigs.release
}
也可以直接在Project Structure中设置
附上demo链接:http://download.youkuaiyun.com/detail/busterace/9493237