问题描述
我使用的是离子骨架,
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
<application android:allowBackup="false" tools:replace="android:allowBackup" />
<application android:fullBackupOnly="false" />
</edit-config>
以避免在Android应用中提供备份服务。
我在config.xml
中添加了此内容,它会自动添加到清单中,但是需要在清单中手动添加xmlns: tools="http://schemas.android.com/tools"
,否则构建会失败并抛出错误:
The prefix "tools" for attribute "tools: replace" associated with an element type "application" is not bound.
有什么方法可以将配置文件中的xmlns
自动添加到Android清单?
解决方法
您可以使用钩子脚本添加名称空间。例如,在您的Cordova项目中创建hooks/add_tools_namespace.js
:
#!/usr/bin/env node
const fs = require('fs'),path = require('path');
module.exports = function (context) {
const toolsAttribute = "xmlns:tools=\"http://schemas.android.com/tools\"";
const manifestOpen = "<manifest";
const manifestPath = path.join(context.opts.projectRoot,'platforms/android/app/src/main/AndroidManifest.xml');
let manifest = fs.readFileSync(manifestPath).toString();
if(manifest.indexOf(toolsAttribute) == -1) {
manifest = manifest.replace(manifestOpen,manifestOpen + " " + toolsAttribute + " ");
fs.writeFileSync(manifestPath,manifest,'utf8');
}
};
然后从您的config.xml
中引用它:
<platform name="android">
...
<hook type="after_prepare" src="hooks/add_tools_namespace.js" />
</platform>