介绍:
Google推出了新的开发工具,AndroidStudio,并且采用了新的工程构建工具,Gradle构建。在每个项目中,都会有一个build.gradle文件来构建。这里,主要来讲打包方面常见的操作。默认,会产生2个版本,debug版本和release版本。
需求:
打包一个apk十分简单,需要的就是一个密钥。点击build->Generate Signed APK 就会通过图形化界面进行傻瓜式操作了,但Android实际开发中,都需要放到多个应用市场,为了进行统计,会对不同市场上的apk进行区别,友盟也可以统计到不同市场的用户数据,都是需要这个标识,即渠道号。要实现多渠道打包,就需要了解一下gradle中关于打包方面的一些东西了。
了解gradle打包的基本知识:
a:签名信息的配置
signingConfigs {config {keyAlias 'xxx'keyPassword 'xxx'storeFile file('/Users/air/develop/xxx')storePassword 'xxx'}}
buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'signingConfig signingConfigs.config}}
如何实现多渠道的打包
为了方便数据的统计,友盟是常用的第三方sdk,需要我们在 AndroidManifest.xml中配置如下标签。
<meta-dataandroid:name="CHANNEL"android:value="channel"/>
productFlavors {baidu {}wandoujia {}}
//将value中具体值改为x,在构建的时候改变<meta-dataandroid:name="CHANNEL"android:value="${x}"/>productFlavors.all {flavor -> flavor.manifestPlaceholders = [x: name]}
自定义apk的输出路径和名称
默认的输出路径太麻烦,名称为module名+渠道号+版本信息三部分组成,如:app-baidu-debug.apk。
下面的代码可以完成自定义。
def outputDir = "/Users/air/Desktop/myapk"def startName = "start"android{……}
android{……android.applicationVariants.all { variant ->def file = variant.outputs[0].outputFiledef fileParent = new File(outputDir)// String name = file.name// String[] arr = name.split("-")variant.outputs[0].outputFile =new File(fileParent,startName +"-"+name+"-" + defaultConfig.versionName + ".apk")}}
贴一份gradle文件
def outputDir = "/Users/air/Desktop/myapk"def startName = "start"android {signingConfigs {config {keyAlias 'xxx'keyPassword 'xxx'storeFile file('/Users/air/develop/xxx')storePassword 'xxx'}}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'signingConfig signingConfigs.config}}productFlavors {baidu {}wandoujia {}}productFlavors.all {flavor -> flavor.manifestPlaceholders = [x: name]}android.applicationVariants.all { variant ->def file = variant.outputs[0].outputFiledef fileParent = new File(outputDir)// String name = file.name// String[] arr = name.split("-")variant.outputs[0].outputFile =new File(fileParent,startName +"_"+name+"_" + defaultConfig.versionName + ".apk")}}
如何更快的打包
虽然完成了多渠道的打包,上面的每打一个渠道,都会进行一次构建,如果就几十个渠道包的时候,半小时的打包是免不了了。能不能一次构建,就可以实现产生多个不同标识的apk的,答案是可以的,具体百度一下:美团的打包之旅。里面完全讲述了如何更快的打包,需要python来实现。亲测,这个方案非常方便。一次操作,长期使用。这里就不多说了。
947

被折叠的 条评论
为什么被折叠?



