android studio 使用gradle批量打渠道包(示例,出错代码)
2017-05-25 11:29
253 查看
转自:http://www.apihome.cn/view-detail-80769.html
在没有批量打包工具之前,每次项目上线或者更新,都是打渠道包打到左右手残废。在AS中使用了强大的gradle 并支持批量打包,解放我们的双手和双脚。
我这里以友盟为例
选择一个存放apk描述文件的路径
选择release,全选下面的渠道名,点击finish
泡一杯茶,等待打包~~~
在没有批量打包工具之前,每次项目上线或者更新,都是打渠道包打到左右手残废。在AS中使用了强大的gradle 并支持批量打包,解放我们的双手和双脚。
我这里以友盟为例
1. Mainfest 文件中添加一个键值对,这里的value 我定义为
“UMENG_CHANNEL_VALUE”(当然实际应用中可以根据自己的需要命名),后面打包的时候会对这个值进行替换。
<meta-data android:value="UMENG_CHANNEL_VALUE" android:name="UMENG_CHANNEL"/>
2. 打开app下的build.gradle(你的model下的build.gradle)进行配置
apply plugin: 'com.android.application' android { compileSdkVersion 21 buildToolsVersion "21.1.2" defaultConfig { applicationId "com.xx.xx" //包名 minSdkVersion 16 targetSdkVersion 21 versionCode 1 //不解释 versionName "1.0.0.0" //不解释 } //这里填写你要打的渠道名称,格式如下 productFlavors { xiaomi {} lianxiang {} huawei {} } //这里主要是根据我们在manifest文件中定义的键值对 //UMENG_CHANNEL - UMENG_CHANNEL_VALUE 的value 进行替换 android.applicationVariants.all { variant -> variant.outputs.each { output -> output.processManifest.doLast { //载mainfest文件 def mFile= output.processManifest.manifestOutputFile //这是一个循环体,用我们在上面定义的productFlavors中的各种渠道名来替换 //UMENG_CHANNEL_VALUE(每个包中只有渠道名称,不同,所以只要处理这里) def data= mFile.getText('UTF-8').replaceAll("UMENG_CHANNEL_VALUE", "${variant.productFlavors[0].name}") //写入Mainfest文件 manifest.write(data, 'UTF-8') } //定义一个文件 def file = output.outputFile //定义存储apk的位置和文件名,这里文件名格式定义为 [项目名称_渠道名称_版本号] output.outputFile = new File("E:\\My\\apkV1.0.0", "projectName_" + "${variant.productFlavors[0].name}" + "_V1.0.0.apk") } } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug{ minifyEnabled false buildConfigField "boolean", "LOG_DEBUG", "true" } } // 移除lint检查的错误 lintOptions { abortOnError true } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:21.0.3' compile files('libs/umeng-update-v2.6.0.1.jar') }
3. 开始打包
点击build 菜单的generate sign apk选项,进入打包界面选择一个存放apk描述文件的路径
选择release,全选下面的渠道名,点击finish
泡一杯茶,等待打包~~~
相关文章推荐
- Android Volley入门到精通:使用Volley加载网络图片(示例,出错代码)
- Android Volley入门到精通:使用Volley加载网络图片(示例,出错代码)
- Android Volley入门到精通:使用Volley加载网络图片(示例,出错代码)
- android studio 使用gradle批量打渠道包
- 演示Session对象使用 范例(示例代码下载)
- 代码示例:在多个UpdatePannel使用AJAX.NET TIMER控件
- Control Study->AdRotator广告控件显示自定义配置文件中广告以及与DataGrid控件结合使用显示图片(示例代码下载)
- Asp.net 2.0 自定义控件开发专题[详细探讨页面状态(视图状态和控件状态)机制及其使用场景](示例代码下载)
- 演示Session对象使用 范例(示例代码下载)
- Asp.net 2.0 自定义控件开发专题[详细探讨页面状态(视图状态和控件状态)机制及其使用场景](示例代码下载)
- 使用代码调用ffmpeg示例
- Control Study->AdRotator广告控件显示自定义配置文件中广告以及与DataGrid控件结合使用显示图片(示例代码下载)
- Asp.net 2.0 自定义控件开发专题[详细探讨页面状态(视图状态和控件状态)机制及其使用场景](示例代码下载)
- 演示Session对象使用 范例(示例代码下载)
- Control Study->AdRotator广告控件显示自定义配置文件中广告以及与DataGrid控件结合使用显示图片(示例代码下载)
- 演示事件(Event)怎样使用以及怎样为用户控件添加一个事件(示例代码下载)
- 在DataList中使用PagedDataSource类分页示例(代码)
- 演示事件(Event)怎样使用以及怎样为用户控件添加一个事件(示例代码下载)
- 使用Python进行AES加密和解密的示例代码
- Asp.net 2.0 自定义控件开发专题[详细探讨页面状态(视图状态和控件状态)机制及其使用场景](示例代码下载)