Android模块化开发流程梳理
Posted AnalyzeSystem
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android模块化开发流程梳理相关的知识,希望对你有一定的参考价值。
android技术发展日新月异,我这个乡下来的有点懵了,leader要求项目模块化开发,项目组不同的人负责不同的模块,网上检索出来的结果都是app+base+N个module+路由,博主摸索几千个日日夜夜总算是完成任务,在这里分享记录一下相关的知识点。
先创建主项目,项目内创建common基础开发库,再根据业务逻辑创建不同模块依赖common,主项目依赖module如下图
我们首先配置Project下的build.gradle文件,把版本号统写在一个类,这样方便项目构建版本管理
apply plugin: 'com.alibaba.arouter'
buildscript {
ext {
kotlin_version = '1.5.0'
minSdkVersion = 21
compileSdkVersion = 28
targetSdkVersion = 21
arouter_api_version = '1.4.1'
arouter_compiler_version = '1.2.2'
arouter_register = '1.0.2'
-----------------------------------此处省略---------------------------------------
}
dependencies {
-----------------------------------此处省略---------------------------------------
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "com.alibaba:arouter-register:$arouter_register"(自行参考Aroute配置)
}
接着配置开发基础库module_common,博主不喜欢用dataBind还是使用kotlin-android-extensions(不用的可以忽略plugin)
kotlin开发引入apply plugin: ‘kotlin-kapt’,在defaultConfig下配置kapt .arguments(路由使用Aroute,使用自行参考官方文档),不同的module的资源文件防止冲突 使用resourcePrefix “**_”,开发基础库的dependencies下不能使用implementation改为api,flavorDimensions使版本号保持纬度统一
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
android {
defaultConfig {
-----------------------------------此处省略---------------------------------------
resourcePrefix "common_"
flavorDimensions "versionCode"
kapt {
arguments {
arg("AROUTER_MODULE_NAME", project.getName())
}
}
kotlinOptions {
jvmTarget = "$jvmTarget"
}
}
dependencies {
api "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
api "com.alibaba:arouter-api:$arouter_api_version"
kapt "com.alibaba:arouter-compiler:$arouter_compiler_version"
-----------------------------------此处省略---------------------------------------
}
不同module分别引用module_common,同时都还需要重新依赖aroute 和一些基础开发库(kapt.arguments必不可少 )
apply plugin: 'kotlin-kapt'
-----------------------------------此处省略---------------------------------------
resourcePrefix "common_"
flavorDimensions "versionCode"
kapt {
arguments {
arg("AROUTER_MODULE_NAME", project.getName())
}
}
-----------------------------------此处省略---------------------------------------
dependencies {
implementation project(':module_common')
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation "androidx.core:core-ktx:$core_version"
implementation "androidx.appcompat:appcompat:$appcompat_version"
implementation "androidx.constraintlayout:constraintlayout:$constraintlayout_version"
implementation "com.google.android.material:material:$google_material"
api "com.alibaba:arouter-api:$arouter_api_version"
kapt "com.alibaba:arouter-compiler:$arouter_compiler_version"
}
项目构建的过程可能会爆一些看不懂的错误日志,网上查一下基本修改gradle.properties就可以解决了
下面是一点关于Arouter的基本配置使用实例,Application初始化Aroute,BaseActivity.Aroute注入
abstract class BaseActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(getContentViewResId())
ARouter.getInstance().inject(this)
initView()
}
}
open class BaseApplication : Application() {
var isDebug = true
override fun onCreate() {
super.onCreate()
if(isDebug){
ARouter.openLog()
ARouter.openLog()
}
ARouter.init(this)
}
override fun onTerminate() {
super.onTerminate()
ARouter.getInstance().destroy()
}
}
不同模块直接的界面跳转通过@Route配置path路径,Aroute build构建传递参数跳转界面
不同模块接收路由传递参数如下
@Route(path = HomePath.HOME_MAIN)
class HomeActivity : BaseActivity() {
@JvmField
@Autowired(name = "homeBean")
var homeBean: HomeBean? = null
override fun getContentViewResId(): Int {
return R.layout.home_activity_main
}
override fun initView() {
showTip.text = homeBean?.name
}
}
kotlin 项目构建好多坑,经常代码写着写着爆出莫名其妙的错误,一般清楚缓存重启都能解决,解决不了的都是修改gradle.properties一般都能解决
以上是关于Android模块化开发流程梳理的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段