组件化开发流程(一)

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

使用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() ]
    }
}

统一gradle管理

 

 创建config.gradle 将所有的build.向如下格式

ext {



    android = [
            compileSdkVersion: 28,
            buildToolsVersion: "29.0.3",
            minSdkVersion    : 15,
            targetSdkVersion : 28,
            versionCode      : 1,
            versionName      : "1.0"
    ]

    appId = [
            applicationId: "com.example.myapplication"
    ]


    androidx = [
            "appcompat"       : 'com.android.support:appcompat-v7:28.0.0',
            "junit"           : 'junit:junit:4.12',
            "runner"          : 'com.android.support.test:runner:1.0.2',
            "espresso"        : 'com.android.support.test.espresso:espresso-core:3.0.2',
            "constraintlayout": 'com.android.support.constraint:constraint-layout:1.1.3',

    ]


    MagicIndicator_version = '1.5.0'
    butterknife_version = '10.2.3'
    okhttp_version = '3.10.0'
    gson_version = '2.6.2'
    glide_version = '3.7.0'
    event_version = '3.1.1'

    dependencies = [
            "MagicIndicator"     : "com.github.hackware1993:MagicIndicator:$MagicIndicator_version",
            "butterknife"        : "com.jakewharton:butterknife:$butterknife_version",
            "okhttp"             : "com.squareup.okhttp3:okhttp:$okhttp_version",
            "gson"               : "com.google.code.gson:gson:$gson_version",
            "glide"              : 'com.github.bumptech.glide:glide:4.9.0',
            "rxandroid"          : 'io.reactivex.rxjava2:rxandroid:2.1.0',
            "rxjava"             : 'io.reactivex.rxjava2:rxjava:2.2.3',
            "compilers"          : 'com.github.bumptech.glide:compiler:4.9.0',
            "eventbus"           : "org.greenrobot:eventbus:$event_version",
            "butterknifecompiler": 'com.jakewharton:butterknife-compiler:10.2.3',
            "arouter": 'com.alibaba:arouter-api:1.4.1',
            "aroutercompiler": 'com.alibaba:arouter-compiler:1.2.2'
    ]

}

在project 根目录下的build文件中

apply from :"config.gradle"

在app的build中引用

def androidId=rootProject.ext.android
def androidxs=rootProject.ext.androidx
android {
    compileSdkVersion androidId.compileSdkVersion
    buildToolsVersion  androidId.buildToolsVersion


    defaultConfig {
        minSdkVersion androidId.minSdkVersion
        targetSdkVersion androidId.targetSdkVersion
        versionCode androidId.versionCode
        versionName androidId.versionName

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

    }

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

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation androidxs.appcompat
    testImplementation androidxs.junit
    androidTestImplementation androidxs.runner
    androidTestImplementation androidxs.espresso
}

 

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();

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值