Подтвердить что ты не робот

Добавить атрибут в теге "приложение" в 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, но надеюсь, что это не понадобится.

4b9b3361

Ответ 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" />

Ответ 2

Для последней cordova version 8.1.2 был изменен путь к файлу AndroidManifest.xml. Ниже я рассказываю, как я это делал и работаю отлично. Аналогичным образом вы также можете обновить любую другую конфигурацию AndroidManifest.xml.

    <edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
        <application android:isGame="true" />
    </edit-config>

Вы сделали!