组件化开发Arouter开发流程

本文章是借鉴网上的文章所写。

使用Android studio 3.4 gradle 5.1

总体架构

appmian :App壳 主要负责页面切换

home   shop user :业务模块

baselibray: 基础组件的依懒

模块的通信  Arouter 框架

ARouter::Compiler >>> No module name, for more information, look at gradle log.

解决办法 :在每个moudle 模块包括壳  

javaCompileOptions {
    annotationProcessorOptions {
        arguments = [ AROUTER_MODULE_NAME : project.getName() ]
    }
}

1步骤 创建home Module 

2在project build下面 定义

ext {
    isRunHome = false // true是Home模块可单独运行
    isRunPersonalcenter = false
    isRunShopingcar = false
}

(关于定义变量:在gradle.properties 中也可以定义)

3在 home Module build 中

if(isRunHome.toBoolean()){ // 1.根据之前设定的isRunHome,判断是否需要独立运行
    apply plugin: 'com.android.application'
}else {
    apply plugin: 'com.android.library'
}
sourceSets {

    main {
        // 1.单独调试与集成调试时使用不同的 AndroidManifest.xml 文件
        // 我们还可以根据不同工程配置不同的 Java 源代码、不同的 resource 资源文件等的
        if(isRunHome.toBoolean()) {
            manifest.srcFile 'src/main/manifest/AndroidManifest.xml'
        } else{
            manifest.srcFile 'src/main/AndroidManifest.xml'
        }
    }
}
if(isRunHome.toBoolean()){ // 2.这里也设置一下,可运行的话,添加applicationId

    applicationId "com.example.home"
}

整体如下

if(isRunHome.toBoolean()){ // 1.根据之前设定的isRunHome,判断是否需要独立运行
    apply plugin: 'com.android.application'
}else {
    apply plugin: 'com.android.library'
}
android {
    compileSdkVersion 28
    buildToolsVersion "29.0.2"



    sourceSets {

        main {
            // 1.单独调试与集成调试时使用不同的 AndroidManifest.xml 文件
            // 我们还可以根据不同工程配置不同的 Java 源代码、不同的 resource 资源文件等的
            if(isRunHome.toBoolean()) {
                manifest.srcFile 'src/main/manifest/AndroidManifest.xml'
            } else{
                manifest.srcFile 'src/main/AndroidManifest.xml'
            }
        }
    }

    defaultConfig {

        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [ AROUTER_MODULE_NAME : project.getName() ]
            }
        }
        if(isRunHome.toBoolean()){ // 2.这里也设置一下,可运行的话,添加applicationId

            applicationId "com.example.home"
        }

        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    //noinspection GradleCompatible
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    api project(':baselibrary')
//    implementation 'com.alibaba:arouter-api:1.4.1'
    annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'
}

主App build

   implementation project(':baselibrary')
    annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'

    if(!isRunHome.toBoolean()){ // 1.如果要独立运行,那么主工程不加载它
        implementation project(path: ':home')
    }

 其他模块一样

关于引入arouter注意点

 每个模块都要引入annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'

@Route(path = "/home/homeactitvy")
public class HomeActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
    }
}
public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        // 这两行必须写在init之前,否则这些配置在init过程中将无效
        if(isDebug()) {

            // 打印日志
            ARouter.openLog();

            // 开启调试模式(如果在InstantRun模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险)
            ARouter.openDebug();
        }
        // 初始化ARouter
        ARouter.init(this);
    }

    private boolean isDebug() {

        return BuildConfig.DEBUG;
    }

}
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

    public void home(View view){
        ARouter.getInstance().build("/home/homeactitvy").navigation();

    }
发布了113 篇原创文章 · 获赞 120 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/xueshao110/article/details/103302941