① 處理Gradle依賴沖突
在android開發過程中會總會引入一些第三方依賴庫,無可避免的會遇到jar/aar包沖突,Manifest合並沖突,資源沖突等問題
基於此本次主要記錄下如何處理類沖突,jar/aar版本沖突。先由常見的com.ta.utdid2.a.a.a found in moles alicloud-android-utdid-2.5.2 android-utdid沖突入手,常見於支付寶sdk和友盟Sdk的沖突。
磨刀不誤砍材工,在處理沖突問題前,要先了解下如何查看Gradle依賴樹,在AS的Terminal里輸入 gradle :app:dependencies 即可查看gradle依賴樹。輸出結果如下(示意)
輸出依賴樹後,在裡面搜索android-utdid,會發現有多個第三方庫對utdid存在引入關系。
經過查看得知utdid我依賴為:com.aliyun.ams:alicloud-android-utdid:2.5.2
該依賴庫的Group為com.aliyun.ams。mole為alicloud-android-utdid
下面要做的就是去除其他依賴對utdid的引入,僅保留一次有效的引用關系即可。
implementation ('com.xxx:yyy:0.0.0.4'){
exclude mole: 'alicloud-android-utdid'
}
implementation ('com.aaa:bbb:0.4'){
exclude mole: 'alicloud-android-utdid'
}
常規查閱資料大家推薦去除重復引入的方法都是exclue group。實際上如該group下的依賴項較多,且只想去除某一個依賴時,這時使用exclude mole能更細節且准確的控制去除某一項的引用關系。
以上為utdid的處理方式
關於微信sdk沖突的處理方式
問題背景:我方已集成wechat-sdk-android-with-mta sdk用作分享和支付功能,隨著業務發展需要接入一個第三方業務Sdk,該Sdk內部具備支付功能,他們也進行了wechat-sdk-android-with-mta的引入,且兩個微信sdk的版本不一致。
此時如果進行打包就會爆出各種com.tecent.xx的類沖突。
處理方式參照支付寶sdk的沖突方式
implementation ('com.xxx:zzz:0.6'){
exclude mole: 'wechat-sdk-android-with-mta'
}
關於網路地圖API_KEY沖突的處理方式
網路地圖需要在主工程的Manifest里注冊一個API_KEY。如此時引入的第三方Sdk里同樣有網路地圖,且已經在內部注冊了com..lbsapi.API_KEY。
此時會出現Manifest.xml的合並沖突。解決方式為增加tools:replace="android:value"屬性即可
<meta-data
android:name="com..lbsapi.API_KEY"
android:value=""
tools:replace="android:value"/>
在開發中不同第三方Sdk對基礎依賴的版本會發生變化,比如ktx和compact的版本。需要強制指定這些基礎依賴的版本統一
方式為在build.gradle(app)里增加
configurations.all{
resolutionStrategy.force'androidx.core:core-ktx:1.8.0-alpha01'
}
後續將持續添加AndroidStudio里各種沖突的處理方式。
② android studio怎麼解決沖突
在使用svn 的時候,當然update別人的代碼會彈出對話窗口提示你沖突,是否合並。合並有三種方案,accept yours 使用你的、accept theirs使用別人的版本和 merge合並。
當你選擇merge合並的時候,會彈出代碼對照合並窗口,一共是三個屏,左右兩邊的是不同的代碼,沖突的地方會被高亮顯示出來,帶有箭頭和叉叉。通過點擊箭頭將兩邊的沖突代碼添加到中間的合並區域中去,點叉叉則放棄那一段代碼。所有沖突處理完成以後merge成功。
2、建議使用git作版本控制,基本操作和svn 差不多,但你可以將代碼commit 在本地,然後再pull 倉庫裡面的代碼來進行merge,這樣就算merge 過程中點錯了什麼,也能將代碼回滾到你上次commit 的版本,再次進行pull 和 merge conflict。一般git 的操作就是先commit,然後Pull,最後push。合並沖突代碼的界面和svn 是一樣的。
③ Android開發之引用三方庫導致SO庫沖突的解決辦法
從這個圖片可以看出 匹配到了多個 libc++_shared.so
packagingOptions的用法使用方法packagingOptions常見的設置項有
exclude、
pickFirst、
doNotStrip、
merge。
exclude
過濾掉某些文件或者目錄不添加到APK中,作用於APK,不能過濾aar和jar中的內容。
④ 終極方案:快速解決Android項目依賴沖突
沖突類型無非是類、jar包重復,比如:
在此不多做介紹了,直接上解決方案
1、配置顯示沖突依賴詳細信息
2、編譯,查看控制台詳細輸出
1、project依賴排除示例
2、遠程依賴排除示例
參考鏈接:如何exclude aar包中的某個jar包
核心:
① 解壓aar文件到tmpDir目錄下
② 找到classes.jar包,用壓縮工具打開,刪除目標文件
③ 將tmpDir重新打包成一個新的aar
⑤ android eclipse開發 drawable文件夾 資源文件大小寫沖突
Android res文件夾下的所有文件不能有大寫字元,如果出現大寫字元會導致R.java無法生成
Android項目是的R文件是由系統生成的資源的定義,如果出同沖突,錯誤,那麼android 無法生成R文件 ,即使有時候你xml文件沒有錯誤,他都無法生成。針對此問題,總結以下幾個方面的原因:
1. xml本身有錯誤
R.java這個文件是會自動生成的,但是如果你不小心xml文件寫錯了,或者不小心在編輯xml的時候點擊了run(其實這個時候會運行這個xml文件,會生成一個同名的xml文件,後綴為xx.out.xml),然後正巧你游clear了一下項目,你可能會發現gen下面的R.java的文件沒有了,這個在剛開始的時候很氣人,真不知道怎麼解決,後來發現,只要xml文件有問題,系統是絕對不會給你自動生成這個R.java文件,因為他要參照你的每張xml里的數據來生成R.java,所以自然就生成不了了。雖然知道了原因但是問題頭疼,假如項目的layout xml文件有幾十個,這個時候怎麼辦,難道要一個一個xml的看嗎,呵呵,其實也不是,把console中的信息clear一下,然後再clear項目一下,這個時候,console中會有很多紅色的信息,參照這個肯定能准確的找到哪個文件報錯了。
下面這個事誤運行了xml文件,可以看到gen的包不是空的,R.java文件也存在,並且明確的支出了是layout包中的錯誤
2. 編碼格式不正確
有時候由於編碼格式問題,造成無法生成R文件,此時後,把編碼格式變成GBK或者UTF--8即可
三,配置問題,轉義字元的問題
因為XML有些特殊字元需要轉義,例如"<>&;"' "等
⑥ Android引入多個jar包,沖突問題解決方案
Android引入多個jar包,沖突問題解決方案(引入jar包,即本地文件) 以引用載入第三方框架中也有okhttp3 okio沖突講解
(PS:如果不知道是那個jar沖突可以用指令gradlew app:dependencies查看)
1.找到項目中的libs->對應沖突的第三方包.jar。
3.用解壓工具打開(不是解壓,是打開。比如windows下可用360解壓打開)。
4.刪掉重復引用的包(okhttp3 + okio)。
5.重新打開項目,等待編譯。
6.可能出現innerClass mission警告,可以忽略掉,或者clean build。
7.如果還報錯的話那麼在app build.gradle加入:
packagingOptions {
exclude 'META-INF/proguard/okhttp3.pro'
}
溫馨提示:
如果你的項目是因為剛剛添加了某個網路載入依賴導致的,那麼你就查看下這個庫下的哪一個依賴沖突了,在添加這個依賴的時候把它給過濾掉。具體寫法如下。
implementation ('com.***.***:XXX:1.2.0'){ // 所加的第三方框架
exclude mole: 'okhttp:3.10.0'
}
//或者要把組名一起添上去
implementation ('com.***.***:XXX:1.2.0'){ // 所加的第三方框架
exclude group: 'com.squareup.okhttp3'
}
⑦ android 卡片畫廊效果及RecycleView、ViewPager、ScrollView之前的沖突解決
1、內容需要通過卡片的形式來展現,還有支持載入更多,所以最底部使用RecyclerView,最好是做成預載入形式,提前n頁載入下一頁,這樣體驗更好。
2、為了展示更多內容卡片內要支持垂直分頁,這時候我使用了ViewPager,一是可以更好的管理分頁內容,二是ViewPager的垂直分頁容易實現,三是可以處理不同控制項之前的滑動沖突
3、ViewPager第一頁使用的可回彈的ScrollView,可以在下拉的時候做一些動畫之類的操作,例如關注操作等。
4、ViewPager的第二頁只是一個普通的ScrollView,具體使用可以根據實際情況來處理
1、RecycleView的分頁效果基於PagerSnapHelper,RecyclerView在25.1.0版本中添加了一盒基於SnapHelper的子類PagerSnapHelper,可以使RecyclerView像ViewPager一樣的效果,一次只能滑一頁,而且居中顯示。
2、卡片的效果是在滑動的時候根據RecycleView的偏移量計算縮放因子進行縮放
3、RecycleView的item內有一個垂直分頁的VerticalViewPager,VerticalViewPager是在ViewPager上轉換X,Y即可
4、解決ViewPager與RecycleView滑動的沖突,在ViewPager中屏蔽父視圖的上下滑動事件
5、解決ViewPager子視圖ScrollView的沖突,在ViewPager中攔截事件
6、解決ViewPager與BounceScrollView的沖突,在下拉過程中有時會被ViewPager攔截
以上就是此項目中的所有關鍵點。
ScrollViewDemo 歡迎Star
RecycleViewCardGallary