Dagger2集成:环境配置和验证
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配置:
-
buildscript {
-
repositories {
-
谷歌()
-
jcenter()
-
}
-
dependencies {
-
classpath 'com.android.tools.build:gradle:3.5.2'
-
classpath 'org.greenrobot:eventbus-annotation-processor:3.1.1' //增加依赖annotationProcessor
-
}
-
}
-
-
allprojects {
-
repositories {
-
谷歌()
-
jcenter()
-
}
-
}
-
-
task clean(type: Delete) {
-
delete rootProject.buildDir
-
}
注,重点关注注释提示的代码配置
app级build.gradle配置:
-
apply plugin: 'com.android.application'
-
-
android {
-
compileSdkVersion 30
-
buildToolsVersion "31.0.0"
-
defaultConfig {
-
applicationId "com.tc.app.dagger2"
-
minSdkVersion 24
-
targetSdkVersion 30
-
versionCode 1
-
versionName "1.0"
-
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
-
}
-
buildTypes {
-
release {
-
minifyEnabled false
-
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
-
}
-
}
-
compileOptions {
-
sourceCompatibility = 1.8
-
targetCompatibility = 1.8
-
}
-
}
-
-
dependencies {
-
implementation fileTree(dir: 'libs', include: ['*.jar'])
-
implementation 'androidx.appcompat:appcompat:1.0.2'
-
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
-
implementation 'com.谷歌.android.material:material:1.0.0'
-
-
// 开始增加Dagger2依赖关系
-
annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.1.1'//增加依赖annotationProcessor
-
annotationProcessor 'com.谷歌.dagger:dagger-compiler:2.40'// 指定注解处理器
-
compileOnly 'org.glassfish:javax.annotation:10.0-b28'//添加android缺失的部分javax注解
-
implementation 'com.谷歌.dagger:dagger:2.40'// 指定依赖版本
-
// Dagger2依赖关系添加结束
-
-
testImplementation 'junit:junit:4.12'
-
androidTestImplementation 'androidx.test.ext:junit:1.1.0'
-
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
-
}
1.2 对Dagger2配置环境进行简单验证
1.2.1 新建Android项目,并配置Dagger2
新建一个简单的Android工程,并参考1.1章节中的配置介绍,对工程进行Dagger2依赖关系配置(此过程省略——应该能搞定哦)
1.2.2 编写验证代码
首先,编写等待进行依赖注入的业务代码(MyBusinessApiService)
-
package com.tc.app.dagger2.di;
-
-
import android.util.Log;
-
-
/**
-
* 真实的业务处理服务
-
*
-
* @author min.weixm
-
* @version $Id: MyBusinessApiService.java, v 0.1 2021/11/12 14:35 min.weixm Exp $
-
*/
-
public class MyBusinessApiService {
-
public void register(){
-
Log.i("----------------------------MyBusinessApiService--------------------","MyBusinessApiService");
-
}
-
}
真实的业务处理类,通过打印日志的方式来验证Dagger2配置环境是否可以正常工作。
接下来,配置业务处理服务的实际实例化处理工具(MyBusinessApartModule)
-
package com.tc.app.dagger2.di;
-
-
import dagger.Module;
-
import dagger.Provides;
-
-
/**
-
* 在这里对实际进行业务处理的组件进行实例化(如,对MyBusinessApiService进行实例化处理)
-
*
-
* @author min.weixm
-
* @version $Id: MyBusinessApartModule.java, v 0.1 2021/11/12 14:38 min.weixm Exp $
-
*/
-
-
public class MyBusinessApartModule {
-
-
public MyBusinessApiService provideMyBusinessApiService(){
-
return new MyBusinessApiService();
-
}
-
-
}
然后,声明我们的容器对接接口(MyApartComponent)
-
package com.tc.app.dagger2.di;
-
-
import com.tc.app.dagger2.MainActivity;
-
-
import dagger.Component;
-
-
/**
-
* 不真正提供实例,真实实例由 MyBusinessApartModule 提供
-
*
-
* @author min.weixm
-
* @version $Id: MyApartComponent.java, v 0.1 2021/11/12 14:40 min.weixm Exp $
-
*/
-
-
public interface MyApartComponent {
-
void inject(MainActivity activity);
-
}
注:完成本操作后,需要唤醒Dagger2进行对接业务处理自动生成代码,因此,需要对工程执行一次build操作,这时,Dagger2会完成相应的代码自动生成动作
最后,我们做依赖注入的业务对接(MainActivity)
-
package com.tc.app.dagger2;
-
-
import android.os.Bundle;
-
import android.view.Menu;
-
import android.view.MenuItem;
-
-
import androidx.appcompat.app.AppCompatActivity;
-
import androidx.appcompat.widget.Toolbar;
-
-
import com.谷歌.android.material.floatingactionbutton.FloatingActionButton;
-
import com.谷歌.android.material.snackbar.Snackbar;
-
import com.tc.app.dagger2.di.DaggerMyApartComponent;
-
import com.tc.app.dagger2.di.MyBusinessApiService;
-
-
import javax.inject.Inject;
-
-
public class MainActivity extends AppCompatActivity {
-
-
/** 通过依赖注入的业务服务实例 */
-
-
MyBusinessApiService myBusinessApiService;
-
-
-
protected void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.activity_main);
-
Toolbar toolbar = findViewById(R.id.toolbar);
-
setSupportActionBar(toolbar);
-
-
FloatingActionButton fab = findViewById(R.id.fab);
-
fab.setOnClickListener((view) ->
-
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
-
.setAction("Action", null).show()
-
);
-
-
//初始化环境,并完成功能调用
-
DaggerMyApartComponent.create().inject(this);
-
this.myBusinessApiService.register();
-
}
-
-
-
public boolean onCreateOptionsMenu(Menu menu) {
-
// Inflate the menu; this adds items to the action bar if it is present.
-
getMenuInflater().inflate(R.menu.menu_main, menu);
-
return true;
-
}
-
-
-
public boolean onOptionsItemSelected(MenuItem item) {
-
// Handle action bar item clicks here. The action bar will
-
// automatically handle clicks on the Home/Up button, so long
-
// as you specify a parent activity in AndroidManifest.xml.
-
int id = item.getItemId();
-
-
//noinspection SimplifiableIfStatement
-
if (id == R.id.action_settings) {
-
return true;
-
}
-
-
return super.onOptionsItemSelected(item);
-
}
-
}
验证结果,在模拟器中run下app,观察运行日志:
-
I/----------------------------MyBusinessApiService--------------------: MyBusinessApiService
-
D/OpenGLRenderer: HWUI GL Pipeline
-
D/: HostConnection::get() New Host Connection established 0xa71e4380, tid 3631
-
I/OpenGLRenderer: Initialized EGL, version 1.4
-
D/OpenGLRenderer: Swap behavior 1
-
W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
顺利得到业务组件的打印日志,说明本次Dagger2配置验证成功。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfgbbg
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13