xmlns:工具命名空间属性未反映在插件元素中

时间:2015-09-11 13:15:00

标签: android cordova phonegap-plugins phonegap-build cordova-plugins

我正在开发一个cordova插件,我的插件代码需要xmlns:tools="http://schemas.android.com/tools"命名空间。 所以,我在Plugin.xml中添加了相同的内容

<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
id="com.sample.cordova"
version="1.0.0">

现在将插件添加到任何cordova项目后,我在Android清单文件中看不到xmlns:tools="http://schemas.android.com/tools"命名空间。 就像

<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="com.sample.cordova" xmlns:android="http://schemas.android.com/apk/res/android">

根据cordova Plugin Specification,它应该添加xmlns:tools命名空间,但它不会发生。任何想法如何实现它

先谢谢。

3 个答案:

答案 0 :(得分:2)

我遇到了同样的问题

尝试添加plugin.xml

<edit-config file="AndroidManifest.xml" target="/manifest" mode="merge">
    <manifest xmlns:tools="http://schemas.android.com/tools" />
</edit-config>

它对我有用。

详情here

答案 1 :(得分:0)

这里也有同样的问题。

我已设法通过以下方式使用cordova-custom-config解决问题:

<platform name="android">
    <preference name="android-manifest/@xmlns:tools" value="http://schemas.android.com/tools" />
</platform>

答案 2 :(得分:0)

使用cordova hooks解决此问题,示例代码:

您的hooks/android/manifest-hook.js

#!/usr/bin/env node
'use strict';
const fs = require('fs');
const xml2js = require('xml2js');

module.exports = function (context) {
  const parseString = xml2js.parseString;
  const builder = new xml2js.Builder();
  const manifestPath = context.opts.projectRoot + '/platforms/android/AndroidManifest.xml';
  const androidManifest = fs.readFileSync(manifestPath).toString();

  let manifestRoot;

  if (androidManifest) {
    parseString(androidManifest, (err, manifest) => {
      if (err) return console.error(err);

      manifestRoot = manifest['manifest'];

      manifestRoot.$['xmlns:tools'] = 'http://schemas.android.com/tools';

      fs.writeFileSync(manifestPath, builder.buildObject(manifest));
      console.log("xmlns:tools added in AndroidManifest.xml");
    });
  }
};

并将下面的代码添加到 plugin.xml

<platform name="android">
  ...
  <hook type="after_prepare" src="hooks/android/manifest-hook.js"/>
  ...
</platform>