//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程序

    首先在Visual Studio Tools 文件中打开 Visual Studio 命令提示(2010),输入命令 notepad 打开记事本,写好程序保存,保存类型:所有文档  文件名:1.c . ...

  2. [转载] Netty源码分析

    转载自http://blog.csdn.net/kobejayandy/article/details/11836813 Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高 ...

  3. Eclipse的几个常用快捷键

    键盘操作 功能 Alt + /    语句或变量名自动补全 Ctrl + Shift + F 语句格式化 Ctrl + / 单行注释(或取消单行注释) Ctrl + Shift + /   多行注释 ...

  4. (三):C++分布式实时应用框架——系统管理模块

    C++分布式实时应用框架--系统管理模块 上篇:(二): 基于ZeroMQ的实时通讯平台 一个分布式实时系统集群动辄上百台机器,集群的规模已经限定这将是一个"封闭"的系统.你不可能 ...

  5. Python机器学习库和深度学习库总结

    我们在Github上的贡献者和提交者之中检查了用Python语言进行机器学习的开源项目,并挑选出最受欢迎和最活跃的项目. 1. Scikit-learn(重点推荐) www.github.com/sc ...

  6. T-SQL的进阶:超越基本级别3:构建相关子查询——701小组

    T-SQL的进阶:超越基本级别3:构建相关子查询 格雷戈里·拉森,2014/03/05 原文链接: http://www.sqlservercentral.com/articles/Stairway+ ...

  7. lua API 小记2

    1. 创建lua虚拟机 lua_State *lua_newstate (lua_Alloc f, void *ud) 创建一个新的独立的lua虚拟机. 参数指定了内存分配策略及其参数, 注意, 让用 ...

  8. excel vlookup

    今天在百度知道的时候,看到旁边有人问excel中条件查找vlookup的问题,有几位高手都知道使用vlookup作答,可惜都是没有经过测试,直接复制别人的答案,让所有的读者都无法实施,一头雾水.今天我 ...

  9. MySQL的安装(比较详细的安装步骤,包括客户端和服务端的安装,还有环境变量的配置以及使用Windows service启动MySQL)

    1.MySQL官网下载操作系统对应的MySQL安装包,解压之后就可以直接使用(免安装). MySQL安装包,一种是MySQL Enterprise Edition (commercial)企业版,还有 ...

  10. 原型模式(Prototype)

    原型模式(Prototype) 原型模式虽然是创建型的模式,但是与工程模式没有关系,从名字即可看出,该模式的思想就是将一个对象作为原型,对其进行复制.克隆,产生一个和原对象类似的新对象.本小结会通过对 ...