我正在为Android平台开发Cordova插件。
正如here所述,我编辑了platforms/android/res/xml/config.xml
文件以包含插件的类映射。
除了我每次运行cordova prepare android
这个文件都被覆盖后说:
Generating config.xml from defaults for platform "android"
所以,我必须每次都撤消这个非常烦人的变化。有没有办法告诉cordova不要这样做或在其他地方插入类映射?
答案 0 :(得分:17)
您需要创建一个插件包并安装它来解决此问题。
一个插件包有一个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的项目。这样可以确保每次运行build或prepare命令时都不会删除代码。
示例:
<?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
现在已经安装了该插件,您的项目中将有一个plugins文件夹,并且所有config.xml编辑将始终存在。
要编辑插件,请在/ plugins / PLUGIN_NAME / www
中更改JS文件要编辑本机代码,请浏览到/ platforms / PLATFORM /并找到您的本机代码。
每次构建或准备时,您的JS文件都将被重写为插件目录中的平台特定路径,但是您的本机代码仅在安装插件时写入/ platforms / paths。
我建议一旦你的插件完成,你应该收集你所有的插件特定文件并将它们复制回你的插件包目录,这样你就可以在将来的项目中再次使用它们(或者发布它们以供其他人使用以供开源使用) )。
答案 1 :(得分:10)
我正在使用Cordova 3.1
我认为我发现了许多config.xml文件的以下行为 - 似乎不是Cordova文档所说的,也许在3.1更改了文档并没有更新?在我的项目中,所有这些似乎都正常工作。
我有3个config.xml文件:
1)myproject / www / config.xml
2)myproject / platforms / android / res / xml / config.xml
3)myproject / platforms / android / assets / www / config.xml
1)和3)具有相同的内容,包括: 名称,描述,作者,内容,访问权限和多个首选项标签。 !没有插件的功能标签!
我只编辑了文件1);然后使用“cordova build android”从该信息生成文件3) - 正如我所理解的那样。我添加了我想要配置的所有其他首选项标签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);这很奇怪!
该文件包含所有插件“feature”标签,是我的应用程序中唯一具有这些功能标签的config.xml文件。我的“cordova插件添加”命令为我的所有插件正确添加了它们。
在我编辑/将我的偏好标签添加到文件1之后,每次执行“cordova build android”时,这些标签也会被复制到此文件中2)。
“cordova build android”仍打印到concole“从默认为平台生成config.xml”android“”...但它包含了我所有的偏好1) - 我认为一旦文件1)的内容多于“默认”内容,它就会成功地将该内容复制到文件2)
文件2)包括文件1)中的首选项,功能标签和正确的作者;但它没有正确的描述,也没有文件1中正确的名称标签。这两个标签似乎来自一些cordova内部默认值,如果你直接在文件2中更改它们,它们会被下一个“cordova build android”覆盖到这些默认值。我找不到办法让他们保持自己的价值观! - 我怀疑那里有一个错误!
答案 2 :(得分:1)
我想为我的cordova应用程序创建一个不同的起始页面,并遇到同样的问题 - 我的config.xml文件被build命令覆盖了。解决此问题的方法是更改公共config.xml文件,该文件当前位于项目根文件夹中。一旦我在那里进行了更改,就会在构建命令中获取更改。我使用this page作为参考。
这是一个非常古老的主题 - 希望这有助于某人。
答案 3 :(得分:0)
因此,确保您正在编辑顶级config.xml
文件非常重要。
有时,至少在该文件中的权限的情况下,您将需要删除并重新安装该插件,并在命令行中设置所需的权限,即使Cordova文档说您可以在任一位置设置这些权限
有关示例,请参阅相机插件的iOS怪癖部分。