1.打开Project找到两个gradel文件
2.项目根目录创建version.gradle文件
Groovy
/**
* 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
Groovy
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.App中build.gradle
Groovy
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
}