创建 Expo Config 插件文件来修改 Android 清单

2023-12-10

我需要创建一个 expo 插件文件并在 app.json 中调用它,以便在 android 清单中添加以下属性。

<uses-feature android:name="android.hardware.touchscreen"
        android:required="false"/>
<uses-feature android:name="android.hardware.faketouch"
        android:required="false"/>
<uses-feature android:name="android.hardware.telephony"
        android:required="false"/>
<uses-feature android:name="android.hardware.camera"
        android:required="false"/>
<uses-feature android:name="android.hardware.nfc"
        android:required="false"/>
<uses-feature android:name="android.hardware.location.gps"
        android:required="false"/>
<uses-feature android:name="android.hardware.microphone"
        android:required="false"/>
<uses-feature android:name="android.hardware.sensor"
        android:required="false"/>

<intent-filter>
  ...
  <category android:name="android.intent.category.LEANBACK_LAUNCHER"/>
</intent-filter>

我是一名使用 React Native Expo 的 javascript 开发人员,所以我没有自己创建文件的技能,我花了一整天的时间试图弄清楚这一点,但基本上没有来自 Expo 的有用文档。


我在这里找到了类似的线程:link

我按照以下步骤添加了意图过滤器

  1. 在您的 expo 项目中创建插件文件夹
  2. 创建js文件“example-file.js”
  3. 在文件中我添加了以下代码
const { AndroidConfig, withAndroidManifest } = require("@expo/config-plugins");

const { getMainApplicationOrThrow, addMetaDataItemToMainApplication } =
  AndroidConfig.Manifest;

function addAttributesToMainActivity(androidManifest) {
  const { manifest } = androidManifest;

  if (!Array.isArray(manifest["application"])) {
    console.warn(
      "withWordlLineIntentActivity: No application array in manifest?"
    );
    return androidManifest;
  }

  const application = manifest["application"].find(
    (item) => item.$["android:name"] === ".MainApplication"
  );
  if (!application) {
    console.warn("withWordlLineIntentActivity: No .MainApplication?");
    return androidManifest;
  }

  if (!Array.isArray(application["activity"])) {
    console.warn(
      "withWordlLineIntentActivity: No activity array in .MainApplication?"
    );
    return androidManifest;
  }

  const activity = application["activity"].find(
    (item) => item.$["android:name"] === ".MainActivity"
  );
  if (!activity) {
    console.warn("withWordlLineIntentActivity: No .MainActivity?");
    return androidManifest;
  }

  const action = {};
  action.$ = {
    ...action.$,
    ...{
      "android:name": "com.domain.action.PROCESS_TRANSACTION",
    },
  };

  const intent = { action: action };
  activity["intent-filter"].push(intent);

  return androidManifest;
}

module.exports = function withIntentActivity(config) {
  return withAndroidManifest(config, (config) => {
    config.modResults = addAttributesToMainActivity(config.modResults);
    return config;
  });
};
  1. 在 app.json 中添加对创建的插件的引用

    “插件”:[ “./plugins/example-intent.js” ],

  2. 运行 expo prebuild 查看结果

我希望它能对你有一点帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建 Expo Config 插件文件来修改 Android 清单 的相关文章

