热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android使用gradle不同配置多项目打包

build.gradle该配置文件里路径均是相对路径applyplugin:com.android.applicationandroid{defsuffixsuffix后缀新

//build.gradle该配置文件里路径均是相对路径
apply plugin: 'com.android.application'android {def suffix = "suffix"//后缀//新增一个配置须要加入一个新的变量,命名规则operator_xxxxxxdef operator_Z = "Z"Map operatorMap = new HashMap();Map versionMap = new HashMap();Map versionCodeMap = new HashMap();Map versionNameMap = new HashMap();//设置是否使用独立的versionCode和versionNamesetVersionCN(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 = falselintOptions {//运行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 11targetSdkVersion 15versionCode 11versionName "1.0.0.11"}buildTypes {release {//是否优化zipAlignEnabled true//是否混淆minifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-project.txt'//这里的proguard-project.txt要改动成混淆配置文件名称}}productFlavors {def flavorSign = signingConfigs.commonConfigprojectName001 {sourceSets."$name".java.srcDirs += "build-types/projectName001"signingConfig flavorSignoperatorMap.put("$name", operator_Z)if (versionMap.get(name)) {//这里传入name參数时直接用nameversionCode versionCodeMap.get(name)versionName versionNameMap.get(name)} else {versionCode defaultConfig.versionCodeversionName defaultConfig.versionName}}projectName002 {sourceSets."$name".java.srcDirs += "build-types/projectName002"signingConfig flavorSignoperatorMap.put("$name", operator_Z)if (versionMap.get(name)) {versionCode versionCodeMap.get(name)versionName versionNameMap.get(name)} else {versionCode defaultConfig.versionCodeversionName 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.jarcompile '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 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.outputFiledef buildTypeOfApp = variant.buildType.namedef operator = operatorMap.get("${variant.productFlavors[0].name}")//这里传入參数时须要使用“ "${variant.productFlavors[0].name}" ”
// def outputName = name + operator + variant.productFlavors[0].name + "_" + suffix + "_" + versiondef 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不同配置多项目打包(升级版)




推荐阅读
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • CentOS 7.6环境下Prometheus与Grafana的集成部署指南
    本文旨在提供一套详细的步骤,指导读者如何在CentOS 7.6操作系统上成功安装和配置Prometheus 2.17.1及Grafana 6.7.2-1,实现高效的数据监控与可视化。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 本文介绍如何在Spring Boot项目中集成Redis,并通过具体案例展示其配置和使用方法。包括添加依赖、配置连接信息、自定义序列化方式以及实现仓储接口。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 在编译BSP包过程中,遇到了一个与 'gets' 函数相关的编译错误。该问题通常发生在较新的编译环境中,由于 'gets' 函数已被弃用并视为安全漏洞。本文将详细介绍如何通过修改源代码和配置文件来解决这一问题。 ... [详细]
  • 本文详细介绍如何使用 Python 集成微信支付的三种主要方式:Native 支付、APP 支付和 JSAPI 支付。每种方式适用于不同的应用场景,如 PC 网站、移动端应用和公众号内支付等。 ... [详细]
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • 对于许多初学者而言,遇到总线错误(bus error)或段错误(segmentation fault/core dump)是极其令人困扰的。本文详细探讨了这两种错误的成因、表现形式及解决方法,并提供了实用的调试技巧。 ... [详细]
  • 本文将详细探讨 Java 中提供的不可变集合(如 `Collections.unmodifiableXXX`)和同步集合(如 `Collections.synchronizedXXX`)的实现原理及使用方法,帮助开发者更好地理解和应用这些工具。 ... [详细]
  • 本文深入探讨了UNIX/Linux系统中的进程间通信(IPC)机制,包括消息传递、同步和共享内存等。详细介绍了管道(Pipe)、有名管道(FIFO)、Posix和System V消息队列、互斥锁与条件变量、读写锁、信号量以及共享内存的使用方法和应用场景。 ... [详细]
  • java文本编辑器,java文本编辑器设计思路
    java文本编辑器,java文本编辑器设计思路 ... [详细]
  • 本文深入探讨了 Delphi 中类对象成员的核心概念,包括 System 单元的基础知识、TObject 类的定义及其方法、TClass 的作用以及对象的消息处理机制。文章不仅解释了这些概念的基本原理,还提供了丰富的补充和专业解答,帮助读者全面理解 Delphi 的面向对象编程。 ... [详细]
  • 在日常编程实践中,Map的遍历是一项基本且频繁的操作。本文将探讨Java中遍历Map的不同方法,并提供示例代码,帮助开发者根据具体需求选择最合适的遍历策略。 ... [详细]
author-avatar
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有