如何在Java类字符串的指定位置插入自定义代码(Expo React Native场景)
实现方案
核心思路
通过正则精准匹配onConfigurationChanged方法的结束位置,直接在该位置后追加你要插入的自定义代码,是目前适配Expo配置插件场景最稳定的实现方式。
代码实现(适配Expo配置插件的Node.js环境)
// 入参说明:originCode为传入的完整Java类字符串,insertCode为你要插入的自定义方法字符串 function injectCustomJavaMethod(originCode, insertCode) { // 防重复插入判断,避免多次执行插件导致代码重复 if (originCode.includes("protected List getPackages()")) { return originCode; } // 多行正则匹配onConfigurationChanged方法完整内容 const matchReg = /(@Override\s+public\s+void\s+onConfigurationChanged\s*\(@NonNull\s+Configuration\s+newConfig\)\s*\{[\s\S]+?}\s*)/; return originCode.replace(matchReg, `$1\n\n${insertCode}\n`); }
待插入的代码预处理
你需要先把要插入的代码里的转义字符还原,最终传入的insertCode内容如下:
@Override protected List getPackages() { return Arrays.asList( new MainReactPackage(), // <---- 此处添加逗号 new RNFSPackage() // <---------- 此处添加包 ); }
备用定位方案
如果后续类结构变动导致上述正则失效,可以换成匹配Flipper初始化方法的前置位置,正则替换为:
const matchReg = /(?=\s*\/\*\*\s*.*在React Native模板中加载Flipper)/;
内容的提问来源于stack exchange,提问作者haibert
相关产品推荐
相关产品推荐

