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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值