//build.gradle该配置文件里路径均是相对路径
apply plugin: 'com.android.application' android {
def suffix = "suffix"//后缀
//新增一个配置须要加入一个新的变量,命名规则operator_xxxxxx
def operator_Z = "Z"
Map<String, String> operatorMap = new HashMap<String, String>();
Map<String, Boolean> versionMap = new HashMap<String, Boolean>();
Map<String, Integer> versionCodeMap = new HashMap<String, Integer>();
Map<String, String> versionNameMap = new HashMap<String, String>();
//设置是否使用独立的versionCode和versionName
setVersionCN(versionMap, versionCodeMap, versionNameMap, "projectName001", true, 10, "1.0.0.10test")
setVersionCN(versionMap, versionCodeMap, versionNameMap, "projectName002", true, 10, "1.0.0.10test")
//编译sdk版本号
compileSdkVersion 21
//编译工具版本号
buildToolsVersion "23.0.0 rc2"
//是否强制唯一包名
enforceUniquePackageName = false lintOptions {
//运行lint检查,不会终止编译
abortOnError false
} dexOptions {
preDexLibraries = false
} signingConfigs {
commonConfig {
storeFile file("wasu.keystore")
storePassword "wasu1234"
keyAlias "android.keystore"
keyPassword "wasu1234"
}
} defaultConfig {
applicationId "cn.com.wasu.backplay"
minSdkVersion 11
targetSdkVersion 15
versionCode 11
versionName "1.0.0.11"
}
buildTypes {
release {
//是否优化
zipAlignEnabled true
//是否混淆
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-project.txt'//这里的proguard-project.txt要改动成混淆配置文件名称
}
}
productFlavors {
def flavorSign = signingConfigs.commonConfig
projectName001 {
sourceSets."$name".java.srcDirs += "build-types/projectName001"
signingConfig flavorSign
operatorMap.put("$name", operator_Z)
if (versionMap.get(name)) {//这里传入name參数时直接用name
versionCode versionCodeMap.get(name)
versionName versionNameMap.get(name)
} else {
versionCode defaultConfig.versionCode
versionName defaultConfig.versionName
}
}
projectName002 {
sourceSets."$name".java.srcDirs += "build-types/projectName002"
signingConfig flavorSign
operatorMap.put("$name", operator_Z)
if (versionMap.get(name)) {
versionCode versionCodeMap.get(name)
versionName versionNameMap.get(name)
} else {
versionCode defaultConfig.versionCode
versionName defaultConfig.versionName
}
}
} sourceSets {
main {
assets.srcDirs = ['src/main/assets']
res.srcDirs = ['src/main/res']
aidl.srcDirs = ['src/main/java']
resources.srcDirs = ['src/main/java']
renderscript.srcDirs = ['src/main/java']
jniLibs.srcDirs = ['libs']//同一时候包括*.so,*.jar文件
manifest.srcFile 'src/main/AndroidManifest.xml' java {
srcDirs = ['src/main/java']
exclude 'cn/com/a/b/c/Common.java'//排除项目中的该类
}
}
} packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/dependencies.txt'
exclude 'META-INF/LGPL2.1'
exclude 'META-INF/ASL2.0'
} println "共" + operatorMap.size() + "个项目须要编译" setup(operatorMap, suffix) clean {
delete += "output"
}
} dependencies {
//在混淆文件里须要凝视相关jar包。例如以下
//#-libraryjars libs/dom4j-1.6.1.jar
//#-libraryjars libs/jackson-core-asl-1.8.0.jar
//#-libraryjars libs/jackson-mapper-asl-1.8.0.jar
//#-libraryjars libs/junit4.4.jar
//#-libraryjars libs/spring-android-rest-template-1.0.0.M2.jar
//#-libraryjars libs/Log.jar
//#-libraryjars libs/gson-2.2.4.jar
compile 'com.android.support:support-v4:21.0.3'
compile 'com.google.code.gson:gson:2.2.4'
compile files('libs/Log.jar')
compile files('libs/dom4j-1.6.1.jar')
compile files('libs/jackson-core-asl-1.8.0.jar')
compile files('libs/jackson-mapper-asl-1.8.0.jar')
compile files('libs/junit4.4.jar')
compile files('libs/spring-android-rest-template-1.0.0.M2.jar')
} build.doLast {
def today = new Date().format('yyyyMMdd');
def dir_debug = 'output/' + today + '/debug'
def dir_release = 'output/' + today + '/release' copy {//复制release版本号apk到单独目录
from('build/outputs/apk')
into(dir_debug)
include('*_debug.apk')
exclude("*-unaligned.apk");
exclude("*-unsigned.apk");
} copy {//复制debug版本号apk到单独目录
from('build/outputs/apk')
into(dir_release)
include('*.apk')
exclude('*_debug.apk')
exclude("*-unaligned.apk");
exclude("*-unsigned.apk");
}
} def setup(Map<String, String> operatorMap, suffix) {
def name = "xxxx_";
def today = new Date().format('yyyyMMddHHmm');
def today1 = new Date().format('yyyyMMdd'); android.applicationVariants.all { variant ->
variant.outputs.each { output ->
// def version = android.defaultConfig.versionName;
def version = variant.productFlavors[0].versionName;
def file = output.outputFile
def buildTypeOfApp = variant.buildType.name
def operator = operatorMap.get("${variant.productFlavors[0].name}")//这里传入參数时须要使用“ "${variant.productFlavors[0].name}" ”
// def outputName = name + operator + variant.productFlavors[0].name + "_" + suffix + "_" + version
def test = "%s%s%s_%s_%s" def outputName = String.format(test, name, operator, variant.productFlavors[0].name, suffix, version) if (!variant.buildType.name.equalsIgnoreCase("debug")) {
output.outputFile = new File(file.parent, outputName + "_" + today + ".apk")
} else {
output.outputFile = new File(file.parent, outputName + "_" + today1 + "_debug.apk");
}
println output.outputFile;
}
}
} /**
* 设置是否使用自己定义versionCode和versionName
* @param versionMap 是否自己定义map
* @param versionCodeMap 自己定义versionCode map
* @param versionNameMap 自己定义versionName map
* @param name 项目名
* @param isSingle 是否使用自己定义
* @param code 自己定义versionCode
* @param vname 自己定义versionName
* @return
*/
def setVersionCN(versionMap, versionCodeMap, versionNameMap, String name, boolean isSingle, int code, String vname) {
versionMap.put(name, isSingle);
versionCodeMap.put(name, code);
versionNameMap.put(name, vname);
}

