我正在开发一个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命名空间,但它不会发生。任何想法如何实现它
先谢谢。
答案 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>