Rxjava1升級Rxjava2坑 共存問題 通常情況下,如果我們希望在一個模塊中既想使用rxjava1又想使用rxjava2,這個時候在運行的時候會出現一下報錯: ... APK META/ INF/rxjava.properies 解決辦法:要麼都用rxjava1要麼都用rxjava2 出現此報 ...
Rxjava1升級Rxjava2坑
共存問題
通常情況下,如果我們希望在一個模塊中既想使用rxjava1又想使用rxjava2,這個時候在運行的時候會出現一下報錯:
... APK META/-INF/rxjava.properies
解決辦法:要麼都用rxjava1要麼都用rxjava2
出現此報錯的原因大概就是找到某個類的兩個文件入口,因此無法判斷使用哪個方法.
依賴問題
如果有依賴rxjava1,那麼升級時在運行時也會出現上述所說的問題:
a、第三方模塊
b、手動導jar包
c、通過compile方式的庫
... APK META/-INF/rxjava.properies
解決辦法:
1、通用的辦法(這種方法基本可以適用於所有的依賴問題,這種方式是在打包的時候排除這些問題件):
packagingOptions{
exclude 'META-INF/rxjava.properties'
}
2、解決通過compile方式依賴的問題:
找出compile方式的庫中存在依賴rxjava庫(同時也適用於第三方模塊中的compile情況),然後在最後面加上@aa
例如:
compile 'com.darsh.multipleimageselect:multipleimageselect:1.0.4@aar'
其中最大的坑就是Bmob的引用問題(希望Bmob能儘快解決):
由於本人是使用導jar包的方式引入Bmob的,因此我就對這種方式的依賴問題說下自己的觀點。
Bmob的SDK代碼中由於依賴了rxjava1,而rxjava2與rxjava1中的包名於類名有了不小的改變,除非你自己去改了SDK的代碼,否則的話就只能用第一種方式來解除依賴問題。
還有一點就是在Bmob中也依賴了許多庫比如說Annotation,gson,如果我們在編譯運行時候也發現類似上述問題的話,我的解決方式是通過壓縮文件打開bmob的jar包,然後刪除對應的庫的文件夾就好了。
自己對第三方庫和第三方服務的一些看法
這裡我想說的一點就是,希望以後第三方庫在升級的時候能相容下低版本的。
還有第三方服務最好不要於某種庫太過於耦合
rxjava2與rxjava1的一些變化
下麵我給出rxjava2的學習博客[給初學者的Rxjava2.0教程][1]
Action -> Consumer
Action0 改成了 Action
Action1
Func -> Function
Func 改成 Function
Func2 改稱了 BiFuncation
Func[3 - 9] 改成了 Function[3 - 9]
Observable.OnSubscribe -> ObservableOnSubscribe
Observable.OnSubscribe 改成了 ObservableOnSubscribe
Observable.Transformer -> ObservableTransformer
Observable.Transformer 改成了 ObservableTransformer
Subscription -> Disposable
Subscription 改成了 Disposable
發現一個lambda的優點
由於rxjava1 到 rxjava2的一些類名和類的方法名發生了變化。因此在使用new方式來設置對象的時候,通過要把類名和方法名字一起改了,如果使用的是lambda表達式,那麼基本不用改代碼,說多無畏,上代碼:
分析以上代碼我們會發現,除了類名於方法名不同之外,其他都是一個樣
下麵是llambda表達式代碼:
看到了麽,我們在升級的時解決類名問題,如果兩個版本的類名沒有改,則直接可以通過去除rxjava1的包,導入rxjava2的包就可以搞定了,是不是神操作