升级版Android使用gradle不同配置多项目打包(升级版)

Android使用gradle不同配置多项目打包的更多相关文章

  1. vue2.0 配置build项目打包目录、资源文件(assets\static)打包目录

    vue项目默认的打包路径:根目录下的dist文件夹下: 但是在项目开发中,我们肯定希望项目提交到svn目录或者git目录下,否则每次复制过去,太麻烦了: 那怎么配置打包路径呢?下面来看看: 我们找到打 ...

  2. 使用Android Studio Gradle实现友盟多渠道打包

    最新项目中要求在友盟后台看到不同渠道的统计,Android大大小小的应用市场要几百个,要一个一个手工打包那一天也干不完,还好是有大牛的,弄出了好多解决方法,就Gradle做一下记录和分享,首先看一些理 ...

  3. gulp 配置前端项目打包

    项目发布时,需要对项目js文件进行压缩,混淆,连接等操作以减小项目http请求,加快访问. gulpjs.com中有很多插件可以用来配置打包部署. 需要用的常用插件有: gulp-jsmin  压缩j ...

  4. springboot系列三、springboot 单元测试、配置访问路径、多个配置文件和多环境配置,项目打包发布

    一.单元测试 生成的demo里面包含spring-boot-starter-test :测试模块,包括JUnit.Hamcrest.Mockito,没有的手动加上. <dependency> ...

  5. Android使用Gradle命令动态传参完成打包,不需要修改代码

    不得不说,Gradle很强大,有人会问Gradle是什么?这里也不细讲,在我认为他就是一个构建神器.Gradle 提供了: 一个像 Ant 一样的非常灵活的通用构建工具 一种可切换的, 像 Maven ...

  6. Android Studio Gradle 多渠道自动打包,动态修改HostUrl,签名apk,混淆配置详解

    文/ skay csdn博客:http://blog.csdn.net/sk719887916/article/details/40541163 最近遇到项目从Eclispe迁移到Android st ...

  7. Android studio第一次使用配置(三)gradle项目构建

    1.gradle的概念 2.gradle配置jar包.和libs目录导入jar包的差别 3.签名打包: (1)Studio (2)命令行 (3)gradle wrapper的原理 4.BuildCon ...

  8. Android之通过配置Flavor实现一个项目打包成多个apk

    最近我老大问我一个问题,说Android可不可以像iOS那样,通过target对项目进行管理啊.老大提这个问题也是正常的,我公司的主要是帮别的公司做硬件定制的,每定制一个硬件就要定制一个APP,但是很 ...

  9. Android Studio] Gradle项目中添加JNI生成文件(.so文件)

    转:http://blog.csdn.net/qiujuer/article/details/24209457 为了适应潮流使用Android Studio还是有半年多了! 对于从Eclipse迁移项 ...

