Android- 多渠道打包配置;你了解吗?,移动互联网 app 开发入门
那么问题来了,我当前的构建类型怎么对应到其他的 module 去呢?比如你的 app 要依赖 sdk module 的 debug 环境,那么你可以这么做:
configuration:目标 module 的<buildType>,比如你 sdk 中<buildType>的 debug 构建类型
debugCompile project(path: ':sdk', configuration: 'debug')
综合示例
1、先看 app 这边的 build.gradle 配置:
apply plugin: 'com.android.application'
android {buildTypes {release {minifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}debug {applicationIdSuffix '.debug'minifyEnabled false}
// 自定义的构建类型,名字随便取,一定要有意义 raedebug {initWith debugapplicationIdSuffix '.raedebug'}}}
dependencies {// 生成环境依赖 releaseCompile project(path: ':sdk', configuration: 'release')// 测试环境依赖 debugCompile project(path: ':sdk', configuration: 'debug')// 自定义构建类型依赖 raedebugCompile project(path: ':sdk', configuration: 'uutest')}
2、sdk module 的 build.gradle 配置:
apply plugin: 'com.android.library'
android {buildTypes {debug {debuggable trueminifyEnabled false}release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}
// 注意这里,跟第一点的 raedebugCompile project 的 configuration 要匹配。uutest {initWith debug}}}
多渠道打包 productFlavors
先看看 build.gradle 配置你就懂了
android{
// 渠道包定义,默认定义的名称就是渠道名称 productFlavors {
dev {} // 测试 baidu {} // 百度手机助手 yinyongbao {} // 应用宝 m360 {} // 360 手机助手 pp {} // PP 助手 anzhi{} // 安智市场 xiaomi {} // 小米商店 letv {} // 乐视商店 huawei {} // 华为商店 lenovomm {} // 联想乐商店 other {} // 其他市场 official{} // 官方版本
}
// 批量渠道包值替换 productFlavors.all { flavor ->// 友盟、极光推送渠道包, UMENG_CHANNEL 是根据你 AndroidManifest.xml 来配置的,请看下面。flavor.manifestPlaceholders = [UMENG_CHANNEL: name, JPUSH_CHANNEL: name]}}
AndroidManifest.xml 配置:
<?xml version="1.0" encoding="utf-8"?><manifest x
mlns:android="http://schemas.android.com/apk/res/android"package="com.rae.demo">
<applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme">
<!--变量采用{UMENG_APPKEY}"/>
<meta-dataandroid:name="UMENG_CHANNEL"android:value="${UMENG_CHANNEL}"/>
<activityandroid:name=".DemoActivity"android:label="${变量随变换}"/>
</application>
</manifest>
sync gradle 之后看看 gradle projects 面板列表就多出了好到渠道的任务了,Build Variants 面板也相对应多了这些构建类型。
APK 输出配置
在结合到多渠道打包后,运营的那边希望我们给的渠道包是这种格式的 app-{版本号}-{渠道名称}.apk,那我们来看看怎么来满足这个多渠道打包输出 apk 文件名修改的。
android{
// 输出文件配置 applicationVariants.all { variant ->variant.outputs.each { output ->def outputFile = output.outputFileif (outputFile != null && outputFile.name.endsWith('.apk')) {def dirName = outputFile.parent // 输出文件夹所在的位置
// 文件名修改 def fileName = "app-{defaultConfig.versionName}-${variant.flavorName}.apk"
// 比如不想这么麻烦,直接在后面加上版本号也行:// def fileName = outputFile.name.replace(".apk", "-${defaultConfig.versionName}.apk")
output.outputFile = new File(dirName, fileName)
评论