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

Cra*_*rag 4 xml configuration cordova

我在项目的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>
Run Code Online (Sandbox Code Playgroud)

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

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

Dav*_*den 5

尝试<edit-config>用于更改<application>元素的属性时,我遇到了类似的问题。似乎Cordova会覆盖<edit-config>将它自己的默认更改应用于<application>元素时所做的更改,即元素的默认更改android:label,例如set 等等。

我的解决方法是after_prepare在Cordova完成更改后使用挂钩脚本来应用更改。在您的情况下,您需要这样的东西:

config.xml

<platform name="android">
  ...
  <hook type="after_prepare" src="scripts/set_allowBackup.js" />
  ...
</platform>
Run Code Online (Sandbox Code Playgroud)

脚本/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);
        })
      }
    });
  }
};
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用cordova-custom-config,它after_prepare默认应用更改:

添加插件:

cordova plugin add cordova-custom-config
Run Code Online (Sandbox Code Playgroud)

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

<platform name="android">
  ...
  <custom-preference name="android-manifest/application/@android:allowBackup" value="false" />
  ...
</platform>
Run Code Online (Sandbox Code Playgroud)

  • 就像后续行动一样 - 看起来有一个关于内置编辑配置的错误报告没有得到解决,所以这些替代方案看起来像是要走的路。https://issues.apache.org/jira/browse/CB-13514?jql=text%20~%20%22edit-config%22 (2认同)