随机推荐

  • Haskell Posix 中的多行匹配

    我似乎找不到关于 haskell 的 POSIX 实现的像样文档 具体模块Text Regex Posix 谁能指出我在字符串上使用多行匹配的正确方向 好奇者的一个片段 gt extractToken body body
  • json 路径表达式在没有数组的情况下不起作用

    我正在尝试实现一个看似简单的 JSON 路径过滤器 但未能使其正常工作 想知道其他对 Json NET 的 JSON 路径实现有更多经验的人是否对后续步骤有想法 这种情况失败了 但我认为应该可行 var jsonText event dat
  • 字符串解析,提取数字和字母

    解析字符串并提取数字和字母的最简单方法是什么 我的字符串可以采用以下格式 数字 字母或字母 数字 即 10A B5 C10 1G 等 我需要提取两个部分 即 10A gt 10 和 A Update 感谢大家的精彩回答 最简单的方法可能是使
  • 将用户名和密码作为变量传递

    我希望在 feature 文件中使用变量而不是硬编码 UID 和密码 Background def xmlPayload read request xml def UserID UID def Password PWD def Token
  • 在oracle 11g中收缩数据库

    无论如何 我不是数据库管理员 所以我在这里陈述的一些内容可能是错误的 在 SQL Server 中 当我们在数据库中添加大量数据然后删除它时 数据文件 mdf 文件 或数据库 或任何名称 的大小不会减少到原始大小 我们需要缩小它 同样的基本
  • 需要sql查询中的范围计数[重复]

    这个问题在这里已经有答案了 我有问题详情 请访问http sqlfiddle com 3 8e018 1 我有一张成员表 上面有所有学生的分数 我正在尝试计算所有学生的数量 例如 0 9 学生人数 9 10 19 学生人数 0依此类推 直到
  • Hibernate spring 注释会话未关闭/刷新

    我 继承 了一个项目 该项目使用 Spring 注释来管理 Hibernate 的事务 会话 或者至少本来就是这样 目前 Hibernate 会话永远不会刷新 它们设置为 FLUSH MODE NEVER 并且 DAO 需要手动刷新才能将任
  • 自定义 WP 循环的正确 PHP 语法

    我正在尝试在我的 WordPress 网站中插入排序选项 我已经让它工作了 但需要帮助正确地将它与 WordPress 循环一起使用 目前 我有 在页面上 可以选择按字母顺序或时间顺序排序 a href sort date Newest a
  • 使用 Beautiful Soup 创建属性名为“name”的 new_tag

    我有一个 XML 块 需要将一些元素插入其中
  • Airflow 在成功后多次重新运行单个任务

    按顺序重新运行任务 A 3 次的最佳方法是什么 即任务A gt 任务A gt 任务A gt 任务B 我之所以这么问 是因为我将运行另一个单独的数据验证任务 B 该任务将比较这 3 次单独运行的数据 这就是我到目前为止所做的 dag DAG
  • 问题嵌套近似搜索算法

    我移植了一个近似搜索算法C to Python 逻辑和非常好的原始实现归因于to 然后 我编写了一个脚本来使用该算法来解决二维定位问题 到达时间差问题 二维解决方案效果很好 然而 当我嵌套到 3 维时 脚本不会产生预期的本地化 请注意 这几
  • 使用 RODBC 的参数化查询

    我在 R 中有一个变量 我想将其传递到数据库 我could use paste就像许多人在阅读 Google 结果时建议的那样 但由于 SQL 注入漏洞 这是不安全的 我更喜欢这样的东西 x lt 42 sqlQuery db SELECT
  • 如何捕获 NSString 中特殊指示的 **字符** 并粗体显示中间的内容?

    我无法将指定的 字符对之间的任何字符加粗 例如 在这个 NSString 中 The Fox has ran around the corner 应该读 狐狸跑了around角落 这是我的代码 NSString questionString
  • 在 R 中高效创建数字编码的虚拟变量?

    我们如何转换表单的数据 df lt structure list customer number c 3 3 1 1 3 item c milkshake burger apple burger water row names c NA 5
  • 导入错误:没有名为 py31compat 的模块

    我正在尝试使用安装 gensim sudo H pip install upgrade gensim 但它给了我这个错误 File setup py line 301 in
  • 停止 handler.postDelayed()

    我通过 new Handler postDelayed new Runnable 调用多个处理程序 当我点击返回时如何停止它 public class MyActivity extends AppCompatActivity impleme
  • OpenCV 二进制自适应阈值 OCR

    我需要将一些图像转换为二进制以进行 OCR 以下是我正在使用的功能 Mat binarize Mat Img Mat res float blocksize bool inverse Img convertTo Img CV 32FC1 1
  • 使用 gcc 中的内联汇编从 stdin 扫描并打印到 stdout

    如何在内联汇编 gcc 中读取 stdin 并写入 stdout 就像我们在 NASM 中所做的那样 start mov ecx buffer buffer is a data word initialised 0h in section
  • Html 选择选项提交后丢失数据

    我有两个带有一些数据的选择选项
  • 创建 Expo Config 插件文件来修改 Android 清单

    我需要创建一个 expo 插件文件并在 app json 中调用它 以便在 android 清单中添加以下属性