React Native Image Crop Picker安卓编译失败,不升级SDK至33如何解决?
解决react-native-image-crop-picker在Android SDK31下编译失败的问题
错误原因
报错里的Build.VERSION_CODES.TIRAMISU是Android 13(API level 33)新增的版本常量,你的项目compileSdkVersion设为31,编译器无法识别这个未在SDK31中定义的符号,导致编译失败。
无需升级SDK的解决方法
方法1:降级react-native-image-crop-picker版本
react-native-image-crop-picker 0.39.0开始引入了Android 13的权限适配,如果你需要保持SDK31,可以降级到0.38.x版本,这个版本还没有加入TIRAMISU相关的代码:
npm install react-native-image-crop-picker@0.38.4 --save # 或者用yarn yarn add react-native-image-crop-picker@0.38.4
安装后重新执行Android编译即可。
方法2:用patch-package修改源码(推荐)
如果你不想降级版本,可以通过patch-package给react-native-image-crop-picker打补丁,替换TIRAMISU常量为对应的数值(33),这样在SDK31环境下也能编译:
- 先安装patch-package:
npm install patch-package postinstall-postinstall --save-dev # 或者yarn yarn add patch-package postinstall-postinstall --dev
- 打开
node_modules/react-native-image-crop-picker/android/src/main/java/com/reactnative/ivpusic/imagepicker/PickerModule.java,找到报错的第406行,把Build.VERSION_CODES.TIRAMISU替换为33:
原代码:
permissionsCheck(activity, promise, Collections.singletonList(Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU ? Manifest.permission.WRITE_EXTERNAL_STORAGE : Manifest.permission.READ_MEDIA_IMAGES), new Callable<Void>() {
修改后:
permissionsCheck(activity, promise, Collections.singletonList(Build.VERSION.SDK_INT < 33 ? Manifest.permission.WRITE_EXTERNAL_STORAGE : Manifest.permission.READ_MEDIA_IMAGES), new Callable<Void>() {
- 生成补丁:
npx patch-package react-native-image-crop-picker
- 在
package.json的scripts里添加postinstall脚本,确保每次npm install后补丁自动应用:
"scripts": { ... "postinstall": "patch-package" }
之后重新编译Android项目就能正常通过了。
方法3:临时修改node_modules代码(不推荐)
直接修改node_modules里的上述文件,把Build.VERSION_CODES.TIRAMISU改成33,但这种方法的问题是每次执行npm install或yarn install后,修改的代码会被覆盖,需要重新修改,适合临时测试用。
内容的提问来源于stack exchange,提问作者Sanju Anupa
相关产品推荐
相关产品推荐

