[2] AutoInitialize-基于AutoRegister的初始化工具

250 阅读1分钟

AutoInitialize背景

模块化或者组件化的项目中,每个模块需要一些初始化代码,在APP启动时需要在Application对象中进行初始化。AutoInitialize 的目标是对android-library类型的模块初始化提供统一入口,无需在Application对象中逐个进行。

实现基础

AutoInitialize以 AutoRegister 为基础,对实现 com.campusboy.autoinit.interfaces.IAutoInitializer 接口的类进行扫描。

初始化入口

在Application对象中进行初始化的统一入口:com.campusboy.autoinit.api.AutoInitialize#init(Context)

插件配置

com.android.application类型模块gradle文件中添加如下配置

apply plugin: 'auto-register'
autoregister {
    registerInfo = [
            [
                    'scanInterface'           : 'com.campusboy.autoinit.interfaces.IAutoInitializer'
                    , 'codeInsertToClassName' : 'com.campusboy.autoinit.api.AutoInitialize'
                    , 'codeInsertToMethodName': 'registerInitializers'
                    , 'registerClassName'     : 'com.campusboy.autoinit.api.InitializerRegister'
                    , 'registerMethodName'    : 'register'
            ]
    ]
}

仓库配置

  1. 仓库地址配置
maven { url 'http://nexus.pri.ibanyu.com/repository/maven-snapshots' }
  1. autoinitialize库
implementation 'com.palfish.android:autoinitialize:1.1.1-SNAPSHOT'
  1. autoregister插件
classpath 'com.palfish.android:autoregister:1.4.2-SNAPSHOT'
  1. 混淆设置
-keep public interface com.campusboy.autoinit.interfaces.IAutoInitializer {public *;}
-keep class * implements com.campusboy.autoinit.interfaces.IAutoInitializer{<methods>;<fields>;}

-keep class com.campusboy.autoinit.api.**{*;}

模块初始化实现示例

import android.content.Context
import android.widget.Toast
import com.campusboy.autoinit.interfaces.IAutoInitializer

class AppInitializer : IAutoInitializer {
    override fun initialize(context: Context) {
        Toast.makeText(context, "调用 AppInitializer", Toast.LENGTH_LONG).show()
    }
}