Android 多渠道打包:gradle

适用于gradle打包,此种打包方式还是不够快,更快的方式还在研发中,敬请期待

定义Placeholder

在app的AndroidManifest.xml中定义一个Placeholder。
value中的“\” 用来将value中的数字转换为字符串(类似excel中“’”的功能)

<meta-data android:name="CHANNEL_ID" android:value="\ ${CHANNEL_ID_VALUE}"/> 代码中的获取方式

 public static String getChannnel(Context context) {
        String  channel = null;
        ApplicationInfo appInfo;
        try {
            appInfo = context.getPackageManager().getApplicationInfo(
                    context.getPackageName(), PackageManager.GET_META_DATA);
            channel=appInfo.metaData.getString("CHANNEL_ID");
        } catch (NameNotFoundException e) {
        }
        return channel;
 } ## 定义默认渠道 添加在app的build.gradle文件 android块中	 

defaultConfig {
	 //其他省略
   //默认是的渠道
   manifestPlaceholders = [CHANNEL_ID_VALUE: "test"]
} ## 定义多个渠道 * 方法一

	 productFlavors {
	 	baidu{
	 		 manifestPlaceholders = [CHANNEL_ID_VALUE: “baidu”]
	 	}
	 	google{
	 		 manifestPlaceholders = [CHANNEL_ID_VALUE: “google”]
	 	}
		qq{
			manifestPlaceholders = [CHANNEL_ID_VALUE: “qq”]
		}
	 } * 方法二

	 productFlavors {
	 	baidu{}
	 	google{}
	 	qq{}
	 }
	 productFlavors.all { flavor ->
	    flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
	}

格式化输出apk

 applicationVariants.all { variant ->
            variant.outputs.each { output ->
                def outputFile = output.outputFile
                if (outputFile != null && outputFile.name.endsWith('.apk')) {
                    def fileName = "${app_name}_v${defaultConfig.versionName}_${releaseVersionSvn())_${releaseTime()}_${variant.productFlavors[0].name}.apk"
                    output.outputFile = new File(outputFile.parent, fileName)
                }
            }
        } 以下提供一些APK文件命名的模板参数的相关获取方法