Android 开发版本统一
一、概述
对于 Android 开发版本的统一涉及到的东西就是 Gradle 中的全局设置,我们通过配置 gradle 也就是编写 Groovy 代码将开发中的版本号设置为全局参数。这样就能够在 module 或者 library 中访问同一份版本号,从而实现统一。Gradle 中的全局设置方式有以下几种:
工程 build.gradle
ext方法
gradle.properties文件
-p参数
二、全局设置
1. 工程 build.gradle
allprojects {
apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
}
}
这只会在你的所有模块都是Android app应用的时候有效。你需要添加Android 插件才能访问Android的tasks。
2. ext 方法
ext {
compileSdkVersion = 22
buildToolsVersion = "22.0.1"
}
在全局的gradle文件中定义一些属性,然后再在子模块中就可以使用这些属性。
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
}
3. gradle.properties 文件
COMPILE_SDK_VERSION = 22
BUILD_TOOLS_VERSION = "22.0.1"
在该文件中定义后,可以在子模块中直接使用:
android {
compileSdkVersion COMPILE_SDK_VERSION
buildToolsVersion BUILD_TOOLS_VERSION
}
4. -p参数
这种方式是命令行的方式,比如我们在 gradle 中定义这么一个任务:
task printProperties << {
if (project.hasProperty('cmd')) {
println cmd // Command line property
}
}
然后我们通过命令行设置参数:
$ gradlew printProperties -Pcmd='Hello from the command line'
执行任务后输出:
Hello from the command line
三、版本统一
进入主题,我们来看如何将我们同一份版本进行共享来实现统一。我们先创建一个放置版本号的 gradle 文件 version.gradle
然后我们就通过 ext 方式定义:
ext.deps = [:]//空映射 def versions = [:]
versions.support = "27.1.1"
versions.constraint_layout = "1.0.2"
versions.junit = "4.12"
versions.test_runner = "1.0.2"
versions.test_espresso = "3.0.2"
versions.android_gradle_plugin = "3.1.2" def deps = [:] def support = [:]
support.v7 = "com.android.support:appcompat-v7:$versions.support"
deps.support = support //view
deps.constraint_layout = "com.android.support.constraint:constraint-layout:$versions.constraint_layout"
deps.android_gradle_plugin = "com.android.tools.build:gradle:$versions.android_gradle_plugin" def test = [:]
test.junit = "junit:junit:$versions.junit"
test.runner = "com.android.support.test:runner:$versions.test_runner"
test.test_espresso = "com.android.support.test.espresso:espresso-core:$versions.test_espresso"
deps.test = test ext.deps = deps def build_version = [:]
build_version.min_sdk = 15
build_version.target_sdk = 27
build_version.build_tools = "27.1.1"
ext.build_version = build_version
def addRepos(RepositoryHandler handler) {
handler.google()
handler.jcenter()
handler.mavenCentral()
//Add the JitPack repository
handler.maven { url "https://jitpack.io" }
handler.maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
}
ext.addRepos = this.&addRepos
上面这就定义好了我们的版本,书写方式就是 Groovy 代码。下面就是我们要将 version.gradle 文件应用到项目来:
apply from
:表示引用其他的配置文件
// 项目 build.gradle
buildscript {
apply from : "version.gradle"
}
Sync Project 后,我们就可以使用了,来看一下在子模块中的使用:
apply plugin: 'com.android.application' android {
compileSdkVersion build_version.target_sdk
defaultConfig {
applicationId "com.sl.gradledemo"
minSdkVersion build_version.min_sdk
targetSdkVersion build_version.target_sdk
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
} signingConfigs {
release {
storeFile file(RELEASE_STORE_FILE)
storePassword RELEASE_STORE_PASSWORD
keyAlias RELEASE_KEY_ALIAS
keyPassword RELEASE_KEY_PASSWORD
}
} buildTypes {
release {
minifyEnabled false
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
buildConfigField("String", "API_URL", "\"https://www.baidu.com\"")
buildConfigField("boolean", "LOG_STATE", "false")
resValue("string","show_name","release_app")
resValue("string","app_name","release_app")
}
debug {
buildConfigField("String", "API_URL", "\"http://192.168.142.30\"")
buildConfigField("boolean", "LOG_STATE", "true")
resValue("string","show_name","debug_app")
resValue("string","app_name","dubug_app")
}
}
} dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation deps.support.v7
implementation deps.constraint_layout
testImplementation deps.test.junit
androidTestImplementation deps.test.runner
androidTestImplementation deps.test.test_espresso
}
这样我们所有子模块就可以和上面一样配置版本,只有 version.gradle 中定义了版本。这样我们需要更新版本的时候是不是方便了许多。
Android 开发版本统一的更多相关文章
- Android开发日志统一管理
在开发中,我们通常要对日志的输出做统一管理,下面就为大家推荐一个日志输出类,在开发阶段只需将DEBUG常量设为true,生产环境将DEBUG设为false即可控制日志的输出.啥都不说了,需要的朋友直接 ...
- Android开发学习总结(一)——搭建最新版本的Android开发环境
Android开发学习总结(一)——搭建最新版本的Android开发环境(转) 最近由于工作中要负责开发一款Android的App,之前都是做JavaWeb的开发,Android开发虽然有所了解,但是 ...
- Android开发学习总结——搭建最新版本的Android开发环境
原文出自:https://www.cnblogs.com/xdp-gacl/p/4322165.html#undefined 最近由于工作中要负责开发一款Android的App,之前都是做JavaWe ...
- 搭建最新版本的Android开发环境
只为成功找方法,不为失败找借口! Android开发学习总结(一)——搭建最新版本的Android开发环境 最近由于工作中要负责开发一款Android的App,之前都是做JavaWeb的开发,Andr ...
- 【转】Android开发学习总结(一)——搭建最新版本的Android开发环境
最近由于工作中要负责开发一款Android的App,之前都是做JavaWeb的开发,Android开发虽然有所了解,但是一直没有搭建开发环境去学习,Android的更新速度比较快了,Android1. ...
- android 开发对gif解码(适配android 4.2、4.3、4.4版本)
android 开发对gif解码(适配android 4.2.4.3.4.4版本) 使用方法: public class ImageInputActivity extends Activity imp ...
- 【Android 应用开发】 Android 各种版本简介 ( Support 支持库版本 | Android Studio 版本 | Gradle 版本 | jcenter 库版本 )
初学者遇到 Android Studio, 导入工程后, 会出现各种奇葩错误, 如果管理好各个插件, gradle, SDK, SDK Tools, 各种官方依赖库 的版本, 会将错误大大的减少; 这 ...
- android 开发 实现多个动态权限的方法(并且兼容6.0以下的版本权限授权)
android开发权限授权因为版本的不同有不同的授权方式,6.0以下的版本使用的是在注册表中添加权限的静态授权(这种授权权限提示只会出现在app安装的时候),而6.0以上(包含6.0)就需要动态授权的 ...
- OK335xS Ubuntu 12.04.1 版本 Android 开发环境搭建
/******************************************************************************************** * OK33 ...
随机推荐
- Java远程连接redis, 报错 Connection refused: connect
在今天的学习Redis中报错 Connection refused: connect 我总结了有三种情况: 1.远程服务器中的Redis没有开启. 2.远程连接地址出错,或者是端口出错. 3.远程服务 ...
- JACKSON详解
Jackson 框架,轻易转换JSON Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json.xml转换成Java对象. 前面有介绍过json-lib这个框架,在 ...
- F#周报2019年第7期
新闻 Visual Studio 2019预览版3,F#性能修复 Bolero 0.3发布,HTML模版热加载 Fantomas在线升级至Fantomas 2.9.2 使用F#开发的随机访问Excel ...
- java学习笔记-集合set
equals指内容(值)相等,== 指地址相等 ===============set类 set继承自collection,但set没有新增方法,只是set里的元素不重复,下面是set常用方法 ==== ...
- 20144306《网络对抗》MAL_恶意代码分析
一.基础问题 1.如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来监控? 使用Windows自带的schtasks指 ...
- typescript 创建类型
type long = string | number; type stringObj = { [index: string]: string; } type NumberObj = { [index ...
- IIC - 【转载】对I2C总线的时钟同步和总线仲裁的深入理解
对I2C总线的时钟同步和总线仲裁的深入理解 每一个IIC总线器件内部的SDA.SCL引脚电路结构都是一样的,引脚的输出驱动与输入缓冲连在一起.其中输出为漏极开路的场效应管.输入缓冲为一只高输入阻抗的同 ...
- Fernflower 反编译.class文件
最近有些奇怪Intellij IDEA通过什么查看的源码,通过打开源码意外的发现如下注释 原来是通过Fernflower这个反编译工具w(゚Д゚)w. 使用Fernflower反编译出的代码相当友好, ...
- JDBC连接MySQL与Oracle
JDBC连接MySQL .JDBC连接Oracle (跳转) JDBC连接MySQL import org.junit.Test; import java.sql.*; /** * JDBC连接MyS ...
- Flask项目示例目录
Flask不同于Django,Django在创建程序时自动得到必要的目录文件,而Flask则只有一个空文件夹,所以关于Flask项目的目录我们需要自行配置. 首先利用pycharm创建一个项目,在根目 ...