Добавить атрибут в теге «приложение» в AndroidManifest из плагина cordova

Я создаю плагин для Кордовы, и я хочу отредактировать AndroidManifest, чтобы добавить атрибут в тег приложения. Я знаю, что config-файл добавляет новый тег, но я не могу найти, могу ли я обновить существующий тег.

Например, у меня есть этот AndroidManifest:

<?xml version='1.0' encoding='utf-8'?> <manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="com.test.testCordova" xmlns:android="http://schemas.android.com/apk/res/android"> <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="CordovaApp" android:theme="@android:style/Theme.Black.NoTitleBar" android:windowSoftInputMode="adjustResize"> <intent-filter android:label="@string/launcher_name"> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="19" /> </manifest> 

И я хочу добавить android:isGame=true в <application> .

Если я не могу сделать это из файла plugin.xml, я создам крючок для самостоятельного редактирования AndroidManifest, но надеюсь, что это не понадобится.

Solutions Collecting From Web of "Добавить атрибут в теге «приложение» в AndroidManifest из плагина cordova"

Я закончил делать плагин крючок, который я не знал, существовал. Плагины-крючки – это крючки, которые определены в плагине, и которые могут быть вызваны до или после добавления или удаления плагина (либо при запуске команд плагины cordova cli, либо когда cordova добавляет плагин к платформе с командой добавления платформы cordova).

Я не хотел использовать крючки, потому что думал, что крючки должны быть помещены в файл config.xml и не могут быть связаны с плагином.

Здесь я добавил эту строку в раздел платформы android файла plugin.xml (мое требование немного отличалось от OP, но образец может помочь в любом случае):

  <platform name="android"> <hook type="before_plugin_install" src="scripts/androidBeforeInstall.js" /> ... </platform> 

И затем я написал скрипт androidBeforeInstall.js:

 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, но как только у вас будет хороший синтаксис, он может быть очень мощным.

Редактировать:

По какой-то причине только с крючком в before_plugin_install , AndroidManifest.xml был правильно обновлен во время добавления платформы, но был восстановлен в своем состоянии по умолчанию в конце добавления platdorm.

Поскольку я не мог понять причину, я добавил следующую строку в plugin.xml, чтобы сценарий также был запущен в конце добавления платформы (удачные крючки, определенные в файле plugin.xml, могут запускаться не только при добавлении или удалении Плагин).

 <hook type="after_platform_add" src="scripts/androidBeforeInstall.js" />