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

  • 相关阅读:
    [CodeForces]Codeforces Round #429 (Div. 2) ABC(待补)
    About Me
    2018-06-14
    Codeforces Codeforces Round #484 (Div. 2) E. Billiard
    Codeforces Codeforces Round #484 (Div. 2) D. Shark
    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings
    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes
    Codeforces Avito Code Challenge 2018 D. Bookshelves
    Codeforces Round #485 (Div. 2) D. Fair
    Codeforces Round #485 (Div. 2) F. AND Graph
  • 原文地址:https://www.cnblogs.com/aimqqroad-13/p/9019865.html
Copyright © 2011-2022 走看看