• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Dagger2集成:环境配置和验证

武飞扬头像
甘谷天蚕网络技术有限公司
帮助1

1.1 配置Dagger2依赖关系

目前android应用的代码管理大多采用Gradle来做,但是在集成Dagger2的过程中,Gradle的版本与Dagger2的依赖方式存在一定的相关性,在网上一些介绍集成Dagger2的资料中,大多采用“com.neenbedankt.gradle.plugins:android-apt:1.4”来作为Dagger2的辅助依赖工具,而实际上对稍高一些版本的Gradle来说,要继续采用apt的方式对接Dagger会显得比较困难,而且对Gradle来说,也不建议再继续使用apt,而是推荐使用“annotationProcessor”的方式。

我们接下来在进行环境配置的时候也采用使用“annotationProcessor”的方式。

Android工程在通过Gradle进行代码管理的过程中,往往会使用2类build.gradle文件来进行依赖管理,其中一类是工程(project)级别的gradle配置,一类是App级别的gradle配置,分别位于工程根路径和工程的app路径下。

工程级build.gradle配置:

  1.  
    buildscript {
  2.  
       repositories {
  3.  
           谷歌()
  4.  
           jcenter()
  5.  
      }
  6.  
       dependencies {
  7.  
           classpath 'com.android.tools.build:gradle:3.5.2'
  8.  
           classpath 'org.greenrobot:eventbus-annotation-processor:3.1.1' //增加依赖annotationProcessor
  9.  
      }
  10.  
    }
  11.  
  12.  
    allprojects {
  13.  
       repositories {
  14.  
           谷歌()
  15.  
           jcenter()
  16.  
      }
  17.  
    }
  18.  
  19.  
    task clean(type: Delete) {
  20.  
       delete rootProject.buildDir
  21.  
    }
学新通

注,重点关注注释提示的代码配置

app级build.gradle配置:

  1.  
    apply plugin: 'com.android.application'
  2.  
  3.  
    android {
  4.  
       compileSdkVersion 30
  5.  
       buildToolsVersion "31.0.0"
  6.  
       defaultConfig {
  7.  
           applicationId "com.tc.app.dagger2"
  8.  
           minSdkVersion 24
  9.  
           targetSdkVersion 30
  10.  
           versionCode 1
  11.  
           versionName "1.0"
  12.  
           testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
  13.  
      }
  14.  
       buildTypes {
  15.  
           release {
  16.  
               minifyEnabled false
  17.  
               proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
  18.  
          }
  19.  
      }
  20.  
       compileOptions {
  21.  
           sourceCompatibility = 1.8
  22.  
           targetCompatibility = 1.8
  23.  
      }
  24.  
    }
  25.  
  26.  
    dependencies {
  27.  
       implementation fileTree(dir: 'libs', include: ['*.jar'])
  28.  
       implementation 'androidx.appcompat:appcompat:1.0.2'
  29.  
       implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
  30.  
       implementation 'com.谷歌.android.material:material:1.0.0'
  31.  
  32.  
       // 开始增加Dagger2依赖关系
  33.  
       annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.1.1'//增加依赖annotationProcessor
  34.  
       annotationProcessor 'com.谷歌.dagger:dagger-compiler:2.40'// 指定注解处理器
  35.  
       compileOnly 'org.glassfish:javax.annotation:10.0-b28'//添加android缺失的部分javax注解
  36.  
       implementation 'com.谷歌.dagger:dagger:2.40'// 指定依赖版本
  37.  
       // Dagger2依赖关系添加结束
  38.  
       
  39.  
       testImplementation 'junit:junit:4.12'
  40.  
       androidTestImplementation 'androidx.test.ext:junit:1.1.0'
  41.  
       androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
  42.  
    }
学新通

1.2 对Dagger2配置环境进行简单验证

1.2.1 新建Android项目,并配置Dagger2

新建一个简单的Android工程,并参考1.1章节中的配置介绍,对工程进行Dagger2依赖关系配置(此过程省略——应该能搞定哦)

1.2.2 编写验证代码

首先,编写等待进行依赖注入的业务代码(MyBusinessApiService)

  1.  
    package com.tc.app.dagger2.di;
  2.  
  3.  
    import android.util.Log;
  4.  
  5.  
    /**
  6.  
    * 真实的业务处理服务
  7.  
    *
  8.  
    * @author min.weixm
  9.  
    * @version $Id: MyBusinessApiService.java, v 0.1 2021/11/12 14:35 min.weixm Exp $
  10.  
    */
  11.  
    public class MyBusinessApiService {
  12.  
    public void register(){
  13.  
    Log.i("----------------------------MyBusinessApiService--------------------","MyBusinessApiService");
  14.  
    }
  15.  
    }
学新通

真实的业务处理类,通过打印日志的方式来验证Dagger2配置环境是否可以正常工作。

