运行3年前React Native项目遇编译报错:android:enableOnBackInvokedCallback未找到
问题1::react-native-navigation:compileReactNative57_5DebugKotlin编译失败
原因
ModalContentLayout类未实现RootView新增的抽象方法onChildStartedNativeGesture,核心是当前使用的react-native-navigation版本与项目依赖的React Native版本(对应compileSdk 31)不兼容,RN后续版本给RootView新增了这个必须实现的抽象方法。
解决方法
优先方案:升级react-native-navigation
查找与当前RN版本匹配的react-native-navigation版本(比如RN 0.68+对应react-native-navigation7.x系列),修改package.json中的依赖版本后执行:npm install # 或 yarn install重新执行编译命令即可。
临时方案:补全方法实现
如果暂时无法升级依赖,找到react-native-navigation源码中的ModalContentLayout.kt文件,添加方法实现:override fun onChildStartedNativeGesture(child: View?) { // 空实现即可,无需额外逻辑 }注意:这种修改会在依赖重新安装后丢失,仅作为临时过渡方案。
问题2::app:processDebugResources AAPT报错(enableOnBackInvokedCallback属性未找到)
原因
android:enableOnBackInvokedCallback是Android 13(API 33)新增的属性,而当前项目compileSdkVersion为31,AAPT无法识别该属性。
解决方法
方案1:升级compileSdkVersion到33
修改模块级build.gradle的配置:android { compileSdkVersion 33 targetSdkVersion 33 // 其他原有配置... }同步gradle后重新编译,可保留
gradle.properties中的android.suppressUnsupportedCompileSdk=33来抑制兼容警告。方案2:移除/屏蔽该属性
如果不想升级compileSdk,直接删除所有AndroidManifest.xml文件中的android:enableOnBackInvokedCallback属性;或者在主AndroidManifest.xml中用tools:remove统一移除:<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <activity android:name=".MainActivity" <!-- 其他属性 --> tools:remove="android:enableOnBackInvokedCallback" /> </manifest>注意:使用
tools:remove需要在manifest根标签添加xmlns:tools声明。
内容的提问来源于stack exchange,提问作者user16525780

