本周知识清单
自己在公司看公司源码的时候,发现公司源码都是组件化的搭建,然后配置文件里面都是gradle来构建自动化,然自己之前学习并没有很深入的去学习,这次趁机去了解这个gradle了。Gradle 并不仅仅是一个语言,而是一套构建工具。在早期,软件构建只有编译和打包等简单需求,但软件开发的发展,现在的构建变得更加复杂。而构建工具就是在这一背景下衍生出来的工具链,它能够帮助开发者可重复、自动化地生成目标产物。然后对于我来说自己最近也得准备秋招,关于这些进阶的东西学习不是很深刻,以后有时间再回来恶补,关于Gradle学习推荐学习:
- 要点提炼| Gradle指南
- 《Android Gradle权威指南》
关于《Android Gradle权威指南》我自己也是打算去看的,等我秋招上岸,必须安排。
Application
extends Application 在他当oncreate 方法中都会做一些初始化工作
MainActivity extends AppCompatActivity与extends Activity的区别
public class MainActivity extends AppCompatActivity
public class MainActivity2 extends Activity
问:AppCompatActivity和Activity有什么区别,Android studio从启动到创建MainActivity的时候就自动extends AppCompatActivity,为什么不extends Activity?
答:AppCompatActivity是继承自v4包的FragmentAvtivity,并且加入了很多新特性。这个可以很好的兼容老设备。
AppCompatActivity 和 Activity 的区别主要体现在app运行后的界面(app name显示或者不显示),对程序本身没有影响。

继承AppCompatActivity后的运行界面

继承了Activity后的运行界面
差了明显的一个Label也就是项目的标签。标签的文字来源于AndroidManifest.xml中application中的android:label 如果继承的是Activity那这个标签的内容不会显示出来。
组件化基于可重用的目的,将应用拆分成多个独立组件,以减少耦合:




建议:
新建四个module
组件的依赖关系是:
我们都知道,android的项目构建是用gradle,我们使用组件化项目,每个人开发的组件build.gradle配置就得一样,不然就得寄,当然这些模块,我们怎么改呢,很显然,我们在根的build.gradle文件配置一个ext 文件,其他的module的build.gradle就去读取根的build.gradle文件配置就大功告成
改根的build.gradle文件配置
改libBase的build.gradle文件配置

改login的build.gradle文件配置

改main的build.gradle文件配置(直接放配置文件)
def cfg = rootProject.ext
if (cfg.isDebug) {
apply plugin: 'com.android.application'
} else {
apply plugin: 'com.android.library'
}
android {
compileSdk cfg.android.compileSdkVersion
defaultConfig {
if (cfg.isDebug) {
applicationId cfg.applicationId.login
}
minSdk cfg.android.minSdkVersion
targetSdk cfg.android.targetSdkVersion
versionCode cfg.android.versionCode
versionName cfg.android.versionName
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
}
sourceSets {
main {
if (cfg.isDebug) {
manifest.srcFile 'src/main/debug/AndroidManifest.xml'
} else {
manifest.srcFile 'src/main/AndroidManifest.xml'
}
}
}
}
dependencies {
implementation project(':modulesBase:libBase')
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
def cfg = rootProject.ext
apply plugin: 'com.android.library'
android {
compileSdk cfg.android.compileSdkVersion
defaultConfig {
minSdk cfg.android.minSdkVersion
targetSdk cfg.android.targetSdkVersion
versionCode cfg.android.versionCode
versionName cfg.android.versionName
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
}
}
dependencies {
implementation project(':modulesBase:libBase')
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
Android 中的界面跳转那是相当简单,但是在组件化开发中,由于不同组件式没有相互依赖的,所以不可以直接访问彼此的类,这时候就没办法通过显式的方式实现了。
所以在这里咱们采取更加灵活的一种方式,使用 Alibaba 开源的 ARouter 来实现。
一个用于帮助 Android App 进行组件化改造的框架 —— 支持模块间的路由、通信、解耦
ext 文件已经配置了依赖


至此路由配置完成。


推荐阅读:Android 手把手带你搭建一个组件化项目架构
CSDN demo:https://download.csdn.net/download/weixin_45882303/86261212