kotlin中组件化开发

参考来源:参考文章
1.这里的模块要有:主模块(app),modulea,moduleb,modulec,common。
四个子模块均是在Project->app下新建的modele->Android Library
2.这里给出各个模块的build.gradle的配置:
(1)主模块(Project:项目名)的build.gradle中添加

ext{
    isDebug = false
    android = [
            compileSdkVersion: 29,
            buildToolsVersion :"29.0.3",
            minSdkVersion: 16,
            targetSdkVersion: 29,
            versionCode :1,
            versionName :"1.0"
    ]
}
//主要用于各个模块统一配置,看做通用配置常量就行

(2)主模块(Module:app)的build.gradle中


//***仅仅贴出关键部分,由于是kotlin,配置是不同于java的(这里指kapt这段)

kapt {
    arguments {
        arg("AROUTER_MODULE_NAME", project.getName())
    }
}
android {
    compileSdkVersion rootProject.ext.android.compileSdkVersion
    buildToolsVersion rootProject.ext.android.buildToolsVersion
    defaultConfig {
        applicationId "com.example.architectrue"
        minSdkVersion rootProject.ext.android.minSdkVersion
        targetSdkVersion rootProject.ext.android.targetSdkVersion
        versionCode rootProject.ext.android.versionCode
        versionName rootProject.ext.android.versionName

//下面是依赖中的,这里说明一下app:modulea是根据settings.gradle中配置的,不知为何参考的文章配置为:modulea,其他等同。

//    组件化开发
    if(!isDebug) {
        implementation project(':app:modulea')
        implementation project(':app:moduleb')
        implementation project(':app:modulec')
    }
    //ARouter
    implementation 'com.alibaba:arouter-api:1.5.1'
    kapt 'com.alibaba:arouter-compiler:1.5.1'

(3)moulea,moduleb,modulec中的build.gradle相同,如下

if (isDebug) {
    apply plugin: 'com.android.application'
} else {
    apply plugin: 'com.android.library'
}
apply plugin: 'kotlin-kapt'
kapt {
    arguments {
        arg("AROUTER_MODULE_NAME", project.getName())
    }
}
android {
    compileSdkVersion rootProject.ext.android.compileSdkVersion
    buildToolsVersion rootProject.ext.android.buildToolsVersion
    sourceSets {
        main {
            if (isDebug) {
                manifest.srcFile 'src/debug/AndroidManifest.xml'
            } else {
                manifest.srcFile 'src/release/AndroidManifest.xml'
                java {
                    exclude 'debug/**'
                }
            }
        }
    }
    defaultConfig {
        minSdkVersion rootProject.ext.android.minSdkVersion
        targetSdkVersion rootProject.ext.android.targetSdkVersion
        versionCode rootProject.ext.android.versionCode
        versionName rootProject.ext.android.versionName

//**依赖
  implementation project(':app:common')
    //ARouter
    implementation 'com.alibaba:arouter-api:1.5.1'
    kapt 'com.alibaba:arouter-compiler:1.5.1'

(4)common中的build.gradle如下

apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
kapt {
    arguments {
        arg("AROUTER_MODULE_NAME", project.getName())
    }
}
android {
    compileSdkVersion rootProject.ext.android.compileSdkVersion
    buildToolsVersion rootProject.ext.android.buildToolsVersion

    defaultConfig {
        minSdkVersion rootProject.ext.android.minSdkVersion
        targetSdkVersion rootProject.ext.android.targetSdkVersion
        versionCode rootProject.ext.android.versionCode
        versionName rootProject.ext.android.versionName
//**依赖,implementation要用api替代
    api 'com.alibaba:arouter-api:1.5.1'
    api 'androidx.constraintlayout:constraintlayout:2.0.4'
    kapt 'com.alibaba:arouter-compiler:1.5.1'
    

3.在modulea,moduleb,modulec的src目录下新建debug和release目录,
然后里面都建一个AndroidManifest.xml文件
(1)modulec中的debug中的AndroidManifest.xml内容如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.modulec">

    <application
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
<!--application里的属性必须和主工程里的一致,不然会报错Manifest merger failed with multiple errors, see logs-->
<!--若真要不一致,可以在主工程的application标签中添加tools:replace="android:label,android:theme,android:icon,android:roundIcon"-->

(2)modulec中的release的AndroidManifest.xml内容如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.modulec" />

到这里配置就完成了,关于ARouter的使用这里也有坑,这里给一下。
(1)路由注解:由于是使用kotlin,得加上@JvmField,不然一直报成员private的错误。
@JvmField
@Autowired
var name: String? = “”
(2)路径必须有两级以上 path = “/modulea/MainActivity”
(3)即使common没有用到ARouter,也得配置,上面已经配置了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值