RxAndroid2+RxLifecycle2+Retrofit2 依賴引入和衝突分析
2017.10.23日使用各個版本最新的依賴分析
- https://github.com/ReactiveX/RxJava
- https://github.com/ReactiveX/RxAndroid
- https://github.com/trello/RxLifecycle
- https://github.com/square/retrofit
- https://github.com/google/dagger
使用最新版本中做測試,每個依賴都會自己包含其他依賴,有些自己會包含其他,所以可以不需要引入也行。下面分析每個依賴自帶哪些版本號的資訊
一、retrofit:2.3.0
-
單獨使用retrofit:
compile "com.squareup.retrofit2:retrofit:2.3.0"
-
使用adapter-rxjava聯結器 - 預設自帶了retrofit和rxjava 使用rxjava2.0需要聯結器
compile"com.squareup.retrofit2:adapter-rxjava2:2.3.0" * okio-1.13.0 * reactive-streams-1.0.0 * retrofit-2.3.0 * rxjava-2.0.0 * adapter-rxjava2-2.3.0 retrofit和rxjava的聯結器。
-
使用converter-gson解析器 - GsonConverterFactory
"com.squareup.retrofit2:converter-gson:2.3.0" //解析器 * okio-1.13.0 * reactive-streams-1.0.0 * okhttp-3.8.0 * gson-2.7 * converter-gson-2.3.0 GsonConverterFactory解析器 * retrofit-2.3.0預設自帶了retrofit所以可以不用引入retrofit
結論
如果使用retrofit + rxjava ,只引用2個就夠,因為自動會引用retrofit:2.3.0
compile"com.squareup.retrofit2:adapter-rxjava2:2.3.0" //聯結器
compile"com.squareup.retrofit2:converter-gson:2.3.0" //解析器
PS:
聯結器還有另外一種方式,這是官方adapter-rxjava2聯結器還沒出時,由jakewharton寫的一個retrofit2和rxandroid2的一個聯結器retrofit2-rxjava2-adapter.不過建議還是寫官方的好
retrofit2-rxjava2-adapter:1.0.0
compile "com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0"
* okhttp-3.3.0
* okio-1.8.0
* reactive-streams-1.0.0
* retrofit2-rxjava2-adapter-1.0.0
* retrofit-2.1.0
* rxjava-2.0.0
二、RxAndroid2.0.1 Rxjava2.1.5
-
RxAndroid
compile 'io.reactivex.rxjava2:rxandroid:2.0.1" * reactive-streams-1.0.0 * rxandroid:2.0.8 * rxjava:2.0.8
-
RxJava
compile "io.reactivex.rxjava2:rxjava:2.1.5" 控制最新版本號
三、RxLifecycle
-
rxlifecycle-components:2.1.0
問題:使用2.2.0版本,
compile'com.android.support:appcompat-v7:26.+' 需要設定26的版本
buildToolsVersion"26.0.0" 也需要設定26嘗試解決方案:
使用舊版2.1.0,可以使用compile'com.android.support:appcompat-v7:25.3.1'
使用舊版2.2.0 使用新版本compile'com.android.support:appcompat-v7:26.0.2'
buildToolsVersion"26.0.0" (不過appcompat-v7:26.0.2'一直下載不了,有待驗證)-
使用新版2.2.0 剔除自帶的appcompat-v7 使用compile 'com.android.support:appcompat-v7:+'自帶最新版本,目前是26.0.0-alpha1
compile ("com.trello.rxlifecycle2:rxlifecycle-components:2.2.0") { exclude group:'com.android.support', module:'appcompat-v7' }
注意剔除的寫法,需要(){ }
不過他自己還需要自帶其他依賴。這種方式也不行。
所以目前只能使用2.1.0版本引入rxlifecycle-components 自帶了rxlifecycle 所以下面的rxlifecycle如果版本號不變 可以不引入compile "com.trello.rxlifecycle2:rxlifecycle-components:2.1.0" * reactive-streams-1.0.1 * rxandroid:2.0.1 * rxjava:2.1.1 * rxlifecycle:2.1.0 * rxlifecycle-android:2.1.0 * rxlifecycle-components:2.1.0
這個包含了很多最基本的rxandroid + rxjava + rxlifecycle等。所以理論上使用這個就包含了第二大點的引入(RxJava RxAndroid)
-
rxlifecycle:2.2.0
compile "com.trello.rxlifecycle2:rxlifecycle:2.2.0" * reactive-streams-1.0.1 * rxjava:2.1.0 * rxlifecycle:2.1.0
結論
可以整理依賴引入為:
//retrofit
compile"com.squareup.retrofit2:retrofit:2.3.0"//adapter-rxjava2和converter-gson都引入了retrofit2,這個可以去掉
compile"com.squareup.retrofit2:adapter-rxjava2:2.3.0"//聯結器
compile"com.squareup.retrofit2:converter-gson:2.3.0"//解析器 包含okhttp、gson等
//rxjava rxandroid
compile"io.reactivex.rxjava2:rxjava:2.1.5"
compile"io.reactivex.rxjava2:rxandroid:2.0.1"//本身也自帶rxjava
//rxlifecycle
compile"com.trello.rxlifecycle2:rxlifecycle:2.1.0"//rxlifecycle-components已經引入了,這個可以去掉
compile"com.trello.rxlifecycle2:rxlifecycle-components:2.1.0"
最終引入目錄
四、dagger
如果你 AndroidStudio 的 gradle build tool 版本在 2.2 以上,直接在引進就好了
dependencies {
compile 'com.google.dagger:dagger:2.12' //dagger-2.12 javax.inject-1
annotationProcessor 'com.google.dagger:dagger-compiler:2.12'
}
##官方說明##
dependencies {
compile 'com.google.dagger:dagger:2.x'
annotationProcessor 'com.google.dagger:dagger-compiler:2.x' //指定註解處理器
}
If you're using classes in dagger.android you'll also want to include:
compile 'com.google.dagger:dagger-android:2.x'
// 如果引用了v7等library
//包含了dagger-2.12 javax.inject-1 dagger-android-2.12 jsr305-3.01
compile 'com.google.dagger:dagger-android-support:2.x'
annotationProcessor 'com.google.dagger:dagger-android-processor:2.x'
如果你的 gradle build tool 版本在 2.2 以下,則需要引進 apt 外掛。
首先需要在 Project 層級的 build.gradle 檔案中引入依賴
buildscript {
repositories {
mavenCentral()
}
}
dependencies {
// replace with the current version of the Android plugin
classpath 'com.android.tools.build:gradle:2.1.0'
// the latest version of the android-apt plugin
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
然後在 Module 層級的 build.gradle 引入相應的外掛和依賴
apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'
dependencies {
apt 'com.squareup.dagger:dagger-compiler:2.4'
compile 'com.squareup.dagger:dagger:2.4'
compile 'com.google.dagger:dagger-android-support:2.4'
compile 'org.glassfish:javax.annotation:10.0-b28' //android 缺失的java註解
最終依賴
//add on 2017.10.23
//retrofit
compile "com.squareup.retrofit2:retrofit:2.3.0" //adapter-rxjava2和converter-gson都引入了retrofit2,這個可以去掉
compile"com.squareup.retrofit2:converter-gson:2.3.0" //解析器 主要處理具體物件、jsonObject、jsonArray 包含okhttp、gson等 自帶retrofit:2.3.0
compile"com.squareup.retrofit2:converter-scalars:2.3.0" //解析器 處理String boolean 等基本型別 包含okhttp、gson等 自帶retrofit:2.3.0
//rxjava rxandroid
compile "io.reactivex.rxjava2:rxjava:2.1.5"
compile "io.reactivex.rxjava2:rxandroid:2.0.1" //本身也自帶rxjava
//rxlifecycle
compile "com.trello.rxlifecycle2:rxlifecycle:2.1.0" //rxlifecycle-components已經引入了,這個可以去掉
compile "com.trello.rxlifecycle2:rxlifecycle-components:2.1.0"
//dagger2
compile 'com.google.dagger:dagger:2.12'
annotationProcessor 'com.google.dagger:dagger-compiler:2.12'
精簡依賴
//add on 2017.10.23
//retrofit
compile"com.squareup.retrofit2:adapter-rxjava2:2.3.0" //聯結器 , 自帶retrofit2:2.3.0
compile"com.squareup.retrofit2:converter-gson:2.3.0" //解析器 主要處理具體物件、jsonObject、jsonArray 包含okhttp、gson等 自帶retrofit:2.3.0
compile"com.squareup.retrofit2:converter-scalars:2.3.0" //解析器 處理String boolean 等基本型別 包含okhttp、gson等 自帶retrofit:2.3.0
//rxjava rxandroid
compile "io.reactivex.rxjava2:rxjava:2.1.5"
compile "io.reactivex.rxjava2:rxandroid:2.0.1" //本身也自帶rxjava
//rxlifecycle
compile "com.trello.rxlifecycle2:rxlifecycle-components:2.1.0" //自帶rxlifecycle:2.1.0
//dagger2
compile 'com.google.dagger:dagger:2.12'
annotationProcessor 'com.google.dagger:dagger-compiler:2.12'
相關文章
- Java依賴版本衝突Java
- Maven依賴衝突處理Maven
- maven依賴衝突以及解決方法Maven
- 依賴衝突時的解決方法
- Maven依賴衝突解決總結Maven
- maven解決jar包依賴衝突MavenJAR
- 一招解決所有依賴衝突
- Maven中解決依賴衝突的問題Maven
- Android Studio中架包打包和依賴衝突解決Android
- 依賴引入 | Android依賴引入史上最全攻略Android
- Flutter | 如何優雅的解決依賴版本衝突Flutter
- composer包依賴衝突解決一例
- 文盤Rust -- 本地庫引發的依賴衝突Rust
- Gradle 使用技巧(四) - 如何定位和解決依賴衝突Gradle
- Git Worktree:解決分支依賴衝突的問題Git
- android引入依賴,合集Android
- 一, 建立工程,引入依賴
- 關於 OkHttp 依賴衝突問題的解決過程HTTP
- 請教一個關於 STF 依賴的 node 與 Appium 依賴的 node 版本衝突問題APP
- Composer騷操作,使用本地git目錄作為依賴解決衝突Git
- 使用maven-shade-plugin外掛解決spark依賴衝突問題MavenPluginSpark
- 依賴管理和依賴範圍
- eureka客戶端依賴引入爆紅客戶端
- arcgis js:動態引入js、css依賴JSCSS
- yarn安裝中出現依賴衝突 package.json 中的resolutions 欄位YarnPackageJSON
- 為什麼docker 網段衝突會和宿主機衝突?原因分析和解決方案Docker
- JavaScript中解決jQuery和Prototype.js同時引入衝突問題JavaScriptjQueryJS
- 13-angular 思考和分析 依賴注入 -1Angular依賴注入
- 有關專案依賴包發生 Manifest Merge 衝突的詳細解決方案
- Activemq和Rabbitmq埠衝突MQ
- Android Studio中引入Gson依賴(簡述版)Android
- Androidstuio有關導如專案作為依賴以及出現包衝突的解決辦法AndroidUI
- 科研和工作並不衝突
- POP Animation 和 layoutSubviews 的衝突View
- IOC容器和依賴注入依賴注入
- idea在pom中引入第三方依賴Idea
- svn檔案衝突,樹衝突詳解
- 依賴