Calces组件化及Module传值

蒋承教
2023-12-01

功能介绍

1.自动组件化构建插件

根据Gradle配置,自动实现Android组件的构建模式(application or library)
可配置多个依赖不同组件的App
自动要依赖需要的组件
自动配置组件独立运行

2.屏幕适配插件

根据Gradle配置,自动生成你需要的smallestWidth适配文件
自动压缩位图

快速开始

自动组件化构建插件

1.导入依赖库 在项目的build.gradle中

buildscript {
    ...
}
plugins {
  id "calces.appconfig" version "3.3.0-alpha01"
}

在较旧的版本Gradle中或需要动态配置的情况下的插件构建脚本代码:

buildscript {
     repositories {
       maven {
         url "https://plugins.gradle.org/m2/"
       }
     }
     dependencies {
       classpath "gradle.plugin.com.tangpj.tools:component:3.3.0-alpha01"
     }
   }
   
   apply plugin: "calces.appconfig"

2.在项目build.gradle配置AppConfig

appConfig {
 debugEnable true
 apps {
     app1 {
         mainActivity "com.xxx.MainActivity1"
         modules ':modules1',
                 ':modules2'
     }

       app2 {
         mainActivity "com.xxx.MainActivity2"
         modules ':modules1'
     }
 }

 modules {
     modules1 {
         applicationId "com.xxxx.modules1"
         mainActivity ".Modules1Activity"
         isRunAlone true
     }

      modules2 {
         applicationId "com.xxxx.modules2"
         mainActivity ".Modules2Activity"
         isRunAlone true
     }
 }
} 

3.在modules(子模块)引入模块自动化构建插件(注意:不需要手动配置com.android.library或com.android.application)

apply plugin: 'calces.modules'

屏幕适配插件

1.引入依赖库在Gradle及2.1及更高版本的插件构建脚本代码:在项目的build.gradle中

buildscript {
    ...
}
plugins {
  id "calces.screen" version "1.3.4-alpha01"
}

在较旧版本的Gradle中或需要动态配置的情况下的插件构建脚本代码:

 buildscript {
     repositories {
       maven {
         url "https://plugins.gradle.org/m2/"
       }
     }
     dependencies {
       classpath "gradle.plugin.com.tangpj.tools:screen:1.3.4-alpha01"
     }
   }
   
   apply plugin: "calces.screen"

2.在需要适配的组件上build.gradle配置Screen值

screen{
    auto true
    dimens{
        designPx 375
        smallesWidths 360,480
        scale 3            //保留小数位,默认为2
        scaleMode BigDecimal.ROUND_HALF_UP  //小数保留的方式
    }
}

auto是用来确认是否需要自动生成sw文件的,会影响编译时间,如果values没有更新的话建议设置为false.除此之外,可以通过手动调用gradle任务来手动生成sw文件.

属性介绍

自动组件化构建插件

AppConfig

debugEnable, 布尔值
是否开个debug模式,只有当debugEnbale为true时,modules的isRunAlone才能生效。即modoules只能在debug模式中独立启动
apps, String列表
app列表,控制当debug模式为false时的app数量与基础配置
modules, String列表
组件列表,配置需要实现自动组件化控制的组件列表

App (apps里面的配置项)

name, String类型
app的名字,需要和项目路径对应,如果不填写默认为该配置的名字(如配置名为app的话,name则为:name)。导入规则和setting.gradle中的include规则保持一致
modules, String列表
需要依赖的组件列表,通过修改该属性实现依赖不同的组件
dependMethod, String类型
依赖的方法,默认为implementation,一般不需要配置该字段,除非有特殊需求
applicationId, String类型
动态填入applicationId。非特殊情况,建议为空
applicationName, String类型
配置启动Application(对应manifest中的application name属性)
mainActivity, String类型
配置启动Activity,为空则默认为AndroidManifest中的Activity。非特殊情况,建议为空

Modules(modules里的配置项)

name, String类型与app中的name一致

isRunAlone, 布尔值该组件能否独立启动

applicationId, String类型独立启动时的applicationId

applicationName, String类型配置启动Application(对应manifest中的application name属性)

mainActivity, String类型独立启动的Activity

Module传值

一.功能介绍

1.支持直接解析标准URL进行跳转,并自动注入参数目标页面中
2.支持多模块工程使用
3.支持添加多个拦截器,自定义拦截顺序
4.支持依赖注入,可单独作为依赖注入框架使用
5.支持InstantRun
6.支持MultiDex(Google方案)
7.映射关系按组分类、多级管理、按需初始化
8.支持用户指定全局降级与雨布降级策略
9.页面、拦截器、服务等组件均自动注册到框架
10.支持多种方式配置转场动画
11.支持获取Fragment
12.完全支持Kotlin以及混编(配置见文末 其他#5)
13.支持第三方 App 加固(使用 arouter-register 实现自动注册)
14.支持生成路由文档
15.提供 IDE 插件便捷的关联路径和目标类

二.典型应用

从外部URL映射到内部页面,以及参数传递与解析
跨模块页面跳转,模块间解耦
拦截跳转过程,处理登陆、埋点等逻辑
跨模块API调用,通过控制反转来做组件解耦

三.基础功能

1.添加依赖和配置

android {
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [AROUTER_MODULE_NAME: project.getName()]
            }
        }
    }
}
dependencies {
    // 替换成最新版本, 需要注意的是api
    // 要与compiler匹配使用,均使用最新版可以保证兼容
    compile 'com.alibaba:arouter-api:x.x.x'
    annotationProcessor 'com.alibaba:arouter-compiler:x.x.x'
    ...
}
// 旧版本gradle插件(< 2.2),可以使用apt插件,配置方法见文末'其他#4'
// Kotlin配置参考文末'其他#5'

2.添加注解

// 在支持路由的页面上添加注解(必选)
// 这里的路径需要注意的是至少需要有两级,/xx/xx
@Route(path = "/test/activity")
public class YourActivity extend Activity {
    ...
}

这里需要给每一个要进行跳转或传值的Module添加 path 不然找不到
在主入口的build.glider导入要进行跳转的Module

implementation project(':modules)

3.绑定Application

public class MyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        // 打印日志
        ARouter.openLog();
        // 开启调试模式(如果在InstantRun(就是AndroidStudio2.0以后新增的一个可以减少很多编译时间的运行机制)模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险)
        ARouter.openDebug();
        // 初始化尽可能早,推荐在Application中初始化
        ARouter.init(this);
    }
}

4.传值

ARouter.getInstance().build("/day02/m1")//选择要跳转的module
        .withString("name","李浩帆")//通过键值对的方法传值
        .navigation();//开始

5.接收值

@Autowired(name = "name")//通过注解得到键值对

//在onCreate中声明
ARouter.getInstance().inject(this);
//name就是传过来的值
 类似资料: