关于多版本多环境的内容之前写了一篇博客可以参考:https://blog.csdn.net/jhl122/article/details/74540740
1,多版本需要注意的就是签名信息的配置:
signingConfigs {
release {
storeFile file('xxx.jks')//keystore的路径
storePassword "xxxx"
keyAlias "xx"
keyPassword "xxxx"
}
debug {
}
}
2,多环境就是用到productFlavors,主要是实现不同环境下的应用可以同时在一个手机上运行,这时候就需要有不同的应用名称或者图标。
productFlavors {
//meetyun开发环境
meetyun {
buildConfigField "int", "ENV_TYPE", "1"
applicationId project.ext.applicationIdDebug
manifestPlaceholders = [
app_name: project.ext.appNameDebug
]
}
//demo环境
demo {
buildConfigField "int", "ENV_TYPE", "2"
applicationId project.ext.applicationIdCheck
manifestPlaceholders = [
app_name: project.ext.appNameCheck
]
}
//生产环境
// product {
// buildConfigField "int", "ENV_TYPE", "3"
// applicationId project.ext.applicationId
// manifestPlaceholders = [
// app_name: project.ext.appNameProduct
// ]
// }
}
并且需要在manifest文件中使用占位符{app_name}
<application
tools:replace="label"
android:name="xxx"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="${app_name}"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
需要注意的是在编译的时候如果提示label的名称重复就需要加上tools:replace="label"参数。
不同的环境gradle都会根据productFlavors信息动态的生成BuildConfig文件:
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "xxx";
public static final String BUILD_TYPE = "debug";
public static final String FLAVOR = "demo";
public static final int VERSION_CODE = 3;
public static final String VERSION_NAME = "00.00.03";
// Fields from product flavor: demo
public static final int ENV_TYPE = 2;
}
根据需求设置不同环境的类型:
public class EnvType {
public static final int MEETYUN = 1;//meetyun开发环境
public static final int DEMO = 2;//demo测试环境
public static final int PRODUCT =3;//正式环境
}
其中ENV_TYPE就是我们在gradle.build中设置好的数值,我们可以根据这个数值来判断不同的环境,然后设置相对应的环境地址
public static final String HTTP_MAIN = setChannel();
public static String setChannel() {
int envType = BuildConfig.ENV_TYPE;
switch (envType) {
case EnvType.MEETYUN:
return "http://xx";
case EnvType.DEMO:
return "http://xxxx";
default:
return "http://xxxx";
}
}
此时基本上所有的配置都差不多完成了,这时候需要执行gradle命令,两种方法:第一种直接在Terminal中写命令“gradlew assemble”敲击回车,第二种是在as右侧Gradle projects中点击assemble任务执行。命令执行完毕之后会发现在outputs文件夹中已经打好包了
3,多渠道打包就是为了统计不同的应用市场即渠道的下载信息,所以一般来说就包括两方面,一个是不同渠道信息放入到apk文件中,第二方面就是将这个渠道信息返回给服务器用于统计,所以一般来说多渠道的打包就是针对第一种情况。我使用的多渠道打包工具是美团的walle,特点就是快。
具体的操作就不细说了github上面说的很详细,就是注意一点这个多渠道文件channel是自己创建添加的,不是它自动生成的。
channelFile = new File("${project.getProjectDir()}/channel")