本文将重点介绍如何 在 Kotlin 中使用 Dagger ,包括优化构建时间的 最佳实践 以及一些可能会遇到的问题。...Dagger 是通过 Java 的注解模型实现的,而 Kotlin 中注解的编写方式同 Java 的并不是一一对应的,这篇文章会重点介绍它们之间的不同之处,并且会介绍怎样轻松地将 Dagger 同 Kotlin...本文的写作灵感来自 Dagger issue 中的一些建议,这些建议直接代表了在 Kotlin 中使用 Dagger 的最佳实践和一些痛点。在此要感谢所有的 issue 贡献者。...中存在一个不匹配该类型的实例,则可能会导致注入到错误的对象中。...泛型注入 Kotlin 使用通配符编译泛型使 Kotlin API 和 Java 能一起使用。当某个参数或者字段的类型为 泛型 时,会在 Java 代码中自动生成。
不过如果你的项目已经在使用JodaTime,不建议换到ThreeTen,如果是新项目的haul,强烈建议使用ThreeTen。 Timber Timber是一个基于Andorid Log的log库。...当RxJava跟Kotlin结合的时候,两者的优点被一起放大,会让开发者爱不释手。...KTX改变了开发者使用Android API的方式,如果你的项目使用的是Kotlin,那么它应该成为你的核心库之一。 Dagger 没有Dagger的排行榜不完整。...关于Dagger,google有一个著名的咖啡机的例子可以了解一下,我之前也发过几篇分析的文章,可以了解一下Dagger2应用:接入Dagger2 Android应用:@Component和@ModuleDagger2...对于大型项目来说,开发者不希望手工地去处理依赖注入,因为这不容易维护。Dagger通过注解帮开发者完成了这些事情。
经典框架选取总模式:mvvm-databinding图片加载:glide事件总线:kotlin.flow或eventbus,本篇选用kotlin.flow撸出自己的事件总线线程调度:kotlin.CoroutineScope...动画等:lottie or svga or pag不过本篇不教大家如何使用该框架功能。因为单一的工具并非框架重点功能。其他:core-ktx,lifecycle,androidx系列库等。...依赖注入:hilt(可选),依赖注入是否需要使用,取决于预估的项目规格大小,本篇抛砖引玉,会带入一点hilt的使用,不过并非重点,可酌情选取使用。...基础存储:mmkv(可选),由于room有一定的性能问题,所以性能优化后的部分常用键值对可以选用mmkv使用。bug采集:bugly 本篇不接入,正式项目可选取合适自己的采集工具。埋点采集:同上。...: "com.google.dagger:dagger:2.44.2", daggerCompiler : "com.google.dagger
1 阅读精选Kotlin版 https://github.com/LeeeYou/RsKotlin/ 阅读精选Kotlin版是一个由Kotlin开发的简易App,主要用于学习Kotlin语言以及和最新的框架结合使用...引入Kotlin1.1.0版开发 引入Dagger2.4结合Kotlin 引入Retrofit2.0结合Kotlin,抽取ServiceFactory 引入RxAndroid和RxKotlin...2 Android-mvp-kotlin-starter https://github.com/ravidsrk/android-mvp-kotlin-starter Kotlin + MVP + Dagger2...MVP架构 Rxjava + Retrofit + okhttp3 +Dagger2+Kotlin [图片上传中。。。(5)] ?...5 FanfouHandpick 饭否精选 https://github.com/TonnyL/FanfouHandpick 本项目采用 Kotlin 开发,如果你使用的是 Java 进行Android
navigation dependency " ; 点击该界面 , 会弹出如下对话框 , 点击 OK , 会自动向 build.gradle 构建脚本中添加依赖 ; 二、问题分析 ---- 使用...name="org.apache.http.legacy" android:required="true" /> ③ Android Studio 版本可能与...Navigation 组件不兼容。...implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'com.google.android.material:material:1.5.0...androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' } 添加完依赖后 , 重新 Build 一下应用 , Navigation 功能正常使用
在Hilt中,使用@Module和@InstallIn注解类,并使用@Provides方法提供依赖。 2、 Components:Hilt自动生成不同的组件来管理不同的生命周期。...' id 'kotlin-kapt' // Kotlin Annotation Processor id 'dagger.hilt.android.plugin'...:hilt-android-gradle-plugin:2.44' } } 2....setContentView(R.layout.activity_main) // Use activityDependency } } Hilt的原理 Hilt构建于Dagger2...总结如下: 1、 模块(Module)和提供者(Provider Method):通过注解创建模块和提供者方法,并使用Dagger编译器生成相关代码。
应用Kotlin之后,涉及到注解的注解处理器依赖也会由annotationProcessor替换成kapt,和最初应用Kotlin一样,总会让人一种感觉,一番应用Kotlin和Kapt之后,编译耗时更长了...默认情况下,kapt注解处理任务并没有利用开启gradle的构建缓存,需要我们手动增加配置开启 开启方式:在项目的app module下的 build.gradle 文件增加如下代码 1 kapt { 2...开启方式: 对于注解依赖需要使用kapt显式声明 在gradle.properties文件中增加kapt.include.compile.classpath=false 注意: 该特性需 Kotlin...1.3.20 及以上 增量注解处理 Kotlin 自1.3.30引入了一个实验功能,即支持注解增量处理。...在v4.9.0版本增加了增量处理支持,对应的github commit为 https://github.com/bumptech/glide/commit/a16a1baa140c9b87b9a68a2a3b91047fd60ba5d8
Kotlin 1.5.0 即将在今年春天发布,而 Kotlin 1.5.0-M2 是其的最后一个里程碑版本。...实际上,在 Kotlin 1.5.0 发版之前,您还可以为我们在修复紧急问题时提供必要的帮助。...在 IntelliJ IDEA 当中安装 M2 版本,并将项目当中的 Kotlin 版本修改成 1.5.0-M2,如果需要的话,再稍微调整一下依赖就可以了。...我们将持续在这个频道更新视频,并计划发布一系列介绍 Kotlin 1.5.0 的专题视频。千万不要错过 ?! ---- 您还没有验证过 Kotlin 1.5.0 与您的项目是否兼容吗?...抓紧时间安装 1.5.0-M2试试,以后就可以高枕无忧啦!
1. dagger2的@Named,无法使用 在Kotlin使用Dagger2的时候,因为用@Module标注的类里面有返回两个类型一样的方法,需要用@Named来分开标注,不然,会build的时候报错...在正常情况下,用@Named(''example1")来标注method1;用@Named("example2")来标注method2。...可是到了kotlin发现空指针,没有依赖成功。我又试了一下@Qualifier自定义一个注解。因为@Named也是依赖了@Qualifier来生成的。...java是这样子生成一个注解的 @Qualifier @Retention(RetentionPolicy.RUNTIME) @interface FS { } kotlin是这样子生成一个注解的 @Qualifier...解决方法: 然后在dagger2的issue里面提到@Named配合@Inject要这样子用@Inject @field:Named("example1"),同理你也可以用@field:FS来标记,也是成功的
Dagger2简介: Dagger2是Dagger1的分支,由谷歌公司接手开发,目前的版本是2.0。Dagger2是受到AutoValue项目的启发。...Dagger2具有以下好处: 1) 依赖的注入和配置独立于组件之外,注入的对象在一个独立、不耦合的地方初始化,这样在改变注入对象时,我们只需要修改对象的实现方法,而不用大改代码库。...使用 Dagger2 创建依赖对象,我们就不用手动初始化了。...个人认为 Dagger2 和 MVP 架构是比较不错的搭配,Activity 依赖的 Presenter 可以使用该DI框架直接生成,实现解耦,简单的使用方式如下: public class MainActivity...Dagger2注解解释: 接下来介绍Dagger2中的每一个概念: @Inject: 通常在需要依赖的地方使用这个注解。换句话说,你用它告诉Dagger这个类或者字段需要依赖注入。
第十四章 使用Kotlin开发Android程序 正式上架:《Kotlin极简教程》Official on shelves: Kotlin Programming minimalist tutorial...MVP Dagger2 Rxjava DataBinding Retrofit Okhttp3 DeepLinkDispatch Gson Glide ByeBurger Kotlin 让你的代码量大大减少...Dagger2 项目中,主要进行presenter、model、retrofit Api等类的注入操作。...依赖于: 1.ApiModule(提供okhttpClient、Retrofit、Api等) 2.AppModule(提供context对象(okhttp拦截器所需)) FuckGoodsComponent...参考资料 1.http://git.bookislife.com/post/2016/dev-android-using-scala/ 2.https://github.com/saturday06/
版本到 1.7.10 降低 kotlin-stdlib-common-1.7.10.jar 版本 , 使得 Kotlin 1.5.0 版本的可以兼容该依赖库 ; 三、解决方案 ---- 方案一 : 提高...:kotlin-stdlib:1.5.0 -> 1.7.10 | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.7.10 | \--- org.jetbrains...BUILD SUCCESSFUL in 2s 1 actionable task: 1 executed 在 org.jetbrains.kotlin:kotlin-stdlib:1.5.0 -> 1.7.10...> 1.7.10 依赖 , 在该依赖库中使用了 org.jetbrains.kotlin:kotlin-stdlib-common:1.6.0 的依赖 , 但是在其它地方使用了 org.jetbrains.kotlin...force 强制指定依赖库 , 不管版本是多少 , 必须强制使用 org.jetbrains.kotlin:kotlin-stdlib-common:1.5.0 版本的依赖库 ; configurations.all
如果您使用的是 Pixel 2、3、3a 或 4 系列设备,请参加测试并获取 Android 11 Beta 的 OTA 更新。...Kotlin 协程是 Kotlin 语言的诸多强大功能之一,它可以让您更轻松地编写并发调用,同时获得更高的可读性。现在,我们正式推荐开发者使用协程。...很多用户一直对 Dagger 情有独钟,因此我们联合 Dagger 团队推出了 Hilt,这是基于 Dagger 的封装方案,且易于开发者使用。...今天,我们为大家带来 Jetpack Compose 开发者预览版 2,其中包含开发者们一直要求的诸多功能: 与 View 的互操作性 (开始在当前应用中混合使用 Composable 方法) (新!)...我们将在全球举办一系列线上活动,来和大家一起探讨 Android 11 的新内容、应用兼容性,以及现代化 Android 开发的基本知识和最佳实践。请前往 官方网站了解详情。
Dagger 2(Google) implementation 'com.google.dagger2.22.1’ annotationProcessor 'com.google.dagger:dagger-compiler...:2.22.1’ Github:https://github.com/google/dagger EventBus implementation 'org.greenrobot:eventbus:3.2.0...’ Github:https://github.com/greenrobot/EventBus 相关文章:EventBus使用详解(一)——初步使用EventBus EventBus使用详解(二)——.../greenDAO 相关文章:玩转Android之数据库框架greenDAO3.0使用指南 LitePal(数据库) implementation 'org.litepal.guolindev:core...github为最新(不审核)
版本到 1.7.10 降低 kotlin-stdlib-common-1.7.10.jar 版本 , 使得 Kotlin 1.5.0 版本的可以兼容该依赖库 ; 三、解决方案 ---- 方案一 : 提高...依赖库版本 使用的 kotlin-stdlib-common-1.7.10.jar 依赖库版本太高 , 降低该依赖库版本 ; 首先分析该依赖库是如何导入进来的 , 在模块的构建脚本中 , 没有直接导入该依赖库...:kotlin-stdlib:1.5.0 -> 1.7.10 | +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.7.10 | \--- org.jetbrains...force 强制指定依赖库 , 不管版本是多少 , 必须强制使用 org.jetbrains.kotlin:kotlin-stdlib-common:1.5.0 版本的依赖库 ; configurations.all...{ resolutionStrategy { force org.jetbrains.kotlin:kotlin-stdlib-common:1.5.0 } }
通过命令行和配对码就可以直接使用该功能。...具体使用方式见官方文档: https://developer.android.com/preview/privacy/data-access-auditing 另外,Jeremy Walker 用 Kotlin...在 Android Studio 上使用 Dagger 《Dagger navigation support in Android Studio》,地址如下: https://medium.com/androiddevelopers...Canary 又内置了对 Dagger 的自动跳转支持,如下图所示: Kotlin objects Kotlin Vocabulary 系列的最新文章 —— 《The one and only object...》,地址如下: https://medium.com/androiddevelopers/the-one-and-only-object-5dfd2cf7ab9b 主要介绍了 Kotlin 中的 object
2、Gradle Kotlin DSL 2.1 Kotlin DSL优缺点: Android Gradle插件4.0支持在Gradle构建配置中使用Kotlin脚本 (KTS),用于替代 Groovy(...KTS:是指Kotlin脚本,这是Gradle在构建配置文件中使用的一种Kotlin语言形式。Kotlin脚本是可从命令行运行的Kotlin代码。...继续改造新build.gradle.kts buildscript { //ext.kotlin_version = '1.5.0' val kotlinVersion = "1.5.0...:kotlin-gradle-plugin:$kotlin_version") //因为这个是Kotlin plugin所以可以直接 使用 kotlin("gradle-plugin","版本号")...{ //name = "hqk" set("name","hqk") set("kotlinVersion","1.5.0") } //最新的使用 ext 变量 ext
RxJava、Retrofit、Dagger、MVP 组合的开发模式也是越来越成为主流开发技术。...Google 又力推使用 Kotlin 语言作为 Android 开发语言。此外,Flutter 最近也是火到爆炸。...2、首要学习掌握工作项目中用到的技术,工作得到认可才是最重要的。...3、还是挺推荐多学习一些开源项目,尤其那些 Star 很多的项目,都是很值得学习的,一方面学习别人的思路,另一方面这些开源项目中一般都会使用 RxJava、Retrofit 、Kotlin 等技术,这些技术都是目前主流技术...这些建议可能并没有什么价值,但不管怎样,为了中国梦,大家一起加油吧。
2.目录结构 ├── .gradle ├── .idea ├── app.main.java.package │ ├── api 配置请求地址 │ ├── base...build.gradle ├── settings.gradle 3.图解 4.技术选型 MvpArms KotlinMvpTemplate Mvp+Rxjava+Retrofit+Dagger...+组件化 Kotlin+Mvp+Rxjava+Retrofit 使用方便,还有一键生成工具,冗余代码过多,不适合快速开发 使用方便,适合快速开发以及新手 框架成熟...可根据需求定制 Java Kotlin 为什么和MvpArms做对比昵?...加入Dagger2,过多冗余代码用标签代替 开放一键生成contract – model – presenter 工具 7.简单效果图 项目功能较为简单,只是一个简单的图片展示,目前项目封装了以下点位:
() + "," + newCar2.hashCode()); } dagger的使用就先聊到这啦,相信对dagger也已经有了初步认识,还有些注解没讲到,比如: @Provides:当我们没法用@Inject...注:一开始写接口名字时,用造车图纸CarGraph而不是造车厂CarFactory,是为了避免和dagger的生成类搞混,用CarGraph有几何图的寓意,可以理解成造车蓝图(PPT),让我们一起,为梦想窒息...使用场景 那dagger在Android中有哪些用武之地?...首先是从架构角度,在谷歌示例中,结合了Activity、伪ViewModel、Repository、DataSource和Retrofit来使用dagger,(还没用过,不知道香不香、坑多不多,靠屏幕前的大佬们反馈了...然后我们在项目中的一些场景,是从业务角度切入,在个别复杂度较高的业务线上单独使用dagger。
领取专属 10元无门槛券
手把手带您无忧上云