在项目开发的时候一般需要测试环境的安装包和正式环境的安装包。需要配置测试机地址和正式机地址。假如有不同的API,就会有更多的url地址需要配置。挨个手动打包就会非常麻烦,那就需要用到多渠道打包了。
就我自己了解在Android Studio之前可以通过Ant实现多渠道打包,过程要稍微复杂一点,但是可以实现的功能要更多一点。Android Studio的gradle多渠道打包更加便捷。下面就讲解Android Studio的多渠道打包
谷歌官方文档的配置:https://developer.android.com/studio/build/build-variants.html
1.在build.grade中构建不同的版本:
android{
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
applicationIdSuffix ".debug"
}
app1 {
applicationIdSuffix ".app1"
}
}
}
applicationIdSuffix:字段表示,在不改变你默认的程序ID(包名)的情况下,为其添加后缀。比如你的包名是com.cn.app
,但你想区分测试包和正式包的情况,这个时候将applicationIdSuffix设置为.debug,那么你的应用程序对应的包名就变成了com.cn.app.debug。
2.设置多渠道打包 productFlavors: 同样在build.gradle文件中添加
productFlavors {
app1{
//这里可以配置不同的包名
applicationId="com.cn"
applicationIdSuffix ".app1"
//这里是在 applicationId 中添加了一个后缀
manifestPlaceholders = [app_icon : "@mipmap/login_logo",
app_name : "app1"]
}
app2{
applicationId="com.ca"
applicationIdSuffix ".app2"
//这里是在 applicationId 中添加了一个后缀
manifestPlaceholders = [app_icon : "@mipmap/login_logo",
app_name : "app2"]
}
}
3:在src下面(与mian文件同目录)创建对应版本的文件夹:
需要更换Logo和应用名称在下面文件中添加
更换应用名称: 在value文件夹下的 appname.xml中设置
<resources>
<string name="app_name">app1</string>
</resources>
至此就可以一次性打出两个安装包,应用的名称logo与Id都已经更换。
4.如果需要更换应用的请求地址,在每个版本的文件夹现在新建一个java类,比如图中我在java目录下新建Constant.java
public class Contant {
public static String url = "www.baidu.com";
}
在其他代码中调用这个url就可以实现不同的服务器地址了。
Android Studio的多渠道打包还可以实现更多功能,后续会继续添加。不过现在的需求都已经满足了。
5.更换输出的文件名称。
android{
// 输出文件配置
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
def dirName = outputFile.parent // 输出文件夹所在的位置
// 文件名修改
def fileName = "app-${output.processResources.variantName}-${defaultConfig.versionName}-${variant.flavorName}.apk"
// 比如不想这么麻烦,直接在后面加上版本号也行:
// def fileName = outputFile.name.replace(".apk", "-${defaultConfig.versionName}.apk")
output.outputFile = new File(dirName, fileName)
}
}
}
}