Expo开发React Native支付应用:移除.DUMP权限与CropImageActivity方法
解决Expo React Native移除DUMP权限和CropImageActivity的问题
一、先定位权限/Activity的来源
首先通过Gradle命令确认是哪个依赖引入了目标权限和Activity:
./gradlew app:dependencies
在输出的依赖树里搜索DUMP和com.canhub.cropper.CropImageActivity,找到对应的依赖库,方便后续针对性处理。
二、针对Managed Workflow的解决方案(未预构建)
如果还在纯Managed模式下,必须通过Expo Config Plugin来修改AndroidManifest,因为直接修改app.json的blockedPermissions对部分特殊权限/第三方Activity无效:
1. 创建自定义Config Plugin
在项目根目录新建plugins/removeUnwantedElements.js,内容如下:
const { withAndroidManifest } = require('@expo/config-plugins'); module.exports = function withRemoveUnwantedElements(config) { return withAndroidManifest(config, async (config) => { const androidManifest = config.modResults.manifest; // 移除DUMP权限 if (androidManifest['uses-permission']) { androidManifest['uses-permission'] = androidManifest['uses-permission'].filter(perm => { return !perm.$['android:name'].includes('DUMP'); }); } // 移除CropImageActivity if (androidManifest.application[0].activity) { androidManifest.application[0].activity = androidManifest.application[0].activity.filter(activity => { return activity.$['android:name'] !== 'com.canhub.cropper.CropImageActivity'; }); } return config; }); };
2. 在app.json中注册插件
修改app.json的plugins数组,添加自定义插件:
{ "expo": { "plugins": [ "./plugins/removeUnwantedElements.js" ] } }
3. 重新构建
运行eas build或者expo prebuild,插件会在构建过程中自动修改AndroidManifest。
三、针对预构建后的Bare Workflow解决方案
如果已经执行过expo prebuild进入Bare模式,直接修改AndroidManifest并确保配置生效:
1. 确保tools命名空间存在
打开android/app/src/main/AndroidManifest.xml,在根节点manifest中添加tools命名空间:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="你的包名">
2. 添加移除规则
- 移除DUMP权限:添加空的权限声明并标记移除:
<uses-permission android:name="android.permission.DUMP" tools:node="remove" />
- 移除CropImageActivity:同样添加移除规则:
<activity android:name="com.canhub.cropper.CropImageActivity" tools:node="remove" />
3. 检查Gradle合并策略
如果仍无效,修改android/app/build.gradle,添加Manifest合并规则:
android { // ...其他配置 manifestMerger.enabled = true }
4. 清理并重新构建
执行以下命令清理缓存并构建:
./gradlew clean ./gradlew assembleRelease
四、验证结果
构建完成后,用Android Studio的APK Analyzer打开生成的APK,查看AndroidManifest.xml,确认DUMP权限和CropImageActivity已被移除。
内容的提问来源于stack exchange,提问作者Projétil
相关产品推荐
相关产品推荐

