Android 组件化框架搭建

组件化框架设计流程图

 

 

Gradle语法

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。

Gradle 基于Goolvy脚本语言,而Goolvy又基于java扩展了java语法,可以用java的API实现Gradle的构建实现。

Goolvy是一种弱类型语言。

 

 

组件化配置步骤

工程根目录下创建config.gradle文件

(不一定是要在这里做全局配置,也可以在根目录下的build.gradle和gradle.properties下配置)

 

config.gradle配置清单

ext{
    //生产环境|开发环境  用这个变量识别生产环境还是开发环境
    isRelease = false;

    //所有模块通用版本号。0
    versionNumbers = [
            compileSdkVersion : 30,
            buildToolsVersion : "30.0.3",
            minSdkVersion : 21,
            targetSdkVersion : 30,
            versionCode : 1,
            versionName : "1.0",
    ]
    //模块的包名数组
    appPackageNames =[
        app : "com.laiweifeng.zujianhua",
        library : "com.laiweifeng.library",
        module : "com.laiweifeng.module",
        commonlibrary: "com.example.commonlibrary"
    ]
    //生产|开发环境的地址
    url = [
            "debugUrl" : "https://10.10.11.153",
            "Url" : "https://www.laiweieng.com"
    ]

//统一配置版本号
    androidXLibraryVersion = "1.1.0"
}

 

公共基础库配置

    这里面放置公共的基础框架,utils、http、base等,给所有的组件Module使用

//用isRelease判断环境(集成化环境用“library'”,module独立运行用“application'”)

if(isRelease){
    apply plugin: 'com.android.application'
}else{
    apply plugin:  'com.android.library'
}

//统一版本号定义变量,用于给下面版本号调用(调用“config.gradle”)
def version = rootProject.ext.versionNumbers;


android {
    compileSdkVersion version.compileSdkVersion
    buildToolsVersion version.buildToolsVersion

    defaultConfig {

//用isRelease判断环境(集成化环境不需要“applicationId”)

        if(isRelease){
            applicationId "com.laiweifeng.common"
        }
        minSdkVersion version.minSdkVersion
        targetSdkVersion version.targetSdkVersion
        versionCode version.versionCode
        versionName version.versionName



//Arouter 路由配置
javaCompileOptions {
    annotationProcessorOptions {
        arguments = [moduleName: project.getName()]
    }
}



    }
   ...省略...

//各种各样的框架
 dependencies {
 api "androidx.appcompat:appcompat:${rootProject.ext.androidXLibraryVersion}"
 api "com.google.android.material:material:${rootProject.ext.androidXLibraryVersion}"
 api "androidx.constraintlayout:constraintlayout:${rootProject.ext.androidXConstraintlayout}"

.....省略.....

//Arouter 路由用于各个模块间的跳转

api 'com.alibaba:arouter-api:1.2.4'
}

 

Module 组件配置


 

//用isRelease判断环境(集成化环境用“library'”,module独立运行用“application'”)

if(isRelease){
    apply plugin: 'com.android.application'
}else{
    apply plugin:  'com.android.library'
}

def version = rootProject.ext.versionNumbers;
android {
    compileSdkVersion version.compileSdkVersion
    buildToolsVersion version.buildToolsVersion

    defaultConfig {

//用isRelease判断环境(集成化环境不需要“applicationId”)
        if(isRelease){
            applicationId "com.laiweifeng.personal"
        }
        minSdkVersion version.minSdkVersion
        targetSdkVersion version.targetSdkVersion
        versionCode version.versionCode
        versionName version.versionName

    }
    // 配置资源路径,方便测试环境,打包不集成到正式环境
    sourceSets {
        main {
            if (isRelease) {
                // 如果是组件化模式,需要单独运行时
                manifest.srcFile 'src/main/debug/AndroidManifest.xml'
            } else {
                // 集成化模式,整个项目打包apk
                manifest.srcFile 'src/main/AndroidManifest.xml'
                java {
                    // 集成化 时 debug 目录下文件不需要合并到主工程
                    exclude '**/debug/**'
                }
            }
        }
    }
}
//模块统一引用common公共基础库
dependencies {
    implementation project(path: ':common')

//动态注解器ARouter路由
annotationProcessor 'com.alibaba:arouter-compiler:1.1.4'


}

APP壳工程配置

Appcation

public class MainAppcation extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

//路由框架用阿里的ARouter
        if (isDebug()) {          
            ARouter.openLog();              

  ARouter.openDebug();   
        }
        ARouter.init(this); 
    }
    private boolean isDebug() {
        return true;
    }
}

 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.laiweifeng.zujianhua">

    <application
        android:name=".MainAppcation"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        >
    </application>
</manifest>

 

builde.gradle配置

 

plugins {
    id 'com.android.application'
}

def version = rootProject.ext.versionNumbers;

android {
    compileSdkVersion version.compileSdkVersion
    buildToolsVersion version.buildToolsVersion

    defaultConfig {
        applicationId appPackage.app
        minSdkVersion version.minSdkVersion
        targetSdkVersion version.targetSdkVersion
        versionCode version.versionCode
        versionName version.versionName
        /**
         * src下java调用方式 : BuildConfig.isRelease
         * 这个方法接收三个非空的参数,第一个:确定值的类型,第二个:指定key的名字,第三个:传值(必须是String)
         * 为什么需要定义这个?为了给java代码使用
         *  切记:不能在build.gradle 根节点,只能在build.gradle defaultConfig或buildTypes节点下
         */
        buildConfigField("boolean", "isRelease", String.valueOf(isRelease))
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    if(!isRelease){
        implementation project(path: ':module)
    }
    implementation project(path: ':common')
}

 

路由框架

因为组件化开发下模块与模块之间完全解耦,所以跳转Activity 和Fragment 变得比较比较难搞了,这时候路由框架诞生了。

探索Android路由框架-ARouter之基本使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值