首页 > 编程知识 正文

内存安装的步骤和注意的事项,看电影的步骤和需要注意的事项

时间:2023-05-03 10:04:13 阅读:281863 作者:1261

写在前面:项目场景:问题描述:原因分析:解决方案: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文件中添加

# 表示使用 androidxandroid.useAndroidX=true# 表示将第三方库迁移到 androidxandroid.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…

原创不易,欢迎指正,不喜勿碰,谢谢!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。