Плагин 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 в плагине камеры.