区块链技术博客
www.b2bchain.cn

AucFrame 之统一管理 Gradle求职学习资料

本文介绍了AucFrame 之统一管理 Gradle求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

「AucFrame 之统一管理 Gradle」源码传送门

管理 lib 的 Gradle

首先,我们再看一遍 AucFrame 的架构图。

AucFrame 之统一管理 Gradle

我们从下开始往上搭建,在项目中新建一个 Android Library 类型的 module,输入 Library name 为 base,Module name 为 :lib:base,点击 Finish 即可,把 androidTest 以及 test 测试目录删了也没事,可以看到 setting.gradle 文件中新增了 :lib:base,结果如下所示:

AucFrame 之统一管理 Gradle

同样的方式,我们创建 :lib:common,接下来配置他们的依赖关系。

我们可以看到 basecommonbuild.gralde 简直一毛一样,这样我们是否可以把他们都抽出去呢,答案是肯定的。

我们在项目根目录创建 buildLib.gradle 文件,代表所有 lib 类型的模块都可以使用它,我们放入公共内容即可,具体如下所示:

apply {     plugin "com.android.library"     plugin "kotlin-android"     plugin "kotlin-android-extensions" }  android {     compileSdkVersion Config.compileSdkVersion      defaultConfig {         minSdkVersion Config.minSdkVersion         versionCode Config.versionCode         versionName Config.versionName     }      buildTypes {         release {             minifyEnabled false             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'         }     }      lintOptions {         abortOnError false     } }

可以看到,我们使用到了 Config.groovy 中的属性,这样方便所有 lib 的版本都一致,说到版本一致,那么我们还要统一第三方库的依赖,很简单,我们在 Config.groovy 中创建依赖库的配置,如今它长这样:

class Config {      static applicationId = 'com.blankj.aucframe'            // TODO: MODIFY     static appName = 'AucFrame'                             // TODO: MODIFY      static compileSdkVersion = 29                           // TODO: MODIFY     static minSdkVersion = 21                               // TODO: MODIFY     static targetSdkVersion = 29                            // TODO: MODIFY     static versionCode = 1_000_000                          // TODO: MODIFY     static versionName = '1.0.0'// E.g. 1.9.72 => 1,009,072 // TODO: MODIFY      static gradlePluginVersion = '3.6.3'     static kotlinVersion = '1.3.71'     static androidxVersion = '1.0.0'      static depConfig = [             plugin_gradle      : "com.android.tools.build:gradle:$gradlePluginVersion",             plugin_kotlin      : "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion",              androidx_appcompat : "androidx.appcompat:appcompat:$androidxVersion",             androidx_material  : "com.google.android.material:material:$androidxVersion",             androidx_constraint: "androidx.constraintlayout:constraintlayout:1.1.3",             androidx_multidex  : "androidx.multidex:multidex:2.0.0",              kotlin             : "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion",             kotlinx            : 'androidx.core:core-ktx:1.2.0',              utilcode           : "com.blankj:utilcode:1.28.4",             free_proguard      : "com.blankj:free-proguard:1.0.1",             swipe_panel        : "com.blankj:swipe-panel:1.1",              leakcanary         : "com.squareup.leakcanary:leakcanary-android:2.1",     ] }

我们先修改根目录的 build.gradle 中的 dependencies,具体如下所示:

dependencies {     classpath Config.depConfig.plugin_gradle     classpath Config.depConfig.plugin_kotlin }

接下来我们修改 basecommon 模块,我们往 basebuild.gradle 写入如下完整内容:

apply {     from "${project.rootDir.path}/buildLib.gradle" }  dependencies {     implementation fileTree(include: ['*.jar'], dir: 'libs')     api Config.depConfig.utilcode     api Config.depConfig.free_proguard     api Config.depConfig.swipe_panel      api Config.depConfig.androidx_appcompat     api Config.depConfig.androidx_material     api Config.depConfig.androidx_constraint     api Config.depConfig.androidx_multidex     api Config.depConfig.kotlin     api Config.depConfig.kotlinx }

由于我们 common 模块是依赖 base 的,所以 common 的配置如下所示:

apply {     from "${project.rootDir.path}/buildLib.gradle" }  dependencies {     api project(":lib:base") }

写入的内容都比较简单,我就不一一解释了,下面我们来管理 feature。

现在我们往 base 模块放两个基础类 ———— BaseApplicationBaseActivity,在 common 中放入两个公共类 ———— CommonApplicationCommonBackActivity 以及一些公共资源,具体请查阅源码,接下来让我们来管理 frature。

管理 feature 的 Gradle

管理 export 的 Gradle

再看一遍架构图,我们可以发现 feature 中每个 feature 中都存有 app、pkg(、export) 模块,我们自底向上来一步步操作,我们和创建 :lib:base 模块类似,分别创建 :feature:feature0:export:feature:feature1:export 模块,注意两个 feature 中的 export 包名要区分开,我这里分别是 com.blankj.feature0.exportcom.blankj.feature1.export,建立完之后的 setting.gradle 文件如下所示:

include ':app' include ':lib:base' include ':lib:common' include ':feature:feature0:export' include ':feature:feature1:export'

由于 export 是依赖 common 的,所以两个 exportbuild.gradle 如下所示:

apply {     from "${project.rootDir.path}/buildLib.gradle" }  dependencies {     api project(":lib:common") }

gradle 同步一下查看下是否有异常。

管理 pkg 的 Gradle

我们以相同的方式创建 :feature:feature0:pkg:feature:feature1:pkg 模块,包名分别是 com.blankj.feature0.pkgcom.blankj.feature1.pkg,建立完后的 setting.gradle 文件如下所示:

include ':app', ':lib:base', ':lib:common',         ':feature:feature0:export', ':feature:feature1:export',         ':feature:feature0:pkg', ':feature:feature1:pkg'

pkg 我们暂时只依赖各自的 export,后面我们会再改成全量依赖 export,所以 :feature:feature0:pkgbuild.gradle 如下所示:

apply {     from "${project.rootDir.path}/buildLib.gradle" }  dependencies {     api project(":feature:feature0:export") }

:feature:feature1:pkgbuild.gradle 同理。

gradle 同步一下查看下是否有异常,现在我们在 :feature:feature0:pkg 中添加一个 Feature0Activity,以及在 :feature:feature1:pkg 中添加一个 Feature1Activity,具体请参看源码。

管理 app 的 Gradle

pkg 上层就是 mock 层了,因为这层是可选的,我们暂时先跳过,后面我们用到的时候再来搞定它,那么现在就只剩下各个 app 了,首先,我们利用类似和 buildLib.gradle 相似的方式,在根目录创建公共的 buildApp.gradle 文件,内容如下所示。

“`groovy
apply {
plugin “com.android.application”
plugin “kotlin-android”
plugin “kotlin-android-extensions”
}

「AucFrame 之统一管理 Gradle」源码传送门

管理 lib 的 Gradle

首先,我们再看一遍 AucFrame 的架构图。

AucFrame 之统一管理 Gradle

我们从下开始往上搭建,在项目中新建一个 Android Library 类型的 module,输入 Library name 为 base,Module name 为 :lib:base,点击 Finish 即可,把 androidTest 以及 test 测试目录删了也没事,可以看到 setting.gradle 文件中新增了 :lib:base,结果如下所示:

AucFrame 之统一管理 Gradle

同样的方式,我们创建 :lib:common,接下来配置他们的依赖关系。

我们可以看到 basecommonbuild.gralde 简直一毛一样,这样我们是否可以把他们都抽出去呢,答案是肯定的。

我们在项目根目录创建 buildLib.gradle 文件,代表所有 lib 类型的模块都可以使用它,我们放入公共内容即可,具体如下所示:

apply {     plugin "com.android.library"     plugin "kotlin-android"     plugin "kotlin-android-extensions" }  android {     compileSdkVersion Config.compileSdkVersion      defaultConfig {         minSdkVersion Config.minSdkVersion         versionCode Config.versionCode         versionName Config.versionName     }      buildTypes {         release {             minifyEnabled false             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'         }     }      lintOptions {         abortOnError false     } }

可以看到,我们使用到了 Config.groovy 中的属性,这样方便所有 lib 的版本都一致,说到版本一致,那么我们还要统一第三方库的依赖,很简单,我们在 Config.groovy 中创建依赖库的配置,如今它长这样:

class Config {      static applicationId = 'com.blankj.aucframe'            // TODO: MODIFY     static appName = 'AucFrame'                             // TODO: MODIFY      static compileSdkVersion = 29                           // TODO: MODIFY     static minSdkVersion = 21                               // TODO: MODIFY     static targetSdkVersion = 29                            // TODO: MODIFY     static versionCode = 1_000_000                          // TODO: MODIFY     static versionName = '1.0.0'// E.g. 1.9.72 => 1,009,072 // TODO: MODIFY      static gradlePluginVersion = '3.6.3'     static kotlinVersion = '1.3.71'     static androidxVersion = '1.0.0'      static depConfig = [             plugin_gradle      : "com.android.tools.build:gradle:$gradlePluginVersion",             plugin_kotlin      : "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion",              androidx_appcompat : "androidx.appcompat:appcompat:$androidxVersion",             androidx_material  : "com.google.android.material:material:$androidxVersion",             androidx_constraint: "androidx.constraintlayout:constraintlayout:1.1.3",             androidx_multidex  : "androidx.multidex:multidex:2.0.0",              kotlin             : "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion",             kotlinx            : 'androidx.core:core-ktx:1.2.0',              utilcode           : "com.blankj:utilcode:1.28.4",             free_proguard      : "com.blankj:free-proguard:1.0.1",             swipe_panel        : "com.blankj:swipe-panel:1.1",              leakcanary         : "com.squareup.leakcanary:leakcanary-android:2.1",     ] }

我们先修改根目录的 build.gradle 中的 dependencies,具体如下所示:

dependencies {     classpath Config.depConfig.plugin_gradle     classpath Config.depConfig.plugin_kotlin }

接下来我们修改 basecommon 模块,我们往 basebuild.gradle 写入如下完整内容:

apply {     from "${project.rootDir.path}/buildLib.gradle" }  dependencies {     implementation fileTree(include: ['*.jar'], dir: 'libs')     api Config.depConfig.utilcode     api Config.depConfig.free_proguard     api Config.depConfig.swipe_panel      api Config.depConfig.androidx_appcompat     api Config.depConfig.androidx_material     api Config.depConfig.androidx_constraint     api Config.depConfig.androidx_multidex     api Config.depConfig.kotlin     api Config.depConfig.kotlinx }

由于我们 common 模块是依赖 base 的,所以 common 的配置如下所示:

apply {     from "${project.rootDir.path}/buildLib.gradle" }  dependencies {     api project(":lib:base") }

写入的内容都比较简单,我就不一一解释了,下面我们来管理 feature。

现在我们往 base 模块放两个基础类 ———— BaseApplicationBaseActivity,在 common 中放入两个公共类 ———— CommonApplicationCommonBackActivity 以及一些公共资源,具体请查阅源码,接下来让我们来管理 frature。

管理 feature 的 Gradle

管理 export 的 Gradle

再看一遍架构图,我们可以发现 feature 中每个 feature 中都存有 app、pkg(、export) 模块,我们自底向上来一步步操作,我们和创建 :lib:base 模块类似,分别创建 :feature:feature0:export:feature:feature1:export 模块,注意两个 feature 中的 export 包名要区分开,我这里分别是 com.blankj.feature0.exportcom.blankj.feature1.export,建立完之后的 setting.gradle 文件如下所示:

include ':app' include ':lib:base' include ':lib:common' include ':feature:feature0:export' include ':feature:feature1:export'

由于 export 是依赖 common 的,所以两个 exportbuild.gradle 如下所示:

apply {     from "${project.rootDir.path}/buildLib.gradle" }  dependencies {     api project(":lib:common") }

gradle 同步一下查看下是否有异常。

管理 pkg 的 Gradle

我们以相同的方式创建 :feature:feature0:pkg:feature:feature1:pkg 模块,包名分别是 com.blankj.feature0.pkgcom.blankj.feature1.pkg,建立完后的 setting.gradle 文件如下所示:

include ':app', ':lib:base', ':lib:common',         ':feature:feature0:export', ':feature:feature1:export',         ':feature:feature0:pkg', ':feature:feature1:pkg'

pkg 我们暂时只依赖各自的 export,后面我们会再改成全量依赖 export,所以 :feature:feature0:pkgbuild.gradle 如下所示:

apply {     from "${project.rootDir.path}/buildLib.gradle" }  dependencies {     api project(":feature:feature0:export") }

:feature:feature1:pkgbuild.gradle 同理。

gradle 同步一下查看下是否有异常,现在我们在 :feature:feature0:pkg 中添加一个 Feature0Activity,以及在 :feature:feature1:pkg 中添加一个 Feature1Activity,具体请参看源码。

管理 app 的 Gradle

pkg 上层就是 mock 层了,因为这层是可选的,我们暂时先跳过,后面我们用到的时候再来搞定它,那么现在就只剩下各个 app 了,首先,我们利用类似和 buildLib.gradle 相似的方式,在根目录创建公共的 buildApp.gradle 文件,内容如下所示。

“`groovy
apply {
plugin “com.android.application”
plugin “kotlin-android”
plugin “kotlin-android-extensions”
}

「AucFrame 之统一管理 Gradle」源码传送门

管理 lib 的 Gradle

首先,我们再看一遍 AucFrame 的架构图。

AucFrame 之统一管理 Gradle

我们从下开始往上搭建,在项目中新建一个 Android Library 类型的 module,输入 Library name 为 base,Module name 为 :lib:base,点击 Finish 即可,把 androidTest 以及 test 测试目录删了也没事,可以看到 setting.gradle 文件中新增了 :lib:base,结果如下所示:

AucFrame 之统一管理 Gradle

同样的方式,我们创建 :lib:common,接下来配置他们的依赖关系。

我们可以看到 basecommonbuild.gralde 简直一毛一样,这样我们是否可以把他们都抽出去呢,答案是肯定的。

我们在项目根目录创建 buildLib.gradle 文件,代表所有 lib 类型的模块都可以使用它,我们放入公共内容即可,具体如下所示:

apply {     plugin "com.android.library"     plugin "kotlin-android"     plugin "kotlin-android-extensions" }  android {     compileSdkVersion Config.compileSdkVersion      defaultConfig {         minSdkVersion Config.minSdkVersion         versionCode Config.versionCode         versionName Config.versionName     }      buildTypes {         release {             minifyEnabled false             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'         }     }      lintOptions {         abortOnError false     } }

可以看到,我们使用到了 Config.groovy 中的属性,这样方便所有 lib 的版本都一致,说到版本一致,那么我们还要统一第三方库的依赖,很简单,我们在 Config.groovy 中创建依赖库的配置,如今它长这样:

class Config {      static applicationId = 'com.blankj.aucframe'            // TODO: MODIFY     static appName = 'AucFrame'                             // TODO: MODIFY      static compileSdkVersion = 29                           // TODO: MODIFY     static minSdkVersion = 21                               // TODO: MODIFY     static targetSdkVersion = 29                            // TODO: MODIFY     static versionCode = 1_000_000                          // TODO: MODIFY     static versionName = '1.0.0'// E.g. 1.9.72 => 1,009,072 // TODO: MODIFY      static gradlePluginVersion = '3.6.3'     static kotlinVersion = '1.3.71'     static androidxVersion = '1.0.0'      static depConfig = [             plugin_gradle      : "com.android.tools.build:gradle:$gradlePluginVersion",             plugin_kotlin      : "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion",              androidx_appcompat : "androidx.appcompat:appcompat:$androidxVersion",             androidx_material  : "com.google.android.material:material:$androidxVersion",             androidx_constraint: "androidx.constraintlayout:constraintlayout:1.1.3",             androidx_multidex  : "androidx.multidex:multidex:2.0.0",              kotlin             : "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion",             kotlinx            : 'androidx.core:core-ktx:1.2.0',              utilcode           : "com.blankj:utilcode:1.28.4",             free_proguard      : "com.blankj:free-proguard:1.0.1",             swipe_panel        : "com.blankj:swipe-panel:1.1",              leakcanary         : "com.squareup.leakcanary:leakcanary-android:2.1",     ] }

我们先修改根目录的 build.gradle 中的 dependencies,具体如下所示:

dependencies {     classpath Config.depConfig.plugin_gradle     classpath Config.depConfig.plugin_kotlin }

接下来我们修改 basecommon 模块,我们往 basebuild.gradle 写入如下完整内容:

apply {     from "${project.rootDir.path}/buildLib.gradle" }  dependencies {     implementation fileTree(include: ['*.jar'], dir: 'libs')     api Config.depConfig.utilcode     api Config.depConfig.free_proguard     api Config.depConfig.swipe_panel      api Config.depConfig.androidx_appcompat     api Config.depConfig.androidx_material     api Config.depConfig.androidx_constraint     api Config.depConfig.androidx_multidex     api Config.depConfig.kotlin     api Config.depConfig.kotlinx }

由于我们 common 模块是依赖 base 的,所以 common 的配置如下所示:

apply {     from "${project.rootDir.path}/buildLib.gradle" }  dependencies {     api project(":lib:base") }

写入的内容都比较简单,我就不一一解释了,下面我们来管理 feature。

现在我们往 base 模块放两个基础类 ———— BaseApplicationBaseActivity,在 common 中放入两个公共类 ———— CommonApplicationCommonBackActivity 以及一些公共资源,具体请查阅源码,接下来让我们来管理 frature。

管理 feature 的 Gradle

管理 export 的 Gradle

再看一遍架构图,我们可以发现 feature 中每个 feature 中都存有 app、pkg(、export) 模块,我们自底向上来一步步操作,我们和创建 :lib:base 模块类似,分别创建 :feature:feature0:export:feature:feature1:export 模块,注意两个 feature 中的 export 包名要区分开,我这里分别是 com.blankj.feature0.exportcom.blankj.feature1.export,建立完之后的 setting.gradle 文件如下所示:

include ':app' include ':lib:base' include ':lib:common' include ':feature:feature0:export' include ':feature:feature1:export'

由于 export 是依赖 common 的,所以两个 exportbuild.gradle 如下所示:

apply {     from "${project.rootDir.path}/buildLib.gradle" }  dependencies {     api project(":lib:common") }

gradle 同步一下查看下是否有异常。

管理 pkg 的 Gradle

我们以相同的方式创建 :feature:feature0:pkg:feature:feature1:pkg 模块,包名分别是 com.blankj.feature0.pkgcom.blankj.feature1.pkg,建立完后的 setting.gradle 文件如下所示:

include ':app', ':lib:base', ':lib:common',         ':feature:feature0:export', ':feature:feature1:export',         ':feature:feature0:pkg', ':feature:feature1:pkg'

pkg 我们暂时只依赖各自的 export,后面我们会再改成全量依赖 export,所以 :feature:feature0:pkgbuild.gradle 如下所示:

apply {     from "${project.rootDir.path}/buildLib.gradle" }  dependencies {     api project(":feature:feature0:export") }

:feature:feature1:pkgbuild.gradle 同理。

gradle 同步一下查看下是否有异常,现在我们在 :feature:feature0:pkg 中添加一个 Feature0Activity,以及在 :feature:feature1:pkg 中添加一个 Feature1Activity,具体请参看源码。

管理 app 的 Gradle

pkg 上层就是 mock 层了,因为这层是可选的,我们暂时先跳过,后面我们用到的时候再来搞定它,那么现在就只剩下各个 app 了,首先,我们利用类似和 buildLib.gradle 相似的方式,在根目录创建公共的 buildApp.gradle 文件,内容如下所示。

“`groovy
apply {
plugin “com.android.application”
plugin “kotlin-android”
plugin “kotlin-android-extensions”
}

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » AucFrame 之统一管理 Gradle求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们