目前公司所有项目的React Native版本为0.63.2,发布于2020.6月份,时隔将近4年,Native SDK的更新已经导致了某些RN api的不兼容,例如安卓点击事件的穿透还有iOS tabbar 颜色更新无效等等,iOS SDK 最低支持版本从10升到了13,舍弃了市场份额小的机型覆盖,对于简化代码和架构稳定性具有重大意义,而Hermes新引擎的引入,以及对未来新框架的适配,对用户体验来说也至关重要。

阅读全文

在根目录下创建hack.js文件,内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
const fs = require('fs');
const { resolve } = require('path');
const nmPath = resolve(__dirname, './node_modules');
//支持安卓单步调试
console.log('[hack] support debug for android')
path = resolve(nmPath, './react-native/Libraries/BatchedBridge/MessageQueue.js')
content = fs.readFileSync(path, { encoding: 'utf-8'})
replace = `callNativeSyncHook(
moduleID: number,
methodID: number,
params: any[],
onFail: ?Function,
onSucc: ?Function,
): any {
const isDebuggingEnabled = (typeof atob !== 'undefined');
this.processCallbacks(moduleID, methodID, params, onFail, onSucc);
if(!isDebuggingEnabled)
{
if (typeof global.nativeCallSyncHook == 'function') {
return global.nativeCallSyncHook(moduleID, methodID, params);
}
return '';
}
}
`
fs.writeFileSync(path, content.replace(/callNativeSyncHook.+\n(.+\n)*/gm, replace))

其实是修改node_modules中导致crash的callNativeSyncHook方法,由于node_module是gitignore的 一部分,建议将node hack.js加入package.json的script中,作为build命令的一部分

评论和共享

作者的图片

sakamoto

no past no future


厦门