Плагин Cordova Android: config.xml, переписанный кордовой подготовкой?

Я разрабатываю плагин Cordova для платформы Android.

Как описано здесь, я отредактировал файл platforms/android/res/xml/config.xml, чтобы включить сопоставление классов плагина.

Все работает отлично, за исключением того, что каждый раз, когда я запускаю cordova prepare android, этот файл перезаписывается, говоря:

Generating config.xml from defaults for platform "android"

Итак, я должен отменить изменения каждый раз, когда это очень раздражает. Есть ли способ сказать кордове не делать этого или вставить сопоставление классов где-то еще?

Ответы

Ответ 1

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

В плагиновском пакете есть файл plugin.xml, JS файл и ваш собственный код, хранящийся в этой структуре:

PLUGIN_NAME\
 src\
  PLATFORM_NAME\
   PLAFORM_SPECIFIC_FILES
 www\
  PLUGIN_JS_FILE
 plugin.xml

Пример:

BackgroundAPI\
 plugin.xml
 src\
  android\
   BackgroundAPI.java
  ios\
   BackgroundAPI.h
   BackgroundAPI.m
 www\
  BackgroundAPI.js

В вашем файле plugin.xml вы определяете элементы, которые будут помещены в файл config.xml при установке плагина. Это гарантирует, что ваш код не будет удаляться при каждом запуске команды сборки или подготовки.

Пример:

<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
    id="com.dawsonloudon.backgroundapi"
    version="1.0.0">
    <name>backgroundapi</name>
    <description>run external api calls on a background thread</description>
    <license>MIT</license>

    <js-module src="www/BackgroundAPI.js" name="BackgroundAPI">
        <clobbers target="BackgroundAPI" />
    </js-module>

    <platform name="ios">
        <config-file target="config.xml" parent="/*">
            <feature name="BackgroundAPI">
                <param name="ios-package" value="BackgroundAPI" />
            </feature>
        </config-file>

        <header-file src="src/ios/BackgroundAPI.h" />
        <source-file src="src/ios/BackgroundAPI.m" />
    </platform>

    <platform name="android">
        <config-file target="res/xml/config.xml" parent="/*">
            <feature name="BackgroundAPI" >
                <param name="android-package" value="com.dawsonloudon.backgroundapi.BackgroundAPI"/>
            </feature>
        </config-file>

        <config-file target="AndroidManifest.xml" parent="/*">
            <uses-permission android:name="android.permission.INTERNET" />
        </config-file>
        <source-file src="src/android/BackgroundAPI.java" target-dir="src/com/dawsonloudon/backgroundapi" />
    </platform>

</plugin>

После того, как все это будет создано в отдельной директории из вашего проекта, перейдите в каталог проекта и запустите:

cordova plugin add /PATH/TO/YOUR/PLUGIN

Теперь, когда плагин установлен, у вас будет папка плагинов в вашем проекте, и все ваши изменения config.xml всегда будут присутствовать.

Чтобы изменить плагин, вы вносите изменения в файл JS в /plugins/PLUGIN _NAME/www

Чтобы отредактировать собственный код, перейдите в/platform/PLATFORM/и найдите свой собственный код.

Каждый раз, когда вы строите или готовите, ваш JS файл будет переписан на пути к платформе из каталога плагинов, но ваш собственный код будет записан только на /platform/path один раз, когда будет установлен плагин.

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

Ответ 2

Я использую Cordova 3.1

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

У меня есть 3 файла config.xml:

1) myproject/www/config.xml

2) myproject/platform/android/res/xml/config.xml

3) myproject/platform/android/assets/www/config.xml

1) и 3) имеют одинаковый контент и включают: имя, описание, автор, контент, доступ и несколько тегов предпочтений.! Нет тегов функций для плагинов!

Я только редактировал файл 1); и файл 3) был затем сгенерирован из этой информации с помощью "corova build android" - как я понимаю, это должно быть. Я добавил все дополнительные теги предпочтений, которые я хотел настроить для 1) - я в основном добавил все, что документировано:

<preference name="fullscreen" value="false" />
<preference name="webviewbounce" value="false" />
<preference name="useBrowserHistory" value="true" />
<preference name="exit-on-suspend" value="false" />
<preference name="permissions" value="none" />
<preference name="target-device" value="universal" />
<preference name="prerendered-icon" value="true" />
<preference name="stay-in-webview" value="false" />
<preference name="detect-data-types" value="true" />
<preference name="show-splash-screen-spinner" value="true" />
<preference name="auto-hide-splash-screen" value="true" />
<preference name="disable-cursor" value="false" />
<preference name="android-minSdkVersion" value="10" />
<preference name="android-installLocation" value="auto" />
<preference name="orientation" value="portrait"/>

Тогда есть файл 2); что довольно странно!

  • файл содержит все теги "функции" плагина и является единственным файлом config.xml в моем приложении, в котором есть эти теги. Они были правильно добавлены моим плагином "cordova add" для всех моих плагинов.

  • после того, как я отредактировал/добавил теги предпочтений в файл 1), эти теги также копируются в этот файл 2) каждый раз, когда я выполняю мой "кордовой сборки android" .

  • "corova build android" все еще печатает в concole "Генерирование config.xml по умолчанию для платформы" android ""... но оно включает все мои предпочтения, когда я их в 1) - я думаю, как только файл 1) имеет больше контента, чем контент по умолчанию, он успешно копирует это содержимое в файл 2)

  • файл 2) включает в себя предпочтения, теги функций и правильный автор из файла 1); НО у него нет правильного описания, а не правильные теги имен из файла 1). Кажется, что эти два тега взяты из внутреннего по умолчанию кордовы, и если вы измените их непосредственно в файле 2), они снова будут перезаписаны следующим "кордорой сборки android" для этих значений по умолчанию. Я не мог найти способ заставить их сохранить свои ценности! - Я подозреваю, что там ошибка!

Ответ 3

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

Это довольно старый поток - надеюсь, это кому-то поможет.

Ответ 4

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

Иногда, по крайней мере, в случае разрешений в этом файле вам нужно будет удалить и переустановить плагин и установить необходимые разрешения в командной строке, даже если в документах Cordova вы можете установить эти разрешения в любом месте.

Для примера см. раздел iOS quirks в плагине камеры.