-
Notifications
You must be signed in to change notification settings - Fork 208
依赖和配置
本项目后面只会修复 bug 不会有功能的升级了. KComponent 也能间接的支持到 Java 的. 所以各位尽可能的用 KComponent 吧
-
app
模块在项目中既是一个壳工程也是一个业务模块.这点务必注意 -
App
会包含其他所有的业务模块 - 而一般工程中会有一个 "BaseModule" 的基础业务模块,每一个业务模块都会依赖 "BaseModule"
下面所有的 <version>
请替换成上面的版本号
在 (工程)Project
级别的 build.gradle 中添加 maven 地址:
maven { url 'https://jitpack.io' }
在基础业务模块 BaseModule
或者每一个业务模块中添加 Component 的依赖使用.
//依赖:下面三种选择,选适合自己的一种即可
// -------------------------------------- 基础版本 --------------------------------------
api 'com.github.xiaojinzi123.Component:component-impl:<version>'
// ------------------------------------ RxJava2版本 ------------------------------------
// RxJava2 版本. 需要特别注意:RxJava2 的依赖需要自行在项目中添加依赖. 内部依赖是 compileOnly 的方式
api 'com.github.xiaojinzi123.Component:component-impl-rx:<version>'
api io.reactivex.rxjava2:rxjava:<2.x.x> // 这句记得在自己项目中依赖
// -------------------------------------- 协程版本 --------------------------------------
// 协程版本. 需要特别注意:协程的依赖需要自行在项目中添加依赖. 内部依赖是 compileOnly 的方式
api 'com.github.xiaojinzi123.Component:component-impl-ktx:<version>'
api 'org.jetbrains.kotlinx:kotlinx-coroutines-core:x.x.x' // 这句记得在自己项目中依赖
下面配置的 HOST
的值可以是随便的一个名字,你只要保证每一个 Module
的名称是唯一的就可以了.
不一定和 Module
名称一样
defaultConfig {
......
javaCompileOptions {
annotationProcessorOptions {
// 配置业务模块的模块名称
arguments += [
"HOST" : project.getName(),
"Priority" : "0", // 这个字符串内必须是数字类型的. 表示模块的优先级, 值越大, 越先加载
]
}
}
}
由于 kapt 忽略了 javaCompilerOptions. 所以上一步配置模块名称的方式得变更一下
kapt {
arguments {
arg("HOST", project.getName())
arg("Priority", "0")
}
}
v1.9.6 开始必须配置, 并且之前版本因为 kapt 升级导致注册失败. 所以强烈建议任何版本都配置 点我配置
annotationProcessor "com.github.xiaojinzi123.Component:component-compiler:<version>"
如果你的 build.gradle 中配置了 apply plugin: 'kotlin-android'
那你应该使用 kapt
而不是 annotationProcessor
。如下:
kapt "com.github.xiaojinzi123.Component:component-compiler:<version>"
分两种方式,字节码加载方式
和反射方式
,选一种即可。
特别注意:
字节码加载方式
和 Google 的App Bundle
不兼容. 如果你使用了App Bundle
请使用下面的反射方式
- 字节码加载方式
// 初始化
Component.init(BuildConfig.DEBUG, Config.with(this)
// optimizeInit 表示是否使用 ASM 字节码技术加载模块, 默认是 false
// 如果是 true,则下一步 Gradle 插件必选
// 如果是 false,则可以忽略下一步 Gradle 插件
.optimizeInit(true)
// 自动加载所有模块, 打开此开关后下面无需手动注册了
// 该配置需要 optimizeInit(true) 才会生效
.autoRegisterModule(true) // 1.7.9+
.build()
);
// 如果你依赖了 rx 版本,需要配置这句代码,否则删除这句
RxErrorIgnoreUtil.ignoreError();
// Debug 的包开启检查
if (BuildConfig.DEBUG) {
// 框架还带有检查重复的路由和重复的拦截器等功能,在 `debug` 的时候开启它
Component.check();
}
- 使用反射的方式加载模块
// 初始化
Component.init(BuildConfig.DEBUG, Config.with(this).build());
// 如果你依赖了 rx 版本,需要配置这句代码,否则删除这句
RxErrorIgnoreUtil.ignoreError();
// 注册其他业务模块,注册的字符串是上面各个业务模块配置在 build.gradle 中的 HOST
ModuleManager.getInstance().registerArr("component1","component2","user","help");
// 让框架在 Debug 的时候检查.
if (BuildConfig.DEBUG) {
// 框架还带有检查重复的路由和重复的拦截器等功能,在 `debug` 的时候开启它
Component.check();
}
如果你上一步 optimizeInit(true)
传入的是 true, 那么你必须配置此 Gradle
插件
在工程级别的 build.gradle 中添加 classpath (java7 或者 java8 选择其一)
classpath "com.github.xiaojinzi123.Component:component-plugin:<version>"
// 如果想使用最新的 toml 来管理. 可以查看 [#143 Issue](https://github.com/xiaojinzi123/Component/issues/143)
在壳工程 app 的 builde.gradle 中配置插件
// 这个插件必须在 apply plugin: 'com.android.application' 的下面, 在其他插件的前面!!!!!!
apply plugin: 'com.xiaojinzi.component.plugin'
# 小金子组件化框架 不要警告
-dontwarn com.xiaojinzi.component.**
# 所有本包下面的类和接口都不混淆
-keep class com.xiaojinzi.component.** {*;}
-keep interface com.xiaojinzi.component.** {*;}
#这些是让被标记的类不被混淆
-keep @com.xiaojinzi.component.anno.InterceptorAnno class * {*;}
-keep @com.xiaojinzi.component.anno.GlobalInterceptorAnno class * {*;}
-keep @com.xiaojinzi.component.anno.ConditionalAnno class * {*;}
-keep @com.xiaojinzi.component.anno.FragmentAnno class * {*;}
-keep @com.xiaojinzi.component.anno.ServiceAnno class * {*;}
-keep @com.xiaojinzi.component.anno.support.ComponentGeneratedAnno class * {*;}
-keep @com.xiaojinzi.component.anno.router.RouterApiAnno interface * {*;}
#保留生成的 Router Api
-keep class **.**RouterApiGenerated {*;}
#几个用户自定义或者自动生成到其他包下的应该不混淆
-keep class * implements com.xiaojinzi.component.impl.RouterInterceptor{*;}
-keep class * implements com.xiaojinzi.component.support.IBaseLifecycle{*;}
-keep class * implements com.xiaojinzi.component.application.IApplicationLifecycle{*;}
-keep class * implements com.xiaojinzi.component.application.IComponentApplication{*;}
-keep class * implements com.xiaojinzi.component.support.Inject{*;}