为了账号安全,请及时绑定邮箱和手机立即绑定

组建化开发(基础)

标签:
Android

我们听过很多人说,我们项目怎么分,怎么开发,我觉的大概有这么几种吧,

模块开发,你负责这个模块,我负责那个模块,还有就是下面这个

组件化开发,我主要讲组件化开发,这个比较流行现在也比较方便,对了还有一个叫插件化,大家别混淆了,

组件化,故名思议,我的理解是,每个人负责是一个库,同事这个库也可以想自己运行也能成为一个app,那么怎么实现呢,其实我们要看我们主的app

他是怎么实现的,通过对比他我们就可以把库变成可以运行app,那么问题来了,俩个库怎么交流怎么互相引用呢,这就出来路由了。

路由是什么呢,他跟咱们家里用的路由器一个道理,不都是先有一个猫在连接我们路由器,然后我们各自设备在连接到路由器上,那为啥不直接连接到路由器上呢,道理其实一样,联通,电信猫,其实就是我整理app,只有打包的时候需要架子,然后路由器就是分配你们各自需要啥,我从哪里去给你调度啥东西,一般工具类我们会写成一个库, 各自引用,这样就可以了,这个是我的一些理解,下面上代码。

第一步定义configuration.gradle类所以配置这个统一进行

ext {
    // false: 组件模式
    // true :集成模式
    isModule = false
    android = [
            compileSdkVersion: 26,
            minSdkVersion    : 14,
            targetSdkVersion : 26,
            versionCode      : 1,
            versionName      : "1.0"
    ]

    appId = ["app"  : "com.dongnao.dnrouter",
             "module1": "com.dongnao.module1",
             "module2" : "com.dongnao.module2" ,
             "module" : "com.dongnao.module"  ]

    supportLibrary = "26.1.0"
    dependencies = [
            "appcompat-v7"     : "com.android.support:appcompat-v7:${supportLibrary}",
    ]
}
第二引用主工程中引用
//相当于引入头文件 将 config中的内容引入进来
apply from: "config.gradle"
第三主工程配置
apply plugin: 'com.android.application'

//赋值与引用
def cfg = rootProject.ext.android
def appId = rootProject.ext.appId

android {
    compileSdkVersion cfg.compileSdkVersion
    defaultConfig {
        applicationId appId["app"]
        minSdkVersion cfg.minSdkVersion
        targetSdkVersion cfg.targetSdkVersion
        versionCode cfg.versionCode
        versionName cfg.versionName

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

        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [moduleName: project.getName()]
            }
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}



dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:0.5'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:2.2.2'

    annotationProcessor project(':router-compiler')
    implementation project(':base')

    if (isModule){
        implementation project(':module2')
        implementation project(':module1')
        implementation project(':module')
    }
}
第四部model库配置、
//动态切换
if (isModule) {
    apply plugin: 'com.android.library'
} else {
    apply plugin: 'com.android.application'
}
def cfg = rootProject.ext.android
def appId = rootProject.ext.appId
android {
    compileSdkVersion cfg.compileSdkVersion

    defaultConfig {
        minSdkVersion cfg.minSdkVersion
        targetSdkVersion cfg.targetSdkVersion
        versionCode cfg.versionCode
        versionName cfg.versionName

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [moduleName: project.getName()]
            }
        }
        //添加一条 boolean类型的变量
        buildConfigField("boolean","isModule",String.valueOf(isModule))
        //组件模式下
        if (!isModule) {
            applicationId appId['module']
        }
        //配置资源文件
        //资源配置
        sourceSets{
            main{
                //在组件模式下 使用不同的manifest文件
                if(!isModule){
                    manifest.srcFile 'src/main/module/AndroidManifest.xml'
                    java.srcDirs 'src/main/module/java','src/main/java'
                }else{
                    manifest.srcFile 'src/main/AndroidManifest.xml'
                }
            }
        }


    }

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

}

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

    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}
这就可以了简单实现了。

原文链接:http://www.apkbus.com/blog-340477-77348.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消