-
Notifications
You must be signed in to change notification settings - Fork 208
依赖和配置 AndroidX
xiaojinzi123 edited this page Mar 28, 2021
·
30 revisions
-
app
模块在项目中既是一个壳工程也是一个业务模块.这点务必注意 -
App
会包含其他所有的业务模块 - 而一般工程中会有一个 "BaseModule" 的基础业务模块,每一个业务模块都会依赖 "BaseModule"
下面所有的 <version>
请替换成上面的版本号
如果你需要的不是 java8, 那就去掉 -java8
如果你也不需要 androidx, 那就去掉 -androidx 即可
在 (工程)Project
级别的 build.gradle 中添加 maven 地址:
maven { url 'https://jitpack.io' }
在基础业务模块 BaseModule
或者每一个业务模块中添加依赖
api 'com.github.xiaojinzi123.Component:component-impl:<version>'
或者 RxJava2的实现 (java7 或者 java8 选择其一)
api 'com.github.xiaojinzi123.Component:component-impl-rx:<version>'
// 如果你使用的是 RxJava 的版本, 则必须在项目中依赖一个 RxJava, 否则运行时崩溃
api io.reactivex.rxjava2:rxjava:<2.x.x> // <2.x.x> 是你想用的 RxJava2 的版本号
rx版本可以轻易的让你的路由和服务发现功能结合RxJava,引用 rx 库请自行在项目依赖 RxJava2
下面配置的 HOST
的值可以是随便的一个名字,你只要保证每一个 Module
的名称是唯一的就可以了.
不一定和 Module
名称一样
defaultConfig {
......
javaCompileOptions {
annotationProcessorOptions {
// 配置业务模块的模块名称
arguments += ["HOST": "这里替换成你起的模块名"]
}
}
}
请格外注意, 如果你的 build.gradle 配置文件中配置了 apply plugin: 'kotlin-android' 下面的注解驱动器请使用 kapt
annotationProcessor "com.github.xiaojinzi123.Component:component-compiler:<version>"
// 如果是 kotlin 模块请使用如下的代码
// kapt "com.github.xiaojinzi123.Component:component-compiler:<version>"
// kapt "com.github.xiaojinzi123.Component:component-compiler:<version>"
特别注意:使用字节码技术加载模块(和 Google 的 App Bundle 不兼容. 如果你使用了 App Bundle 请使用下面的反射的方式)
- 字节码加载方式
// 初始化
Component.init(
BuildConfig.DEBUG,
Config.with(this)
.defaultScheme("router")
// 使用内置的路由重复检查的拦截器, 如果为 true,
// 那么当两个相同的路由发生在指定的时间内后一个路由就会被拦截
.useRouteRepeatCheckInterceptor(true)
// 1000 是默认的, 表示相同路由拦截的时间间隔
.routeRepeatCheckDuration(1000)
// 是否打印日志提醒你哪些路由使用了 Application 为 Context 进行跳转
.tipWhenUseApplication(true)
// 这里表示使用 ASM 字节码技术加载模块, 默认是 false
// 如果是 true 请务必配套使用 Gradle 插件, 下一步就是可选的配置 Gradle 插件
// 如果是 false 请直接略过下一步 Gradle 的配置
.optimizeInit(true)
// 自动加载所有模块, 打开此开关后下面无需手动注册了
// 但是这个依赖 optimizeInit(true) 才会生效
.autoRegisterModule(true) // 1.7.9+
.build()
);
// 如果你依赖了 rx 版本,需要配置这句代码,否则删除这句
RxErrorIgnoreUtil. ignoreError();
// 自动加载所有模块, 此功能需要打开开关 optimizeInit(true).
// 如果你同时也打开了开关 autoRegisterModule(true), 那么这句代码也可省略了, 因为初始化的时候自动帮你注册了
// 当然你也可以设置 autoRegisterModule(false), 然后自己选择时机去调用自动注册
// ModuleManager.getInstance().autoRegister(); // 1.7.9+
// Debug 的包开启检查
if (BuildConfig.DEBUG) {
// 框架还带有检查重复的路由和重复的拦截器等功能,在 `debug` 的时候开启它
ModuleManager.getInstance().check();
}
- 使用反射的方式加载模块
// 初始化
Component.init(
BuildConfig.DEBUG,
Config.with(this)
.defaultScheme("router")
// 使用内置的路由重复检查的拦截器, 如果为 true,
// 那么当两个相同的路由发生在指定的时间内后一个路由就会被拦截
.useRouteRepeatCheckInterceptor(true)
// 1000 是默认的, 表示相同路由拦截的时间间隔
.routeRepeatCheckDuration(1000)
// 是否打印日志提醒你哪些路由使用了 Application 为 Context 进行跳转
.tipWhenUseApplication(true)
.build()
);
// 如果你依赖了 rx 版本,需要配置这句代码,否则删除这句
RxErrorIgnoreUtil. ignoreError();
// 注册其他业务模块,注册的字符串是上面各个业务模块配置在 build.gradle 中的 HOST
ModuleManager.getInstance().registerArr("component1","component2","user","help");
// 让框架在 Debug 的时候检查.
if (BuildConfig.DEBUG) {
// 框架还带有检查重复的路由和重复的拦截器等功能,在 `debug` 的时候开启它
ModuleManager.getInstance().check();
}
如果你上一步 optimizeInit(true)
传入的是 true,
那么你必须配置此 Gradle
插件
在工程级别的 build.gradle 中添加 classpath (java7 或者 java8 选择其一)
classpath "com.github.xiaojinzi123.Component:component-plugin:<version>"
在壳工程 app 的 builde.gradle 中配置插件
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.service.IServiceLifecycle{*;}
-keep class * implements com.xiaojinzi.component.application.IComponentApplication{*;}
-keep class * implements com.xiaojinzi.component.support.Inject{*;}