Skip to content

yifei8/AInject

Folders and files

NameName
Last commit message
Last commit date

Latest commit

author
yifei
Feb 1, 2019
94bad2e · Feb 1, 2019

History

5 Commits
Jan 31, 2019
Feb 1, 2019
Jan 31, 2019
Jan 31, 2019
Feb 1, 2019
Jan 31, 2019
Feb 1, 2019
Jan 31, 2019
Jan 31, 2019
Jan 31, 2019
Jan 31, 2019
Jan 31, 2019
Jan 31, 2019
Jan 31, 2019
Jan 31, 2019

Repository files navigation

AInject

模块 auto-inject
最新版本 Download

Android Studio 自动注入框架,可轻松实现跨Module代码注入过程。

基本用法

step1: 添加依赖和配置

  • project gradle file
buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:x.x.x'
        //自动注入插件
        classpath "com.sjtu.yifei:auto-inject:1.0.1"
    }
}

  • app gradle file
//在plugin:'com.android.application'下添加以下插件,用于自动注入
apply plugin: 'com.sjtu.yifei.autoinject'

implementation("com.sjtu.yifei:auto-inject:1.0.1") {
        transitive = false
}

step2: 需要自动注入类的声明

@Inject //添加该注解即可
public class LoginManagerService implement ILoginManager {
    @Override
    void login(Activity activity) {
       Intent intent = new Intent(activity, LoginActivity.class);
       activity.startActivity(intent);
    }

    @Override
    User getUser(CallBack callback) {
        //...网络或者  或者  本地数据库 等回去异步返回或者同步返回结果

    }
}

step3: 注入到该类,必须实现InjectContract接口,声明注入的方法

   //必须实现InjectContract接口
   public class ServiceManager implements InjectContract {

   /**
     *
     * "@Inject" 注解标示的class 最终都会注入到该"@IMethod"注解标示过的方法中
     *  注:"@IMethod"注解标示过的方法将由编译器自动注入实现代码,注入最终的代码如下如:
     *
     * @IMethod
     * public void iMethodName() {
     *       injectClass("injectClassName1")
     *       injectClass("injectClassName2")
     *       injectClass("injectClassName3")
     *       injectClass("injectClassName4")
     * }
     *
     * 用户可以在该方法中通过反射完成自己的业务需求
     * @param className class name
     */
    @IMethod
    public void startInject() {
       //Automatic generation ,   Non modifiable
    }

    @Override
    public void injectClass(String serviceClassName) {
         //todo
    }

}

step4: build 编译即可

欢迎 fork、issues