Unified management of AS project version numbers

1. Open the Project and find two gradel files
2. Create the version.gradle file in the project root directory

/**
 * Shared file between builds so that they can all use the same dependencies and
 * maven repositories.
 *
 * 局部变量是用 def 关键字声明的
 **/
ext.deps = [:]   // 一个全局的,map ,为了让其他的gradle 文件访问
def versions = [:] 
versions.activity = '1.6.1'
versions.android_gradle_plugin = '7.4.0-rc03'
versions.annotations = "1.2.0"
versions.appcompat = "1.5.1"
versions.arch_core = "2.1.0"
versions.atsl_core = "1.5.0"
versions.atsl_junit = "1.1.5"
versions.atsl_rules = "1.3.0"
versions.atsl_runner = "1.5.0"
versions.benchmark = "1.1.1"
versions.cardview = "1.0.0"
versions.constraint_layout = "2.1.4"
versions.concurrent = "1.1.0"
versions.core_ktx = "1.9.0"
versions.coroutines = "1.6.4"
versions.dagger = "2.44.2"
versions.dexmaker = "2.28.3"
versions.espresso = "3.5.1"
versions.fragment = "1.5.5"
versions.glide = "4.14.2"
versions.hamcrest = "1.3"
versions.junit = "4.12"
versions.kotlin = "1.6.21"
versions.lifecycle = "2.5.1"
versions.material = "1.7.0"
versions.mockito = "4.11.0"
versions.mockito_all = "1.10.19"
versions.mockito_android = "4.11.0"
versions.mockwebserver = "4.10.0"
versions.navigation = "2.5.3"
versions.okhttp_logging_interceptor = "4.10.0"
versions.paging = "3.1.1"
versions.swiperefreshlayout = "1.1.0"
versions.recyclerview = "1.2.1"
versions.retrofit = "2.9.0"
versions.robolectric = "4.9.2"
versions.room = "2.4.3"
versions.rx_android = "2.1.1"
versions.rxjava2 = "2.2.21"
versions.timber = "4.7.1"
versions.transition = "1.4.1"
versions.truth = "1.1.3"
versions.work = "2.7.1"
ext.versions = versions

def build_versions = [:]
build_versions.min_sdk = 14
build_versions.compile_sdk = 33
build_versions.target_sdk = 33
ext.build_versions = build_versions

def deps = [:]   // 临时的map,最后把这个临时的map 赋值给上面的 全局map

def activity = [:]
activity.activity_ktx = "androidx.activity:activity-ktx:$versions.activity"
deps.activity = activity

deps.android_gradle_plugin = "com.android.tools.build:gradle:$versions.android_gradle_plugin"

deps.annotations = "androidx.annotation:annotation:$versions.annotations"

deps.app_compat = "androidx.appcompat:appcompat:$versions.appcompat"

def arch_core = [:]
arch_core.runtime = "androidx.arch.core:core-runtime:$versions.arch_core"
arch_core.testing = "androidx.arch.core:core-testing:$versions.arch_core"
deps.arch_core = arch_core

def atsl = [:]
atsl.core = "androidx.test:core:$versions.atsl_core"
atsl.ext_junit = "androidx.test.ext:junit:$versions.atsl_junit"
atsl.ext_junit_ktx = "androidx.test.ext:junit-ktx:$versions.atsl_junit"
atsl.runner = "androidx.test:runner:$versions.atsl_runner"
atsl.rules = "androidx.test:rules:$versions.atsl_rules"
deps.atsl = atsl

deps.benchmark = "androidx.benchmark:benchmark-junit4:$versions.benchmark"
deps.benchmark_gradle = "androidx.benchmark:benchmark-gradle-plugin:$versions.benchmark"

deps.cardview = "androidx.cardview:cardview:$versions.cardview"

deps.constraint_layout = "androidx.constraintlayout:constraintlayout:$versions.constraint_layout"

deps.core_ktx = "androidx.core:core-ktx:$versions.core_ktx"

def concurrent = [:]
concurrent.futures = "androidx.concurrent:concurrent-futures:$versions.concurrent"
deps.concurrent = concurrent

