Добавить андроид: name= "что-то" в тег приложения AndroidManifest.xml из Cordova plugin.xml

Я решил открыть новый вопрос, потому что ни один из тех, которые уже размещены, имеет хороший ответ.

Мне нужно обновить AndroidManifest.xml "из plugin.xml", так что <application> имеет следующее свойство, наряду с тем, которое у него уже есть:

android:name="mypackage"

Как это можно сделать?

Спасибо

Ответы

Ответ 1

У меня была та же проблема, и я использовал крючок Кордовы, чтобы выполнить эту работу.

Сначала отредактируйте файл config.xml чтобы добавить hook:

<platform name="android">
    <hook type="after_prepare" src="scripts/android_app_name.js" />
</platform>

Создайте файл под названием scripts/android_app_name.js (установите его исполняемый файл) и внутри, просто используйте функцию поиска/замены. Он должен выглядеть так:

#!/usr/bin/env node

module.exports = function(context) {

  var fs = context.requireCordovaModule('fs'),
    path = context.requireCordovaModule('path');

  var platformRoot = path.join(context.opts.projectRoot, 'platforms/android');


  var manifestFile = path.join(platformRoot, 'AndroidManifest.xml');

  if (fs.existsSync(manifestFile)) {

    fs.readFile(manifestFile, 'utf8', function (err,data) {
      if (err) {
        throw new Error('Unable to find AndroidManifest.xml: ' + err);
      }

      var appClass = 'YOU_APP_CLASS';

      if (data.indexOf(appClass) == -1) {

        var result = data.replace(/<application/g, '<application android:name="' + appClass + '"');

        fs.writeFile(manifestFile, result, 'utf8', function (err) {
          if (err) throw new Error('Unable to write into AndroidManifest.xml: ' + err);
        })
      }
    });
  }


};

Ответ 2

В самом деле, как сказал jlreymendez, правильный путь:

    <edit-config file="AndroidManifest.xml" target="/manifest/application" mode="merge">
      <application android:name="com.mypackage.MyApplication"/>
    </edit-config>

Также обратите внимание, что изменения будут отменены, если вы удалите плагин, что не произойдет с трюком-крюком.

Ответ 3

Я думаю, у меня была такая же проблема, как и вы. Я нашел это в документации по кордове.

https://cordova.apache.org/docs/en/4.0.0/plugin_ref_spec.md.html

Если вы просматриваете заголовок "Элемент config-file", вы найдете пример:

<config-file target="AndroidManifest.xml" parent="/manifest/application">
    <activity android:name="com.foo.Foo" android:label="@string/app_name">
        <intent-filter>
        </intent-filter>
    </activity>
</config-file>

Ответ 4

Простейший и последний (кордова версия 8.1.2) способ сделать это с помощью тега edit-config как показано ниже.

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

Аналогичным образом вы можете редактировать и другие конфигурации.

Надеюсь, это будет полезно!