React Native执行bundleReleaseJsAndAssets任务遇Gradle依赖错误
问题描述
执行Task :app:bundleReleaseJsAndAssets时,Gradle禁用了该任务的执行优化,原因是该任务使用了多个第三方依赖任务的输出但未声明显式或隐式依赖,可能导致任务执行顺序错误,进而生成错误结果。具体涉及的依赖及未声明的任务包括:
- lottie-react-native:
compileReleaseAidl、packageReleaseRenderscript、prepareReleaseArtProfile、writeReleaseAarMetadata - react-native-async-storage_async-storage:
compileReleaseAidl、packageReleaseRenderscript、prepareReleaseArtProfile、writeReleaseAarMetadata - react-native-firebase_app:
compileReleaseAidl、packageReleaseRenderscript - react-native-firebase_storage:
packageReleaseRenderscript、prepareReleaseArtProfile、writeReleaseAarMetadata - react-native-gesture-handler:
compileReleaseAidl、packageReleaseRenderscript、prepareReleaseArtProfile、writeReleaseAarMetadata - react-native-google-signin_google-signin:
compileReleaseAidl、packageReleaseRenderscript、prepareReleaseArtProfile、writeReleaseAarMetadata - react-native-linear-gradient:
compileReleaseAidl、packageReleaseRenderscript、prepareReleaseArtProfile、writeReleaseAarMetadata - react-native-masked-view_masked-view:
compileReleaseAidl、packageReleaseRenderscript、prepareReleaseArtProfile、writeReleaseAarMetadata - react-native-safe-area-context:
compileReleaseAidl、prepareReleaseArtProfile、writeReleaseAarMetadata - react-native-screens:
compileReleaseAidl、packageReleaseRenderscript、prepareReleaseArtProfile、writeReleaseAarMetadata - react-native-vector-icons:
compileReleaseAidl、packageReleaseRenderscript、prepareReleaseArtProfile、writeReleaseAarMetadata
解决方案
1. 显式声明任务依赖
在项目的android/app/build.gradle文件中,为bundleReleaseJsAndAssets任务添加对所有报错任务的显式依赖:
tasks.named('bundleReleaseJsAndAssets') { dependsOn( // lottie-react-native ':lottie-react-native:compileReleaseAidl', ':lottie-react-native:packageReleaseRenderscript', ':lottie-react-native:prepareReleaseArtProfile', ':lottie-react-native:writeReleaseAarMetadata', // async-storage ':react-native-async-storage_async-storage:compileReleaseAidl', ':react-native-async-storage_async-storage:packageReleaseRenderscript', ':react-native-async-storage_async-storage:prepareReleaseArtProfile', ':react-native-async-storage_async-storage:writeReleaseAarMetadata', // firebase app ':react-native-firebase_app:compileReleaseAidl', ':react-native-firebase_app:packageReleaseRenderscript', // firebase storage ':react-native-firebase_storage:packageReleaseRenderscript', ':react-native-firebase_storage:prepareReleaseArtProfile', ':react-native-firebase_storage:writeReleaseAarMetadata', // gesture-handler ':react-native-gesture-handler:compileReleaseAidl', ':react-native-gesture-handler:packageReleaseRenderscript', ':react-native-gesture-handler:prepareReleaseArtProfile', ':react-native-gesture-handler:writeReleaseAarMetadata', // google-signin ':react-native-google-signin_google-signin:compileReleaseAidl', ':react-native-google-signin_google-signin:packageReleaseRenderscript', ':react-native-google-signin_google-signin:prepareReleaseArtProfile', ':react-native-google-signin_google-signin:writeReleaseAarMetadata', // linear-gradient ':react-native-linear-gradient:compileReleaseAidl', ':react-native-linear-gradient:packageReleaseRenderscript', ':react-native-linear-gradient:prepareReleaseArtProfile', ':react-native-linear-gradient:writeReleaseAarMetadata', // masked-view ':react-native-masked-view_masked-view:compileReleaseAidl', ':react-native-masked-view_masked-view:packageReleaseRenderscript', ':react-native-masked-view_masked-view:prepareReleaseArtProfile', ':react-native-masked-view_masked-view:writeReleaseAarMetadata', // safe-area-context ':react-native-safe-area-context:compileReleaseAidl', ':react-native-safe-area-context:prepareReleaseArtProfile', ':react-native-safe-area-context:writeReleaseAarMetadata', // screens ':react-native-screens:compileReleaseAidl', ':react-native-screens:packageReleaseRenderscript', ':react-native-screens:prepareReleaseArtProfile', ':react-native-screens:writeReleaseAarMetadata', // vector-icons ':react-native-vector-icons:compileReleaseAidl', ':react-native-vector-icons:packageReleaseRenderscript', ':react-native-vector-icons:prepareReleaseArtProfile', ':react-native-vector-icons:writeReleaseAarMetadata' ) }
2. 临时禁用Gradle依赖验证
如果需要快速完成构建,可在gradle.properties中添加以下配置跳过依赖验证:
org.gradle.dependency.verification=none
注意:这只是临时方案,长期使用可能隐藏其他依赖问题,建议仅用于紧急场景。
3. 升级第三方依赖版本
部分React Native库的新版本可能已修复Gradle任务依赖声明问题,尝试将以下依赖升级至最新稳定版:
- lottie-react-native
- @react-native-async-storage/async-storage
- @react-native-firebase/app & @react-native-firebase/storage
- react-native-gesture-handler
- @react-native-google-signin/google-signin
- react-native-linear-gradient
- @react-native-masked-view/masked-view
- react-native-safe-area-context
- react-native-screens
- react-native-vector-icons
升级后重新执行bundleReleaseJsAndAssets任务,检查问题是否解决。
内容的提问来源于stack exchange,提问作者Ankit Mandiratta
相关产品推荐
相关产品推荐

