Gradle-Android渠道编包及重命名

现在一个Android工程都会在不同的商店平台上发布产品,为了统计方便都会为每个平台分配一个渠道ID,因此我们需要根据不同的ID来打包针对不同平台的APK。无疑Gradle是一个很好的工具,具体Gradle是什么,请点击这里

使用新版本的gradle,解决这个问题很方便,使用manifestPlaceholders即可(详情请点击这里),但如果碰到老版本的gradle,是不支持的,所以我们需要另想办法。

下面是我弄的一个适用的办法:

  1 buildscript {
  2     repositories {
  3         mavenCentral()
  4     }
  5     dependencies {
  6         classpath ‘com.android.tools.build:gradle:0.6.+‘
  7     }
  8 }
  9
 10 apply plugin: ‘android‘
 11
 12 repositories {
 13     mavenCentral()
 14     maven { url ‘libraries‘ }
 15 }
 16
 17 android {
 18     compileSdkVersion 19
 19     buildToolsVersion "19"
 20
 21     defaultConfig {
 22         minSdkVersion 8
 23         targetSdkVersion 19
 24
 25         versionCode 1
 26         versionName "1.1.1"
 27         packageName "~~~~~~~"
 28     }
 29
 30     signingConfigs {
 31         release {
 32             storeFile file("~~~.keystore")
 33             storePassword "~~~"
 34             keyAlias "~~~.keystore"
 35             keyPassword "~~~"
 36         }
 37     }
 38
 39     productFlavors {
 40         渠道名 {
 41             signingConfig signingConfigs.release
 42             packageName "对应的包名"
 43         }
 44     }
 45
 46     buildTypes {
 47         release {
 48             runProguard true
 49             proguardFile "proguard.cfg"
 50         }
 51     }
 52
 53     sourceSets {
 54         main {
 55             manifest.srcFile ‘AndroidManifest.xml‘
 56             java.srcDirs = [‘src‘]
 57             resources.srcDirs = [‘src‘]
 58             aidl.srcDirs = [‘src‘]
 59             renderscript.srcDirs = [‘src‘]
 60             res.srcDirs = [‘res‘]
 61             assets.srcDirs = [‘assets‘]
 62         }
 63     }
 64
 65     //替换Manifest中的“CHANNEL_VALUE”为渠道号
 66     android.applicationVariants.all{ variant ->
 67         variant.processManifest.doLast{
 68             copy{
 69                 from("${buildDir}/manifests"){
 70                     include "${variant.dirName}/AndroidManifest.xml"
 71                 }
 72                 into("${buildDir}/manifests/$variant.name")
 73
 74                 filter{
 75                     String line -> line.replaceAll("CHANNEL_VALUE", "${variant.productFlavors[0].name}")
 76                 }
 77                 variant.processResources.manifestFile = file("${buildDir}/manifests/${variant.name}/${variant.dirName}/AndroidManifest.xml")
 78             }
 79         }
 80         //重命名
 81         renameOutputFile(variant)
 82     }
 83
 84 }
 85
 86 def releaseTime() {
 87     return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC"))
 88 }
 89
 90 def renameOutputFile(variant) {
 91     def apk = variant.outputFile;
 92     def newName = "";
 93
 94     // get data for apk renaming
 95     def packageName = variant.productFlavors[0].packageName
 96     def channelName = variant.productFlavors[0].name
 97     def versionName = android.defaultConfig.versionName
 98     def versionCode = android.defaultConfig.versionCode
 99     def releaseTime = releaseTime()
100
101     if (variant.zipAlign) {
102         newName = "名字-" + versionCode + "-" + versionName + "-" + packageName + "-" + channelName + "-smaller-" + releaseTime + "-release.apk"
103     }else{
104         newName = "名字-" + versionCode + "-" + versionName + "-" + packageName + "-" + channelName + "-smaller-" + releaseTime + "-unalign.apk"
105     }
106     variant.outputFile = new File(apk.parentFile, newName);
107 }
108
109 dependencies {
110     //compile project(‘:abc‘)
111     //compile ‘com.android.support:support-v4:13.0.+‘
112
113     compile fileTree(dir: ‘libs‘, include: [‘*.jar‘])
114 }
115
116 task copyNativeLibs(type: Copy) {
117     from fileTree(dir: ‘libs‘, include: ‘**/*.so‘) into ‘build/native-libs‘
118 }
119
120 tasks.withType(Compile) {
121     compileTask -> compileTask.dependsOn copyNativeLibs
122     options.encoding = "UTF-8"
123 }
124
125 tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
126     pkgTask.jniDir file(‘build/native-libs‘)
127 }

这里面还会有一个问题,就是中文编码的问题,如果Manifest.xml中含有中文,十有八九会报错的。所以这里有一个解决办法:

修改你的GRADLE_HOME/bin下的gradle执行文件,windows应该是gradle.bat,其它系统的直接就是gradle文件,将DEFAULT_JVM_OPTS的值修改为"-Dfile.encoding=UTF-8"。

祝大家一路顺风。

时间: 2024-11-07 13:49:42

Gradle-Android渠道编包及重命名的相关文章

Android Studio 使用笔记:给包重命名~~有点水

很简单,选择需要重命名的包,按下 Shift + F6 这时候出现提示,选择 Rename package 输入新的包名,Refactor按钮会变亮,点击就可以了. 注意:这个是重命名一个包名,想做 “ 新增包名.原包名 ” 这种是做不到的~~

Android开发时包名、签名、渠道和版本号的易坑点(转)

本文中总结一下 Android 开发中容易被忽视的一些注意事项吧: 一.谨慎选择包名 包名 (Package Name) 就相当于一款应用在户口本上登记的名字,是系统用来区分不同应用的字段.重复的包名会被认为是同一款应用,不能同时安装在一个系统里.一般来说,包名建议使用域名反序.比如豌豆荚的网站域名是 www.wandoujia.com,那么豌豆荚的一系列 Android 应用的包名就是 com.wandoujia.***.这种约定俗成的办法可以最大程度地避免“撞名”的事故. 案例一 某个手机

android studio学习----通过gradle来导入jar包

转载地址:http://www.th7.cn/Program/Android/201507/495477.shtml File->Project Structure 可以打开下面的图: 1.通过gradle配置第三方jar包 我们看到,每个module都有一个build.gradle文件,它其实是对应module的配置文件.关于build.gradle文件中具体内容的含义,我们将在最后一段进行讲解. 我们先来看一下名为app的这个module,它的build.gradle对应的图形界面其实是下面

android 图片重命名后设置为联系人提示无法加载此图片

选择一张图片重命名--将图片设置为联系人图标--再次使用同一张图片重命名之后--设为另一联系人头像观察时,提示无法加载此图片 Root Cause:当用户去重命名时,gallery收不到data chang的通知,所以无法更新LocalImage的filePath,导致无法加载图片. Solution:CropImage在加载图片前,首先会去query图片的filepath并更新. 具体code: alps\packages\apps\Gallery2\src\com\android\galle

Android studio变量重命名问题

今天在项目中将一个变量"name"重命名为"label",也没管下面的提示就直接全部操作了,结果manifest和value中的所有name属性全部重命名为label了,项目直接炸了>_< 以后重命名一定要慎重啊.....

Android Studio中如何重命名文件

如图,选中你要重命名的文件(pic.PNG),在"Refactor"选项中有Rename,点击进行更名: 更名后你的工程中所有原来引用过的"pic"都将更换成你改的新名字. 快捷将:Shift+F6

Android 关于文件及文件夹的创建 、删除、重命名、复制拷贝

package com.example.administrator.myapplication.util; import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.F

Gradle Android客户端程序打包

一.前言 android客户端开发进入尾声,负责SEO同事突然发给我一个涉及45个发布渠道的噩耗,之前只发布自有渠道的工作方式已经不满足需求,所以引入最近比较流行的gradle打包技术. gradle基于groovy语言,引入的原因也方便了以后从现在使用的eclipse开发环境迁移到Android Studio,所以blablabla……,不多说了,先上代码. 二.简单项目Gradle打包脚本配置 buildscript { repositories { jcenter() } dependen

转:android Support 兼容包详解

本文转自stormzhang的ANDROID SUPPORT兼容包详解 背景 来自于知乎上邀请回答的一个问题Android中AppCompat和Holo的一个问题?, 看来很多人还是对这些兼容包搞不清楚,那么干脆写篇博客吧. Support Library 我们都知道Android一些SDK比较分裂,为此google官方提供了Android Support Library package 系列的包来保证高版本sdk开发的向下兼容性, 所以你可能经常看到v4,v7,v13这些数字,首先我们就来理清