Ответ 1
Я закончил делать плагин-крючок, который я не знал, существовал. Плагины-крючки - это крючки, которые определены в плагине, и которые могут быть вызваны до или после добавления или удаления плагина (либо при запуске команд плагины cordova cli, либо когда кордова добавляет плагин на платформу с командой добавления кордовой платформы).
Я не хотел использовать крючки, потому что я думал, что крючки должны быть помещены в файл config.xml и не могут быть связаны с плагином.
Здесь я добавил эту строку в разделе Android-платформы файла plugin.xml(мое требование немного отличалось от OP, но образец может помочь в любом случае):
<platform name="android">
<hook type="before_plugin_install" src="scripts/androidBeforeInstall.js" />
...
</platform>
И затем я написал hook файл androidBeforeInstall.js script:
module.exports = function(ctx) {
var fs = ctx.requireCordovaModule('fs'),
path = ctx.requireCordovaModule('path'),
xml = ctx.requireCordovaModule('cordova-common').xmlHelpers;
var manifestPath = path.join(ctx.opts.projectRoot, 'platforms/android/AndroidManifest.xml');
var doc = xml.parseElementtreeSync(manifestPath);
if (doc.getroot().tag !== 'manifest') {
throw new Error(manifestPath + ' has incorrect root node name (expected "manifest")');
}
//adds the tools namespace to the root node
doc.getroot().attrib['xmlns:tools'] = 'http://schemas.android.com/tools';
//add tools:replace in the application node
doc.getroot().find('./application').attrib['tools:replace'] = 'android:label';
//write the manifest file
fs.writeFileSync(manifestPath, doc.write({indent: 4}), 'utf-8');
};
Это немного сложнее, чем просто добавлять строки config-file в plugin.xml, но как только у вас будет хороший синтаксис, он может быть очень мощным.
Edit:
По какой-то причине только с крючком в before_plugin_install, AndroidManifest.xml был правильно обновлен во время добавления платформы, но был восстановлен в состоянии по умолчанию в конце добавления platdorm.
Как я не мог понять причину, я добавил следующую строку в plugin.xml, чтобы script также был запущен в конце добавления платформы (удачные крючки, определенные в файле plugin.xml, могут быть запущены не только при добавлении или удалении плагина).
<hook type="after_platform_add" src="scripts/androidBeforeInstall.js" />