本文 已参与「新人创作礼」活动,一起开启掘金创作之路。
说一个现象,在我们写Android的时候,我们经常会创建很多的build.gradle,那么让我们苦恼的是,这么的gradle,经常有很多重复的代码,今天我们来梳理下这部分的代码,用比较好的实现去改进它
1、现象
比如我们的项目中有很多的独立模块,每个模块都有这样的文件,这里面很多代码都是相似的,包括app模块中的build.gradle,如果我们依赖的模块比较多,就会被这么多的依赖弄的焦头烂额
2、解决方案
1、创建一个独立的gradle文件
我们需要做的是,将重复的东西都写在这里面
2、移植内容
将app文件夹下的build.gradle内容移动到这里 但是需要注意的是,并不是全部移植到这里,还有几个数据是不能移动的,属于每个模块的标志
apply plugin:'kotlin-android'
apply plugin:'kotlin-parcelize'
apply plugin:'kotlin-kapt'
apply plugin:'androidx.navigation.safeargs.kotlin'
android{
compileSdk compile_sdk_version
buildToolsVersion build_tools_version
defaultConfig {
minSdk min_sdk_version
targetSdk target_sdk_version
versionCode lib_version_code
versionName lib_version_name
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
buildFeatures {
viewBinding true
}
}
dependencies {
implementation fileTree(include: ['*.jar'],dir: 'libs')
//region平台相关的基础库
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.5"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.5"
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation "androidx.core:core-ktx : 1.2.0"
implementation 'androidx.fragment : fragment-ktx:1.2.4'
implementation 'androidx.activity:activity-ktx:1.1.0'
implementation "androidx.constraintlayout:constraintlayout:2.0.0-beta6//endregion"
//region jetPack libs
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation 'androidx.lifecycle:lifecycle-livedata:2.2.0'
implementation 'androidx.lifecycle:lifecycle-viewmodel:2.2.0'
implementation 'androidx.lifecycle:lifecycle-runtime:2.2.0'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.2.0'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0'
kapt "androidx.lifecycle:lifecycle-common-java8:2.2.0"
implementation 'androidx.room:room-runtime:2.2.5'
implementation 'androidx.room:room-common:2.2.5'
implementation 'androidx.room:room-ktx:2.2.5'
kapt "androidx.room:room-compiler:2.2.5"
implementation 'androidx.paging:paging-runtime:2.1.2'
implementation 'androidx.paging:paging-runtime-ktx;2.1.2'
implementation 'androidx.paging:paging-common:2.1.2'
implementation 'androidx.paging:paging-common-ktx:2.1.2'
implementation 'androidx.work:work-runtime:2.3.4'
implementation 'androidx.work:work-runtime-ktx:2.3.4'
//注意配置navigation版本号的时候,project下的build.gradle的class path也需要同步navigation的版本号配置
// implementation "androidx.navigation:navigation-ui:$navigation_version"
implementation "androidx.navigation;navigation-ui-ktx:$navigation_version"
implementation "androidx.navigation:navigation-fragment:$navigation_version"
implementation "androidx.navigation:navigation-fragment-ktx:$navigation_version"
implementation "androidx.navigation:navigation-runtime :$navigation_version"
//region test iibs
testImplementation 'junit:junit:4.13'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test:core:1.2.0'
androidTestImplementation 'androidx.test:core-ktx:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
//
// endregion
}
不可移动的部分
plugins {
id 'com.android.application'
}
apply from: "../dependencies.gradle"
android {
defaultConfig {
applicationId "vip.hblg.myapp"
}
}
dependencies {
}
id 'com.android.application' 表示的是当前模块为一个应用 id 'com.android.library' 表示的是当前模块为一个库,并非一个应用 applicationId 表示的是应用的包名
3、更改库中的内容
app:
其他模块:
可以看到,很方便的实现了公用一个gradle的内容,并且在每个模块里只需要少量的代码就可以实现,在app和其他模块中,只有com.android.application不一样,其他的都是相同
总结
采用这种方式,可以极大的简化代码,帮助我们梳理整个项目依赖和配置的信息