Android组件化即ARouter的配置与使用(kotlin)

文章目录

  • 一. 统一版本管理
  • 二. 动态切换library和application
  • 三. 合并AndroidManifest.xml
  • 四. 其他合并的注意点
    • 1. 合并Application的方法
    • 2. 资源冲突整合
  • 五. 组件间的通信
  • 六. ARouter的使用
    • 1. 导入:
    • 2. 在Application中配置
    • 3. 使用

一. 统一版本管理

  1. 根目录下新建一个config.gradle
    ext {
        isApplication = true
        /**
         * app build
         */
        android = [
                applicationId    : "com.yiba.galleytest",	
                compileSdkVersion: 28,
                minSdkVersion    : 17,
                targetSdkVersion : 28,
                versionCode      : 1,
                versionName      : "1.0"
        ]
    
        /**
         * dependencies version
         */
        dependencies = [
                appcompat: "androidx.appcompat:appcompat:1.0.2",
                gson     : "2.8.5"
        ]
    }
    
  2. 在工程build.gradle中添加apply from:"config.gradle"
  3. 替换依赖
    implementation rootProject.ext.dependencies.appcompat
    或
    api "com.google.code.gson:gson:${config.dependencies.gson}"	//此处必须是双引号
    

二. 动态切换library和application

  1. 定义一个boolean值作为是否为library config.gradle中 (如以上代码中的isApplication)
  • 也可以定义在gradle.properties文件中isApplication=true使用则为isApplication.toBoolean()
  1. 需要替换的是applicationId 和顶部的apply from
    if (rootProject.ext.isApplication) {		//isApplication.toBoolean()
        apply plugin: 'com.android.application'
    } else {
        apply plugin: 'com.android.library'
    }
    

三. 合并AndroidManifest.xml

  1. 定义debug和release文件夹(java文件夹平级)放置不同的Manifest
  2. build中加入
    android标签下
    sourceSets {
        main {
            if (rootProject.ext.isApplication) {
                manifest.srcFile 'src/main/debug/AndroidManifest.xml'
            } else {
                manifest.srcFile 'src/main/release/AndroidManifest.xml'
                java {
                    exclude 'debug/**'	//移除debug文件夹下的资源,即 debug/AndroidManifest.xml
                }
            }
        }
    }
    

四. 其他合并的注意点

1. 合并Application的方法

  • module需要定义Application的时候, 在java文件夹下新建debug文件夹下定义Application, 在debug中的Manifest中注册

2. 资源冲突整合

  • 在module的build.gradle的defaultConfig标签下加上resourcePrefix "splash_", 即给资源名加前缀
  • 不要选择忽略前缀tools:ignore="ResourceName" ×!

五. 组件间的通信

  • 使用Intent传递
    需要在Manifest中设置activity的android:exported="true"
    val class : Class = Class.forName(包名.BActivity)
    val intent = Intent(AActivity.this, class)
    startActivity(intent)
    
  • 使用EventBus
  • 使用ARouter

六. ARouter的使用

1. 导入:

在每个module中导入依赖

apply plugin: 'kotlin-kapt'
kapt {
    arguments {
        arg("AROUTER_MODULE_NAME", project.getName())
    }
}
api 'com.alibaba:arouter-api:1.4.0'	//这个在library中导入即可
kapt 'com.alibaba:arouter-compiler:1.2.2'

2. 在Application中配置

if (BuildConfig.DEBUG) {
    // 日志开启
    ARouter.openLog()
    // 调试模式开启,如果在install run模式下运行,则必须开启调试模式
    ARouter.openDebug()
}
ARouter.init(this)
override fun onTerminate() {
    super.onTerminate()
    ARouter.getInstance().destroy()
}

3. 使用

  • 跳转页:

    ARouter.getInstance()
            .build("a/b")
            .withInt("i", i)    
            .navigation()
    
  • 目标页:

  1. 注入
    ARouter.getInstance().inject(this)	//写在BaseActivity中即可
    
  2. 题头加入注解
    @Route(path = "a/b")
    
  3. 获取传递来的数据
    @Autowired(name = "i")
    @JvmField	//必须加上,否则无法编译
    var i: Int = -1
    

你可能感兴趣的:(笔记)