標籤:rom view rar nta syn roi OLE mod tools
一、概述
對於 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 檔案應用到項目來:
// 項目 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 開發版本統一