由于国内Android市场众多渠道,为了统计每个渠道的下载及其它数据统计,就需要我们针对每个渠道单独打包,如果让你打几十个市场的包岂不烦死了,不过有了Gradle,就可以很方便的一键进行多渠道打包。

百度多渠道打包

此文将以项目中使用的百度统计为例,进行gradle配置多渠道打包讲解。使用其他友商进行多渠道打包同理。废话不多说,马上进入正题。

  • androidManifest中有这么一段代码,其中百度统计给的备注很明朗了,name字段无需更改,不同的渠道只要修改value即可。

<!-- 百度统计 -->
<!-- 渠道商编号,其中 name 请不要改,将 value 修改为渠道商编号。渠道名称请到 mtj.baidu.com 的渠道管理中修改 -->
<meta-data
    android:name="BaiduMobAd_CHANNEL"
    android:value="CHANNEL_ID" />
  • 在AndroidManifest中配置PlaceHolder,将value的值修改为${BAIDU_CHANNEL_VALUE},当然BAIDU_CAHNNEL_VALUE只是一名字而已,你也可以换成你喜欢的名字。目的就是要让我们的这个value在进行多渠道打包的时候自动变更。

<!-- 百度统计 -->
<!-- 渠道商编号,其中 name 请不要改,将 value 修改为渠道商编号。渠道名称请到 mtj.baidu.com 的渠道管理中修改 -->
<meta-data
    android:name="BaiduMobAd_CHANNEL"
    android:value="CHANNEL_ID" />





  • 在项目gradle中配置各种渠道号,这里"android"、"android_sougou"等等就是你的渠道号,各自要求的渠道标志不一样,可以根据自己的项目进行命名。

android {
	// 你的其他gradle配置信息省略...

	// 配置所有的渠道名,如需增加其他渠道,则以类似的形式在productFlavors里面添加对应的即可
	productFlavors {
    	    android {
                manifestPlaceholders = [BAIDU_CHANNEL_VALUE: "android"]
    	    }
            android_sougou {
        	manifestPlaceholders = [BAIDU_CHANNEL_VALUE: "android_sougou"]
    	    }
    	    android_huawei {
        	manifestPlaceholders = [BAIDU_CHANNEL_VALUE: "android_huawei"]
    	    }
    	    android_pp {
        	manifestPlaceholders = [BAIDU_CHANNEL_VALUE: "android_pp"]
    	    }
	}
    }





  • 在项目gradle中配置在打包时的一些信息,例如显示log日志、还可以配置打包之后输出的apk文件名根据渠道命名、apk文件的输出位置等等。

android {
	// 其他的配置信息省略...
 
	buildTypes {
    	release {
        		minifyEnabled true
        		shrinkResources true
        		proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
        		// 不显示Log
        		buildConfigField "boolean", "LOG_DEBUG", "false"

        		minifyEnabled false

        		// 移除无用的resource文件
        		shrinkResources true
        		proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'

        		applicationVariants.all { variant ->
            		variant.outputs.each { output ->
                		def outputFile = output.outputFile
                		if (outputFile != null && outputFile.name.endsWith('.apk')) {
                    	// 输出apk名称为app_v3.0(45)_pp.apk
                    	def fileName = "app_v${defaultConfig.versionName}(${defaultConfig.versionCode})_${variant.productFlavors[0].name}.apk"
                    	output.outputFile = new File(outputFile.parent, fileName)
                		}
            		}
        		}
    	}
}



  • 利用AS的Generate Build进行多渠道打包

在gradle配置完成之后,那么就可以进行一键多渠道打包了,在AS中利用Generate build即可,打包开始之后,静默等待打包完成就行啦!具体操作如下截图:


图1 在AS的build菜单中选择generate signed apk

进入generate signed apk之后会让你输入密码,这个密码是本机用户管理你的签名文件密码用的,用于校验是否本人操作。如果你还没设置过的话,AS会提醒让你完成该密码设置的。


图2 输入master password

进入之后,需要你填入你这个apk的签名文件和密码,相信这个应该不用详细讲解了吧,按要求填入然后点击next按钮即可。


图3 填入签名文件和密码

完成签名文件输入点击下一步之后,最重要的页面来了。这里就是选择你要打包的类型,两个选择:release/debug,release和debug有些区别,release模式会比debug模式严格一些。然后flavors这里显示的就是你在gradle中配置的所有渠道啦。如果需要全部打包,就全选即可。如果个别打包的,就只要选中其中一个或多个打包就行。最后点击finish,静静等待打包完成吧!!打包的速度取决于你的机子性能和你项目的一些其他依赖等等。


图4 选择渠道打包