Android中Hilt的简单使用
前言:
一、Android Hilt依赖注入框架的引入步骤如下:
1.引入Hilt,在App的Build.gradle目录下添加hilt插件和依赖:
plugins {id 'com.android.application'id 'kotlin-android'id 'kotlin-kapt'id 'dagger.hilt.android.plugin'
}
//Dagger - Hiltimplementation "com.google.dagger:hilt-android:2.30"kapt "com.google.dagger:hilt-android-compiler:2.30"implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03"kapt "androidx.hilt:hilt-compiler:1.0.0"// Activity KTX for viewModels()implementation "androidx.activity:activity-ktx:1.3.1"
2.在项目的build.gradle目录下添加hilt的插件依赖:
buildscript {ext.kotlin_version = "1.5.21"repositories {google()jcenter()}dependencies {classpath "com.android.tools.build:gradle:4.1.1"classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"classpath "com.google.dagger:hilt-android-gradle-plugin:2.28.3-alpha"// NOTE: Do not place your application dependencies here; they belong// in the individual module build.gradle files}
}
3.在项目中使用Java8
compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}kotlinOptions {jvmTarget = '1.8'}
二、Hilt的简单使用
1.创建App类,继承于Application
@HiltAndroidApp
class App :Application(){}
2.在Manifast中注册Application
<applicationandroid:name=".app.App"android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.AndroidDeviceIdDemo"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>
</application>
3.将依赖注入到MainActivity类
注:在 Application 类中设置了 Hilt 且有了应用级组件后,Hilt 可以为带有 @AndroidEntryPoint 注释的其他 Android 类提供依赖项
Hilt 目前支持以下 Android 类:
Application(通过使用 @HiltAndroidApp)
Activity
Fragment
View
Service
BroadcastReceiver
4.创建注入类:
@Module
@InstallIn(ActivityComponent::class)
object MainModule {@ActivityScoped@Provides@Named("String2")fun provideTestString2(@ApplicationContext context: Context,@Named("String1") testString1: String) = "${context.getString(R.string.string_to_inject)} - $testString1"
}
@Module
@InstallIn(ApplicationComponent::class)
object AppModule {@Singleton@Provides@Named("String1")fun provideTestString1() = "This is a string we will inject"
}
class TestViewModel @ViewModelInject constructor(@Named("String2") testString2: String):ViewModel(){init {Log.d("ViewModel", "Test String from ViewModel: $testString2")}
}
5.把创建好的测试类注入到MainActivity中:
@Inject
@Named("String1")
lateinit var testString: String
private val viewModel: TestViewModel by viewModels()override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)Log.d("MainActivity", "Test String from MainActivity: $testString")viewModel
}
6.运行结果如下:
7.完整的demo地址:
hint的简单使用
8.参考资料:
hint参考资料
Android中Hilt的简单使用相关推荐
- Android中socket通信简单实现
Android中socket通信简单实现 socket通信需要有一个服务器和客户端,可以把同一个APP作为服务器跟客户端,也可以分开成两个APP. 先上个图: 这里以一个APP作为服务器跟客户端为示例 ...
- android中PAG的简单使用
(入门篇)android中PAG的简单使用 一.pag是什么? 示例:pag官网 二.使用步骤 1.引入库 代码如下(示例):在app文件夹下的build.gradle文件中,添加下面这条依赖,添加到 ...
- android 张口逐帧动画,Android中实现一个简单的逐帧动画(附代码下载)
场景 Android中的逐帧动画,就是由连续的一张张照片组成的动画. 效果 注: 实现 首先准备一组不同表情的照片,放在res/drawable下,然后在此目录下新建动画资源文件fairy.xml 这 ...
- Android中实现一个简单的逐帧动画(附代码下载)
场景 Android中的逐帧动画,就是由连续的一张张照片组成的动画. 效果 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 ...
- Android中CardView的简单使用
Android 5.0的一个新增加的控件CardView. 环境配置 在Android Studio中进行使用,我们需要只需要在Gradle中添加CardView包的依赖即可进行使用. [html] ...
- Android多媒体学习一:Android中Image的简单实例。
在多媒体应用中,Image是最基础的功能模块,接下来我们将看看在Android中是如何获取和存储Image的.Android内嵌的Image获取和存储功能,可以让我们对于整个媒体框架有个比较全面的了解 ...
- android surface编程,Android中SurfaceView用法简单实例
本文实例讲述了Android中SurfaceView用法.分享给大家供大家参考,具体如下: 这里贴上一个小程序代码,主要运用SurfaceView来实现在屏幕上画一个圆,你可以通过按方向键和触摸屏幕来 ...
- Android中Intent.setAction简单使用
1首先大家需要在主界面中拖入一个按钮, 上代码 <?xml version="1.0" encoding="utf-8"?> <LinearL ...
- Android中实现一个简单的照相功能
一个简单的照相功能,拍照之后在另一个activit中显示出拍照的图片. 首先是布局文件: <?xml version="1.0" encoding="utf-8&q ...
最新文章
- 再造一个爱因斯坦?GPT-3 让我看到了名人“重生”的希望
- SQL中的sysobjects与syscolumns
- 浙工大计算机类包含哪些专业,浙江工业大学计算机类专业培养计划
- 神经网络中的反向传播算法
- Cloud一分钟 | Gartner发布2018年第二季度全球服务器市场报告;中信银行联合腾讯云推出手机银行智能语音产品...
- 结合PE格式对linker分析1
- 在电脑上安装python-在电脑上安装python的方法
- ios 性能优化之图形性能测试
- 4:JAVA UUID 生成
- 基于linux的安全通讯过程
- nodejs,webpack安装以及初步运用
- 【图形学实验】Loop Subdivision与Modified Butterfly Subdivision
- 用户运营:如何用B端运营思维做用户增长?
- 拖拽插件jquery.dad.js
- 2023年报考CSM敏捷教练认证好不好?含金量高吗?
- Linux 系统USB设备检测
- HTML 使用table标签制作个人简历
- 老路《用得上的商学课》学习笔记(6-10课)
- 精通Web Analytics 2.0 (10) 第八章:竞争情报分析
- 【book 120】My Brief History By Stephen Hawking
热门文章
- 【洛谷】P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布(详细代码)
- 微信公众号图灵机器人开发php,使用图灵api创建微信聊天机器人
- 电脑控制android 源代码,[源代码]电脑通过adb控制安卓手机
- 单片机原理与应用实验——定时器(C语言),用定时器设计延时函数,并实现流水灯的功能
- 全球及中国抗体药物市场展望规划及专项深度调研报告2021-2027年
- python 删除pdf页面_删除PDF其中几页的方法
- 我为什么花 1 万多买 MacBook Pro,重点是推荐我常用的开发写作相关的工具
- idea使用谷歌翻译
- 常见五轴机床的机械结构形式讲解!
- 【突发】Telsa致命车祸细节报告:人为设定超速15%(下载)