override fun onCreate() {
super.onCreate()
instance = this
Router.registerComponent("com.alien.modulea.AAppLike")
}
override fun initComponentDi() {
}
override fun registerRouter() {
Jumper.init(BuildConfig.DEBUG, this)
}
override fun onCreate() {
super.onCreate()
// 配置httpHeaders
baseAppComponent().httpConfig().setHttpHeaders(mutableMapOf())
}
override fun onCreate() {
Router.getInstance().addService(BusinessAService::class.java, BusinessAServiceImpl())
AModuleKit.getInstance().init(object : AppModuleComponentDelegate {
override fun initAppComponent(): AppComponent {
return DaggerModuleAAppComponent.builder()
.baseAppComponent(BaseModuleKit.getInstance().getComponent())
.build()
}
})
}
fun fragmentComponent(): FragmentComponent {
return DaggerFragmentComponent.builder()
.moduleAAppComponent(AModuleKit.getInstance().getComponent() as ModuleAAppComponent?)
.build()
}
各个模块配置
kapt {
generateStubs = true
arguments {
arg("AROUTER_MODULE_NAME", project.getName())
}
}
dependencies {
kapt deps.arouter.compiler
}
Activity 类名注册
@Route(path = RouterPath.MAIN_PATH)需要获取跳转参数的需要在Activity添加ARouter.getInstance().inject(this)
//获取跳转参数
@JvmField
@Autowired(name = "type")
var type: Int = 0
跳转统一使用Jumper管理
fun login(context: Context){
ARouter.getInstance().build(RouterPath.User.PATH_LOGIN).navigation(context)
}
RestApi对网络请求进行了分装,各模块需要提供retrofit的Service的接口,具体实现交由MVP的Model模块实现
interface BookApiService {
@POST(BookUrl.BOOK_INDEX_URL)
fun getTodayBook(@Body body: BookHomeRequest): Observable<HttpResult<BookResponse>>
}
interface BookMVPModel: MVPRepository {
fun getTodayBook(body: BookHomeRequest): Observable<HttpResult<BookResponse>>
}
class BookModel @Inject constructor(val bookApiService: BookApiService): BaseRepository(), BookMVPModel {
override fun getTodayBook(body: BookHomeRequest) = bookApiService.getTodayBook(body)
}
MVP的实现 Constract协议提供View和Presenter接口
interface BookHomeConstract {
interface View : BaseView<Presenter>{
fun onResponse(response: BookResponse?)
}
interface Presenter: BasePresenter<View>{
fun getTodayBook(uid: String)
}
}
class BookHomePresenter @Inject constructor(val model: BookMVPModel, val schedulerProvider: SchedulerProvider): BookHomeConstract.Presenter {
lateinit var mView: BookHomeConstract.View
override fun onAttach(view: BookHomeConstract.View) {
mView = view
getTodayBook(model.uid())
}
override fun onDetach() {
}
override fun getTodayBook(uid: String) {
model.let {
it.getTodayBook(BookHomeRequest(uid = uid))
.compose(schedulerProvider.ioToMainObservableScheduler())
.subscribe(object : HttpResponseObserver<HttpResult<BookResponse>>() {
override fun onResult(result: HttpResult<BookResponse>) {
mView.onResponse(result.data)
}
override fun onError(error: ApiError) {
mView.onError(error)
}
})
}
}
}
defaultConfig {
resourcePrefix "modulea_"
if (isBuildModule.toBoolean()) {
multiDexEnabled true
}
}
sourceSets {
main {
if (isBuildModule.toBoolean()) {
manifest.srcFile 'src/main/debug/AndroidManifest.xml'
} else {
manifest.srcFile 'src/main/release/AndroidManifest.xml'
}
}
}