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

hmae6n7t  于 2022-11-15  发布在  Android
关注(0)|答案(3)|浏览(189)

我在项目的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 运行android'?
我怀疑这是一个错误,但我还没有发现它的其他示例-我很乐意报告它,如果我有一个更好的了解如何创建它。

8yoxcaq7

8yoxcaq71#

我在尝试使用<edit-config>来修改<application>元素的属性时遇到过类似的问题。看起来Cordova在将自己的默认更改应用到<application>元素时覆盖了<edit-config>所做的更改,即设置android:label等。
我的解决方法是使用after_prepare钩子脚本在Cordova完成更改后应用更改。
config.xml

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

脚本/设置允许备份.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>
wfveoks0

wfveoks02#

依据:https://stackoverflow.com/a/53282161/62917
将edit-config移到platform元素之外,我的问题得到了解决。我还必须将file属性更改为:
文件=“应用程序/源代码/主文件/Android清单. xml”

q1qsirdb

q1qsirdb3#

我通过指定AndroidManifest.xml的完整路径来解决这个问题。

<platform name="android">
    ...
    <edit-config file="AndroidManifest.xml" ...>
        ...
    </edit-config>
</platform>

试试看:

<platform name="android">
    ...
    <edit-config file="app/src/main/AndroidManifest.xml" ...>
        ...
    </edit-config>
</platform>

这可以防止插件添加的<service>元素被我的编辑删除。我不知道为什么会这样。我使用的是cordova 11.0.0和cordova-android 10.1.2。

相关问题