Android 开发版本统一

Posted Spiderman L

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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使用Gradle统一配置依赖版本

Android开发常用代码片段

Android Studio中Gradle统一管理版本号引用配置

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

Android代码片段

Android 逆向Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | Visual Studio 中 SDK 和 NDK 安装位置 )(代码片段