接下来,配置业务处理服务的实际实例化处理工具(MyBusinessApartModule)

  1.  
    package com.tc.app.dagger2.di;
  2.  
  3.  
    import dagger.Module;
  4.  
    import dagger.Provides;
  5.  
  6.  
    /**
  7.  
    * 在这里对实际进行业务处理的组件进行实例化(如,对MyBusinessApiService进行实例化处理)
  8.  
    *
  9.  
    * @author min.weixm
  10.  
    * @version $Id: MyBusinessApartModule.java, v 0.1 2021/11/12 14:38 min.weixm Exp $
  11.  
    */
  12.  
    @Module
  13.  
    public class MyBusinessApartModule {
  14.  
    @Provides
  15.  
    public MyBusinessApiService provideMyBusinessApiService(){
  16.  
    return new MyBusinessApiService();
  17.  
    }
  18.  
  19.  
    }
学新通

然后,声明我们的容器对接接口(MyApartComponent)

  1.  
    package com.tc.app.dagger2.di;
  2.  
  3.  
    import com.tc.app.dagger2.MainActivity;
  4.  
  5.  
    import dagger.Component;
  6.  
  7.  
    /**
  8.  
    * 不真正提供实例,真实实例由 MyBusinessApartModule 提供
  9.  
    *
  10.  
    * @author min.weixm
  11.  
    * @version $Id: MyApartComponent.java, v 0.1 2021/11/12 14:40 min.weixm Exp $
  12.  
    */
  13.  
    @Component(modules = {MyBusinessApartModule.class})
  14.  
    public interface MyApartComponent {
  15.  
    void inject(MainActivity activity);
  16.  
    }
学新通

注:完成本操作后,需要唤醒Dagger2进行对接业务处理自动生成代码,因此,需要对工程执行一次build操作,这时,Dagger2会完成相应的代码自动生成动作

最后,我们做依赖注入的业务对接(MainActivity)

  1.  
    package com.tc.app.dagger2;
  2.  
  3.  
    import android.os.Bundle;
  4.  
    import android.view.Menu;
  5.  
    import android.view.MenuItem;
  6.  
  7.  
    import androidx.appcompat.app.AppCompatActivity;
  8.  
    import androidx.appcompat.widget.Toolbar;
  9.  
  10.  
    import com.谷歌.android.material.floatingactionbutton.FloatingActionButton;
  11.  
    import com.谷歌.android.material.snackbar.Snackbar;
  12.  
    import com.tc.app.dagger2.di.DaggerMyApartComponent;
  13.  
    import com.tc.app.dagger2.di.MyBusinessApiService;
  14.  
  15.  
    import javax.inject.Inject;
  16.  
  17.  
    public class MainActivity extends AppCompatActivity {
  18.  
  19.  
    /** 通过依赖注入的业务服务实例 */
  20.  
    @Inject
  21.  
    MyBusinessApiService myBusinessApiService;
  22.  
  23.  
    @Override
  24.  
    protected void onCreate(Bundle savedInstanceState) {
  25.  
    super.onCreate(savedInstanceState);
  26.  
    setContentView(R.layout.activity_main);
  27.  
    Toolbar toolbar = findViewById(R.id.toolbar);
  28.  
    setSupportActionBar(toolbar);
  29.  
  30.  
    FloatingActionButton fab = findViewById(R.id.fab);
  31.  
    fab.setOnClickListener((view) ->
  32.  
    Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
  33.  
    .setAction("Action", null).show()
  34.  
    );
  35.  
  36.  
    //初始化环境,并完成功能调用
  37.  
    DaggerMyApartComponent.create().inject(this);
  38.  
    this.myBusinessApiService.register();
  39.  
    }
  40.  
  41.  
    @Override
  42.  
    public boolean onCreateOptionsMenu(Menu menu) {
  43.  
    // Inflate the menu; this adds items to the action bar if it is present.
  44.  
    getMenuInflater().inflate(R.menu.menu_main, menu);
  45.  
    return true;
  46.  
    }
  47.  
  48.  
    @Override
  49.  
    public boolean onOptionsItemSelected(MenuItem item) {
  50.  
    // Handle action bar item clicks here. The action bar will
  51.  
    // automatically handle clicks on the Home/Up button, so long
  52.  
    // as you specify a parent activity in AndroidManifest.xml.
  53.  
    int id = item.getItemId();
  54.  
  55.  
    //noinspection SimplifiableIfStatement
  56.  
    if (id == R.id.action_settings) {
  57.  
    return true;
  58.  
    }
  59.  
  60.  
    return super.onOptionsItemSelected(item);
  61.  
    }
  62.  
    }
学新通

验证结果,在模拟器中run下app,观察运行日志:

  1.  
    I/----------------------------MyBusinessApiService--------------------: MyBusinessApiService
  2.  
    D/OpenGLRenderer: HWUI GL Pipeline
  3.  
    D/: HostConnection::get() New Host Connection established 0xa71e4380, tid 3631
  4.  
    I/OpenGLRenderer: Initialized EGL, version 1.4
  5.  
    D/OpenGLRenderer: Swap behavior 1
  6.  
    W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...

顺利得到业务组件的打印日志,说明本次Dagger2配置验证成功。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgfgbbg
系列文章
更多 icon
同类精品
更多 icon
继续加载