- 寫在前面:
- 專案場景:
- 問題描述:
- 原因分析:
- 解決方案:
- Android遷移AndroidX:
- 遇到的坑:
- 寫在最后:
寫在前面:
備份!備份!備份! 重要的事情說三遍
專案場景:
Android專案遷移到AndroidX問題描述:
專案在 Android 10獲取相冊圖片和拍照時無法獲取到檔案路徑,進而使app崩潰, 我使用的拍照裁剪的庫是:api 'com.github.LuckSiege.PictureSelector:picture_library:v2.2.3'
原因分析:
由于當前依賴庫沒有使用最新的2.5.3,所以導致專案沒有適配到Android10,進而使得讀取相冊檔案路徑時出現FileNotFoundException e java.io.FileNotFoundException: /storage/emulated/0/Pictures/xxxxx.jpg: open failed: EACCES (Permission denied)的問題,【首先宣告這個問題不是由于沒有動態獲取權限導致的,也就是說//清單檔案中已添加
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
//activity中權限動態申請
String[] permissionArr = new String[]{
//相機權限
Manifest.permission.CAMERA,
//SD卡讀寫操作
Manifest.permission.READ_EXTERNAL_STORAGE,
};
//動態權限已申請
PermissionsUtils.getInstance().checkPermissions(this, permissionArr, new PermissionsUtils.IPermissionsResult() {
@Override
public void passPermissions() {
}
@Override
public void forbidPermissions() {
}
});
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
PermissionsUtils.getInstance().onRequestPermissionsResult(this, requestCode, permissions, grantResults);
}
】
排查后是由于拍照裁剪庫未更新到最新導致的,解決方案:
升級拍照裁剪庫到2.5.3 api 'com.github.LuckSiege.PictureSelector:picture_library:v2.5.3'
此時由于這個庫已經使用了AndroidX而我的專案還是Android的,所以就出現了如下問題:

這一看,這專案是不得不升級到AndroidX了呀,所以就開始查找文章開始操作,沒想到一頓操作猛如虎,簡直就是二百五,不過好在操作之前做了備份【一定要先備份!備份!備份!】
Android遷移AndroidX:
1、 gradle.properties檔案中添加
# 表示使用 androidx
android.useAndroidX=true
# 表示將第三方庫遷移到 androidx
android.enableJetifier=true
點擊右上角Sync Now
2、 Android Studio 一鍵遷移

然后就一路操作就可以了,
你以為這樣就結束了嗎?NO NO NO
3、 將專案中support未匯入或匯入出錯的包手動查找匯入
有文章說全文搜索,將support.v搜索一遍,將專案中所有support包替換成對應的androidX庫就可以了,但是我采用這種方法沒有替換干凈,所以只能哪里報錯去哪里手動匯入,
recyclerview、drawlayout、viewpager、tablayout、ConstraintLayout自動匯入的那個包檔案不對,需要替換,目前我用到的是這幾個,
到此就可以了,
遇到的坑:
1、清單檔案中權限重復,導致一直提示Manifest merger failed with multiple errors, see logs
解決方法:tetminal中輸入
gradlew processDebugManifest -stacktrace
查看詳細資訊,挨個解決就可以了,
2、各module中sdkVersion不一致導致的
解決方法:修改統一即可
3、Unable to start the daemon process. This problem might be caused by …
解決方法:
1、將安裝C盤的.gradle目錄洗掉掉
2、設定gradle.properties,若無就新增,
在檔案中添加如下配置資訊:
org.gradle.jvmargs=-Xmx512m
3、新建系統變數
變數名 _JAVA_OPTIONS
變數值 -Djava.net.preferIPv4Stack=true
【網上的方法 修改或者配置gradle檔案沒有成功解決的 可以試試這個方法!】
寫在最后:
利用好Android Studio中的 Clean Project 和 Invalidate Caches/Restart…
原創不易,歡迎指正,不喜勿碰,謝謝!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/4446.html
標籤:其他
上一篇:Discrete Centrifugal Jumps(單調堆疊+dp)
下一篇:axios