随机推荐

  1. C#配合利用XML文件构建反射表机制

    在设计程序时,无论是界面或是后台代码,我们通常都想留给用户一个较为简单的接口.而我在参与封装语音卡开发函数包的时候,发现各种语音卡的底层函数的接口都是各种整形变量标记值,使用起来极为不变.于是就理解了 ...

  2. JDBC之代码优化

    上一次我们是先实现了JDBC对数据库的增删查改操作,然后在增加新信息过程中发现了新的问题,即当某一操作失败,为了维护数据库的一致性,我们需要回滚事务.在其中我们了解了事务的工作原理及相关代码的使用. ...

  3. gulp 打包合并

    1.安装node.js  下载地址: http://nodejs.cn/ 打开node.js 命令行,输入: node  -v ,有版本号,则正确安装. 2.安装淘宝镜像 :命令行输入 : npm i ...

  4. JavaScript数据可视化编程学习(一)Flotr2,包含简单的,柱状图,折线图,饼图,散点图

    一.基础柱状图 二.基础的折线图 三.基础的饼图 四.基础的散点图 一.基础柱状图 如果你还没有想好你的数据用什么类型的图表来展示你的数据,你应该首先考虑是否可以做成柱状图.柱状图可以表示数据的变化过 ...

  5. ZooKeeper全面介绍

    ZooKeeper简介 ZooKeeper是分布式服务框架,主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理等等.   ZooKe ...

  6. Fis3迁移至Webpack实战

    Webpack从2015年9月第一个版本横空初始至今已逾2载.它的出现,颠覆了一大批主流构建如Ant.Grunt和Gulp等等.腾讯NOW直播IVWEB团队之前一直采用Fis构建,本篇文章主要介绍从F ...

  7. System.Transactions 事务超时属性

    最近遇到一个处理较多数据的大事务,当进行至10分钟左右时,爆出事务超时异常,如果Machine.config中不设置最大超时时间,则默认超时时间为10分钟 MachineSettingsSection ...

  8. 【架构研习】欲善其事先利其器-Robot Framework实战演练之框架的选择

    (原创文章,转载请注明出处.) 之前有提到过,自己曾基于公司业务系统从无到有码过一套测试框架,但由于开发时的思想同时受限于公司业务及框架的适用性上,导致最终虽然框架可完美支持业务,但在易用性.兼容性及 ...

  9. maven学习之1

    最近用maven的时候各种出问题,打算系统的学习一下maven,搞明白依赖之类的. (一)创建工程: mvn archetype:generate 这样就可以根据提示来建立一个maven项目,常用的有 ...

  10. CentOS 6.4安装配置LNMP服务器(Nginx+PHP+MySQL)

    一 安装篇 1. 安装nginx yum check-update #更新yum源 yum remove httpd* php* #删除系统自带的软件包 yum install nginx #安装ng ...