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一般都能解决

源码地址:https://gitee.com/analyzesystem/develop-android

以上是关于Android模块化开发流程梳理的主要内容,如果未能解决你的问题,请参考以下文章

Android模块化开发流程梳理

工作效率:Android开发流程梳理

使用阿里ARouter路由实现组件化(模块化)开发流程

Android库项目中的资源ID冲突

Android 一步步梳理Facebook登录流程

Android Binder之底层原理+上层AIDL流程梳理