Android組件化即ARouter的配置與使用(kotlin)

一. 統一版本管理

  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
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章