React Native 0.63.4集成JailMonkey调用hookDetected报null对象错误
问题根因
报错提示中 JailMonkey 为null,说明JailMonkey的原生模块没有被正确编译、链接到你的应用中,即使你已经尝试过手动链接,大概率是链接步骤不全、项目缓存未清理导致的失效。
分步解决方法
1. 全量清理项目缓存
- 删除依赖文件并重装:
rm -rf node_modules rm package-lock.json yarn.lock # 用你习惯的包管理器重装依赖 npm install # 或 yarn install
- 清理React Native打包缓存,启动 metro 时添加重置参数:
npx react-native start --reset-cache
2. Android端配置校验
RN 0.63版本虽然支持自动链接,但部分场景下自动链接会失效,可手动补全以下配置:
- 检查
android/settings.gradle文件,确认存在以下配置:
include ':jail-monkey' project(':jail-monkey').projectDir = new File(rootProject.projectDir, '../node_modules/jail-monkey/android')
- 检查
android/app/build.gradle的dependencies代码块,确认存在依赖引入:
dependencies { // 其他依赖... implementation project(':jail-monkey') }
- 检查
android/app/src/main/java/[你的包名路径]/MainApplication.java,确认已注册JailMonkey包:
import com.gantix.JailMonkey.JailMonkeyPackage; // ... @Override protected List<ReactPackage> getPackages() { List<ReactPackage> packages = new PackageList(this).getPackages(); // 其他包注册... packages.add(new JailMonkeyPackage()); return packages; }
- 清理安卓构建缓存:
cd android && ./gradlew clean && cd ..
3. iOS端配置校验
- 进入ios目录执行pod安装,确保原生依赖被正确链接:
cd ios && pod install && cd ..
- 若pod安装后依旧报错,打开Xcode,进入项目的
Build Phases -> Link Binary With Libraries,检查是否存在libJailMonkey.a,缺失的话手动添加即可 - 清理Xcode构建缓存:打开Xcode点击顶部菜单栏
Product -> Clean Build Folder
4. 版本兼容降级(可选)
如果以上步骤执行后问题依旧存在,可尝试降级jail-monkey版本,2.6.0在RN 0.63版本上存在已知的自动链接兼容问题:
npm install jail-monkey@2.5.0 # 或 yarn add jail-monkey@2.5.0
安装完成后重新执行缓存清理和平台侧链接步骤即可。
5. 代码容错优化
调用方法前增加模块存在性判断,避免触发未处理的Promise rejection:
import JailMonkey from 'jail-monkey'; useEffect(() => { (async () => { if (JailMonkey?.hookDetected) { const a = await JailMonkey.hookDetected() alert(a) setIsDevelopmentSettingsMode(a) } else { console.warn('JailMonkey模块未正常加载,可在此处补充降级逻辑') } })(); }, []);
内容的提问来源于stack exchange,提问作者Mayran aragão
相关产品推荐
相关产品推荐