def coroutines = [:]
coroutines.android = "org.jetbrains.kotlinx:kotlinx-coroutines-android:$versions.coroutines"
coroutines.test = "org.jetbrains.kotlinx:kotlinx-coroutines-test:$versions.coroutines"
deps.coroutines = coroutines

def dagger = [:]
dagger.runtime = "com.google.dagger:dagger:$versions.dagger"
dagger.android = "com.google.dagger:dagger-android:$versions.dagger"
dagger.android_support = "com.google.dagger:dagger-android-support:$versions.dagger"
dagger.compiler = "com.google.dagger:dagger-compiler:$versions.dagger"
dagger.android_support_compiler = "com.google.dagger:dagger-android-processor:$versions.dagger"
deps.dagger = dagger

deps.dexmaker = "com.linkedin.dexmaker:dexmaker-mockito:$versions.dexmaker"

def espresso = [:]
espresso.core = "androidx.test.espresso:espresso-core:$versions.espresso"
espresso.contrib = "androidx.test.espresso:espresso-contrib:$versions.espresso"
espresso.intents = "androidx.test.espresso:espresso-intents:$versions.espresso"
deps.espresso = espresso

def fragment = [:]
fragment.runtime = "androidx.fragment:fragment:${versions.fragment}"
fragment.runtime_ktx = "androidx.fragment:fragment-ktx:${versions.fragment}"
fragment.testing = "androidx.fragment:fragment-testing:${versions.fragment}"
deps.fragment = fragment

def glide = [:]
glide.runtime = "com.github.bumptech.glide:glide:$versions.glide"
glide.compiler = "com.github.bumptech.glide:compiler:$versions.glide"
deps.glide = glide

deps.hamcrest = "org.hamcrest:hamcrest-all:$versions.hamcrest"

deps.junit = "junit:junit:$versions.junit"

def kotlin = [:]
kotlin.stdlib = "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$versions.kotlin"
kotlin.test = "org.jetbrains.kotlin:kotlin-test-junit:$versions.kotlin"
kotlin.plugin = "org.jetbrains.kotlin:kotlin-gradle-plugin:$versions.kotlin"
kotlin.allopen = "org.jetbrains.kotlin:kotlin-allopen:$versions.kotlin"
deps.kotlin = kotlin

def lifecycle = [:]
lifecycle.runtime = "androidx.lifecycle:lifecycle-runtime:$versions.lifecycle"
lifecycle.java8 = "androidx.lifecycle:lifecycle-common-java8:$versions.lifecycle"
lifecycle.compiler = "androidx.lifecycle:lifecycle-compiler:$versions.lifecycle"
lifecycle.viewmodel_ktx = "androidx.lifecycle:lifecycle-viewmodel-ktx:$versions.lifecycle"
lifecycle.livedata_ktx = "androidx.lifecycle:lifecycle-livedata-ktx:$versions.lifecycle"
deps.lifecycle = lifecycle

deps.material = "com.google.android.material:material:$versions.material"

def mockito = [:]
mockito.core = "org.mockito:mockito-core:$versions.mockito"
mockito.all = "org.mockito:mockito-all:$versions.mockito_all"
mockito.android = "org.mockito:mockito-android:$versions.mockito_android"
deps.mockito = mockito

deps.mock_web_server = "com.squareup.okhttp3:mockwebserver:$versions.mockwebserver"

def navigation = [:]
navigation.runtime = "androidx.navigation:navigation-runtime:$versions.navigation"
navigation.runtime_ktx = "androidx.navigation:navigation-runtime-ktx:$versions.navigation"
navigation.fragment = "androidx.navigation:navigation-fragment:$versions.navigation"
navigation.fragment_ktx = "androidx.navigation:navigation-fragment-ktx:$versions.navigation"
navigation.testing = "androidx.navigation:navigation-testing:$versions.navigation"
navigation.ui = "androidx.navigation:navigation-ui:$versions.navigation"
navigation.ui_ktx = "androidx.navigation:navigation-ui-ktx:$versions.navigation"
navigation.safe_args_plugin = "androidx.navigation:navigation-safe-args-gradle-plugin:$versions.navigation"
deps.navigation = navigation

