ARouter路由

2022-05-31  本文已影响0人  Mr_不靠谱_先森

项目简介

官方介绍ARouter is a framework for assisting in the renovation of Android componentization (帮助 Android App 进行组件化改造的路由框架)
通俗的介绍阿里路由以及使用ARouter的好处,我们所使用的原生路由方案一般是通过显式intent和隐式intent两种方式实现的(这里主要是指跳转Activity or Fragment)。在显式intent的情况下,因为会存在直接的类依赖的问题,导致耦合非常严重;而在隐式intent情况下,则会出现规则集中式管理,导致协作变得非常困难。一般而言配置规则都是在Manifest中的,这就导致了扩展性较差。除此之外,使用原生的路由方案会出现跳转过程无法控制的问题,因为一旦使用了StartActivity()就无法插手其中任何环节了,只能交给系统管理,这就导致了在跳转失败的情况下无法降级,而是会直接抛出运营级的异常。这时候如果考虑使用自定义的路由组件就可以解决以上问题,比如通过URL索引就可以解决类依赖的问题;通过分布式管理页面配置可以解决隐式intent中集中式管理Path的问题;自己实现整个路由过程也可以拥有良好的扩展性,还可以通过AOP的方式解决跳转过程无法控制的问题,与此同时也能够提供非常灵活的降级方式。
源码地址https://github.com/alibaba/ARouter

使用方法

1,Adding dependencies and configurations

plugins {
    id 'com.android.library'
    id 'kotlin-android'
    id 'maven'
    id 'kotlin-kapt'
}
kapt {
    arguments {
        arg("AROUTER_MODULE_NAME", project.getName())
    }
}
def config = rootProject.ext
android {
    compileSdkVersion config.android.compileSdkVersion
    buildToolsVersion config.android.buildToolsVersion

    defaultConfig {
        minSdkVersion config.android.minSdkVersion
        targetSdkVersion config.android.targetSdkVersion

        consumerProguardFiles "consumer-rules.pro"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compileOnly 'androidx.core:core-ktx:1.2.0'
    compileOnly 'androidx.appcompat:appcompat:1.1.0'
    api 'com.alibaba:arouter-api:1.5.1'
    kapt 'com.alibaba:arouter-compiler:1.5.1'
    compileOnly "com.google.code.gson:gson:2.8.6"
}

uploadArchives {
    repositories.mavenDeployer {
        // maven_lib_encode一些参数
        def mavenConstant = config.maven_lib_dlRouter
        // maven公共参数
        def mavenPublic = config.maven_public

        pom.project {
            version mavenConstant["version"]
            artifactId mavenConstant["artifactId"]
            groupId mavenPublic["groupId"]
            packaging mavenPublic["type"]
            description mavenConstant["description"]
        }
        // 是否为snapshot包
        def isSnapshot = pom.version.endsWith('-SNAPSHOT')
        def userName = mavenPublic["userName"]
        def passWord = mavenPublic["passWord"]
        // snapshot
        if (isSnapshot) {
            snapshotRepository(url: mavenPublic["snapShotUrl"]) {
                authentication(userName: userName, password: passWord)
            }
        }
        // release
        else {
            repository(url: mavenPublic["releaseUrl"]) {
                authentication(userName: userName, password: passWord)
            }
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读