• 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 中定义了版本。这样我们需要更新版本的时候是不是方便了许多。

  • 相关阅读:
    ROS+clion多节点调试
    argparse模块用法实例详解
    Python3中的bytes和str类型
    elk日志过滤文档
    centos7普通用户无法切换为root用户处理
    Hyper-V迁移方案
    中小互联网电商(电商)公司研发部门组织架构
    基于Redis实现令牌桶限流
    异步与协程
    C# 同步上下文及死锁
  • 原文地址:https://www.cnblogs.com/aimqqroad-13/p/9019865.html
Copyright © 2020-2023  润新知