You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native Expo用withDangerousMod修改MainApplication.java的示例求询

实现示例

以下是使用withDangerousMod修改MainApplication.java的完整可复用示例:

首先创建plugins/withCustomMainApplication.js自定义插件文件:

const { withDangerousMod, AndroidConfig } = require('@expo/config-plugins');
const fs = require('fs/promises');
const path = require('path');

module.exports = function withCustomMainApplication(config) {
  return withDangerousMod(config, {
    platform: 'android',
    mod: async (config) => {
      // 获取MainApplication.java的绝对路径
      const mainAppPath = AndroidConfig.Paths.getMainApplicationFilePath(
        config.modRequest.platformProjectRoot
      );
      // 读取原文件内容
      let content = await fs.readFile(mainAppPath, 'utf-8');

      // 示例修改逻辑1:在onCreate方法中添加自定义初始化代码
      // 可根据自身需求调整替换规则
      const onCreateMatch = content.match(/@Override\s+public void onCreate\(\)\s+\{/);
      if (onCreateMatch) {
        const insertCode = `
    // 自定义初始化逻辑
    CustomFeature.init(this);
        `;
        content = content.replace(
          onCreateMatch[0],
          `${onCreateMatch[0]}${insertCode}`
        );
      }

      // 示例修改逻辑2:添加自定义导入语句
      const packageMatch = content.match(/package [a-z0-9.]+;/);
      if (packageMatch) {
        const importCode = `
import com.example.custom.CustomFeature;
        `;
        content = content.replace(
          packageMatch[0],
          `${packageMatch[0]}${importCode}`
        );
      }

      // 将修改后的内容写回文件
      await fs.writeFile(mainAppPath, content, 'utf-8');

      return config;
    },
  });
};
插件使用方法
  • 在app.config.js的plugins数组中引入上述自定义插件:
module.exports = {
  expo: {
    // 其他项目配置
    plugins: [
      './plugins/withCustomMainApplication.js',
      // 其他插件配置
    ],
  },
};
  • 完成配置后执行npx expo prebuild --clean触发原生文件修改逻辑
  • 编译安卓项目验证修改是否生效
注意事项
  • 替换规则尽量使用通用的正则或字符串匹配,不要依赖固定行号,避免Expo SDK版本升级后原生文件结构变化导致修改失效
  • 修改前建议先打印原MainApplication.java的内容,确认匹配规则的准确性
  • 每次升级Expo SDK后需要重新测试修改逻辑,避免原生文件结构变动导致替换失败
  • 该操作属于原生文件高危修改,建议提前做好配置备份

内容的提问来源于stack exchange,提问作者UDAIF M C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:45:08