deps.okhttp_logging_interceptor = "com.squareup.okhttp3:logging-interceptor:${versions.okhttp_logging_interceptor}"

deps.paging_runtime = "androidx.paging:paging-runtime:$versions.paging"

deps.swiperefreshlayout = "androidx.swiperefreshlayout:swiperefreshlayout:$versions.swiperefreshlayout"

deps.recyclerview = "androidx.recyclerview:recyclerview:$versions.recyclerview"

def retrofit = [:]
retrofit.runtime = "com.squareup.retrofit2:retrofit:$versions.retrofit"
retrofit.gson = "com.squareup.retrofit2:converter-gson:$versions.retrofit"
retrofit.mock = "com.squareup.retrofit2:retrofit-mock:$versions.retrofit"
deps.retrofit = retrofit

deps.robolectric = "org.robolectric:robolectric:$versions.robolectric"

def room = [:]
room.runtime = "androidx.room:room-runtime:$versions.room"
room.compiler = "androidx.room:room-compiler:$versions.room"
room.ktx = "androidx.room:room-ktx:$versions.room"
room.paging = "androidx.room:room-paging:$versions.room"
room.rxjava2 = "androidx.room:room-rxjava2:$versions.room"
room.testing = "androidx.room:room-testing:$versions.room"
deps.room = room

deps.rx_android = "io.reactivex.rxjava2:rxandroid:$versions.rx_android"

deps.rxjava2 = "io.reactivex.rxjava2:rxjava:$versions.rxjava2"

deps.timber = "com.jakewharton.timber:timber:$versions.timber"

deps.transition = "androidx.transition:transition:$versions.transition"

deps.truth = "com.google.truth:truth:$versions.truth"

def work = [:]
work.runtime = "androidx.work:work-runtime:$versions.work"
work.testing = "androidx.work:work-testing:$versions.work"
work.firebase = "androidx.work:work-firebase:$versions.work"
work.runtime_ktx = "androidx.work:work-runtime-ktx:$versions.work"
work.multiprocess = "androidx.work:work-multiprocess:$versions.work"
deps.work = work

ext.deps = deps

def addRepos(RepositoryHandler handler) {
    handler.google()
    handler.jcenter()
    handler.maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }
}
ext.addRepos = this.&addRepos

3.build.gradle

buildscript {
    apply from: 'versions.gradle'
    addRepos(repositories)
    dependencies {
        classpath deps.android_gradle_plugin

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    addRepos(repositories)
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

4.Build.gradle in App

dependencies {
    implementation deps.app_compat
    implementation deps.fragment.runtime
    implementation deps.material
    // Architecture components
    implementation deps.lifecycle.runtime
    annotationProcessor deps.lifecycle.compiler
    implementation deps.room.runtime
    annotationProcessor deps.room.compiler
    implementation deps.room.rxjava2

    // RxJava
    implementation deps.rx_android
    implementation deps.rxjava2

    // Dependencies for local unit tests
    testImplementation deps.junit
    testImplementation deps.hamcrest
    testImplementation deps.arch_core.testing
    testImplementation deps.mockito.core

    // Android Testing Support Library's runner and rules
    androidTestImplementation deps.atsl.ext_junit
    androidTestImplementation deps.atsl.runner
    androidTestImplementation deps.atsl.rules
    androidTestImplementation deps.room.testing
    androidTestImplementation deps.arch_core.testing

    // Dependencies for Android unit tests
    androidTestImplementation deps.junit
    androidTestImplementation deps.mockito.core, { exclude group: 'net.bytebuddy' }
    androidTestImplementation deps.dexmaker

    // Espresso UI Testing
    androidTestImplementation deps.espresso.core
    androidTestImplementation deps.espresso.contrib
    androidTestImplementation deps.espresso.intents

    // Resolve conflicts between main and test APK:
    androidTestImplementation deps.annotations
    androidTestImplementation deps.app_compat
    androidTestImplementation deps.material
}

Guess you like

Origin blog.csdn.net/baidu_24743861/article/details/132513474