xml - edit-config 删除了我的 AndroidManifest.xml 中的标签

标签 xml cordova configuration

我在项目的 config.xml 中添加了一个 edit-config 指令,现在每次运行“cordova run android”时,都会从正在编辑的文件中删除另一行。

这是我的编辑配置:

    <platform name="android">
        ...
        <edit-config file="AndroidManifest.xml" mode="merge" target="/manifest/application">
            <application android:allowBackup="false" />
        </edit-config>
    </platform>

如何在每次调用“cordova run android”时不删除标签的情况下让它工作?

我怀疑这是一个错误,但我还没有找到它的其他实例 - 如果我对如何创建它有更好的了解,我很乐意报告它。

最佳答案

我在尝试使用 <edit-config> 时遇到过类似的问题更改 <application> 上的属性元素。 似乎 Cordova 覆盖了 <edit-config> 所做的更改当它应用它自己的默认更改为 <application>元素,即设置 android:label

我的解决方法是使用 after_prepare Hook 脚本以在 Cordova 完成更改后应用更改。 在你的情况下,你会想要这样的东西:

配置文件

<platform name="android">
  ...
  <hook type="after_prepare" src="scripts/set_allowBackup.js" />
  ...
</platform>

脚本/set_allowBackup.js:

#!/usr/bin/env node

var TARGET_ATTRIBUTE = 'android:allowBackup';
var TARGET_VALUE = TARGET_ATTRIBUTE+'="false"';
var TARGET_REGEX = new RegExp(TARGET_ATTRIBUTE+'="([^"]+)"');

module.exports = function(context) {

  var fs = context.requireCordovaModule('fs'),
      path = context.requireCordovaModule('path');

  var platformRoot = path.join(context.opts.projectRoot, 'platforms/android');
  var manifestFile = path.join(platformRoot, 'AndroidManifest.xml');

  if (fs.existsSync(manifestFile)) {
    fs.readFile(manifestFile, 'utf8', function (err, data) {
      if (err) {
        throw new Error('Unable to find AndroidManifest.xml: ' + err);
      }

      var result;
      if(!data.match(TARGET_ATTRIBUTE)) {
        result = data.replace(/<application/g, '<application ' + TARGET_VALUE);
      }else if (data.match(TARGET_REGEX) && !data.match(TARGET_VALUE)){
        result = data.replace(TARGET_REGEX, TARGET_VALUE);
      }

      if(result){
        fs.writeFile(manifestFile, result, 'utf8', function (err) {
          if (err) throw new Error('Unable to write AndroidManifest.xml: ' + err);
        })
      }
    });
  }
};

另一种选择是使用 cordova-custom-config应用更改 after_prepare默认情况下:

添加插件:

cordova plugin add cordova-custom-config

config.xml 中设置自定义首选项:

<platform name="android">
  ...
  <custom-preference name="android-manifest/application/@android:allowBackup" value="false" />
  ...
</platform>

关于xml - edit-config 删除了我的 AndroidManifest.xml 中的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51338763/

相关文章:

cordova - 将文件缩小集成到 Cordova/Phonegap 构建过程中

java - 如何使用xi :include from external library?引用外部log4j2配置文件

c++ - 按值返回 boost ublas 矩阵仅在 vs2012 的发布配置中工作

c# - 使VS2010项目文件提示路径默认为绝对路径?

xml - 如何在 XML 变量中连接用户名?

android - 通过来自另一个应用程序的 webintents 将 url 发送到 ionic android 应用程序

android - 如何在 phonegap 中同时选择(选择)多个文件

android - 我如何为我的 android 应用程序设计漂亮的 UI

java - 通过包含 WSDL 的 SOAP 客户端发送数据

.net - XML 序列化丢失命名空间