NativeScript 8.5应用因MANAGE_EXTERNAL_STORAGE遭Play商店拒审,求合规构建方案
解决NativeScript 8.5应用Google Play拒审(外部存储权限问题)
1. 显式移除Manifest中隐含的权限
即使未手动申请外部存储权限,NativeScript依赖库或第三方组件仍可能自动添加相关权限。在App_Resources/Android/src/main/AndroidManifest.xml中添加以下配置,强制移除这些权限:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="你的应用包名"> <!-- 强制移除隐含的外部存储权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:node="remove" /> <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" tools:node="remove" /> <!-- 其他原有配置 --> </manifest>
注意必须在manifest标签中添加tools命名空间。
2. 配置图片缓存到应用内部存储
解码结果中org/nativescript/widgets/image/Cache.smali出现的WRITE_EXTERNAL_STORAGE字符串,来自NativeScript核心组件的图片缓存逻辑。通过配置将缓存目录切换到应用私有内部存储,避免权限依赖:
在App_Resources/Android/src/main/res/values/nativescript.xml中添加:
<resources> <string name="nativescript_image_cache_location">internal</string> </resources>
此配置会让图片缓存存储在应用私有目录,无需外部存储权限。
3. 清理构建缓存并重新构建
旧构建缓存可能残留权限相关文件,执行以下命令彻底清理后重新构建发布包:
ns clean ns build android --release --env.production
4. 验证最终APK的合规性
构建完成后,用以下方式确认APK符合要求:
- 使用
aapt工具检查Manifest权限:
确认输出中没有aapt dump permissions app/build/outputs/apk/release/app-release.apkWRITE_EXTERNAL_STORAGE或MANAGE_EXTERNAL_STORAGE权限。 - 注意:
FileProvider.smali中的external-path等字符串属于Android组件正常逻辑(用于共享应用私有文件),不会触发Google Play拒审,无需处理。
5. 完善Google Play控制台声明
在Google Play控制台的「应用内容」板块中,正确声明应用的外部存储使用场景,明确说明应用未使用MANAGE_EXTERNAL_STORAGE权限,也未访问共享外部存储。
内容的提问来源于stack exchange,提问作者David Jourand
相关产品推荐
相关产品推荐

