React Native生成Android签名APK失败:执行aapt出错
解决React Native Android Release构建中aapt执行失败的问题(无需禁用Aapt2)
我之前帮不少开发者解决过这个问题,不用禁用Aapt2的话,可以从以下几个方向排查修复,都是实际验证有效的方案:
检查资源文件的命名与语法
Aapt2对资源的规范要求比旧版aapt严格得多,debug模式下可能宽容一些,但release构建会触发错误:- 确保所有资源文件名(比如drawable里的图片、raw目录的文件)只用小写字母、数字、下划线和连字符,不能有大写或特殊字符(比如空格、中文)。
- 检查
res/values/strings.xml、布局文件等是否有语法错误,比如未闭合的标签、未转义的特殊字符(比如&要写成&)。 - 举个例子:如果你的图片叫
UserAvatar.png,改成user_avatar.png,并同步更新代码里的引用。
清理项目缓存与重建
缓存的旧资源或依赖冲突经常是罪魁祸首,按顺序执行以下操作:- 执行
./gradlew clean清理gradle缓存 - 删除
android/app/build目录 - 删除项目根目录的
node_modules和package-lock.json/yarn.lock - 重新安装依赖:
npm install或yarn install - 再次尝试构建:
./gradlew assembleRelease
- 执行
匹配Android SDK与Build Tools版本
React Native不同版本对Android构建工具的版本有要求,版本不兼容会导致Aapt2报错:- 打开
android/build.gradle,确保buildToolsVersion、compileSdkVersion、targetSdkVersion符合当前RN版本的要求(比如RN 0.68+建议用compileSdkVersion 31,buildToolsVersion 30.0.3) - 示例配置:
buildscript { ext { buildToolsVersion = "30.0.3" compileSdkVersion = 31 targetSdkVersion = 31 } // 其他配置 }
- 打开
验证签名配置正确性
签名配置的错误可能间接导致资源处理失败,检查android/app/build.gradle里的signingConfigs:signingConfigs { release { storeFile file("your-keystore-file.keystore") storePassword "your-store-pass" keyAlias "your-key-alias" keyPassword "your-key-pass" } } buildTypes { release { signingConfig signingConfigs.release // 其他release配置 } }确保keystore文件路径正确,密码和别名没有拼写错误,且keystore文件没有损坏。
排查第三方库的资源冲突
部分第三方RN库可能包含不符合Aapt2规范的资源,导致构建失败:- 尝试暂时移除最近添加的第三方库,重新构建,逐步定位出问题库
- 查看该库的GitHub Issues,看是否有其他用户遇到类似问题,或者升级到该库的最新版本
启用详细日志定位具体错误
如果以上方法都没解决,执行带日志参数的构建命令,获取更精准的错误信息:./gradlew assembleRelease --info日志里会明确指出是哪个资源文件(比如某张图片、某个布局)导致的Aapt2失败,根据提示针对性修复即可。
内容的提问来源于stack exchange,提问作者Mayoul
相关产品推荐
相关产品推荐

