Cordova Android插件:由cordova覆盖的config.xml准备?

Geo*_*org 16 android cordova

我正在为Android平台开发Cordova插件.

如上所述这里,我编辑的platforms/android/res/xml/config.xml文件,包括插件的类映射.

这一切都很好,除了每次我运行cordova prepare android这个文件得到覆盖说:

Generating config.xml from defaults for platform "android"
Run Code Online (Sandbox Code Playgroud)

所以,我必须每次都撤消这个非常烦人的变化.有没有办法告诉cordova不要这样做或在其他地方插入类映射?

Daw*_*don 17

您将需要创建一个插件包并安装它来解决此问题.

插件包有一个plugin.xml文件,一个JS文件和存储在这个结构中的本机代码:

PLUGIN_NAME\
 src\
  PLATFORM_NAME\
   PLAFORM_SPECIFIC_FILES
 www\
  PLUGIN_JS_FILE
 plugin.xml
Run Code Online (Sandbox Code Playgroud)

例:

BackgroundAPI\
 plugin.xml
 src\
  android\
   BackgroundAPI.java
  ios\
   BackgroundAPI.h
   BackgroundAPI.m
 www\
  BackgroundAPI.js
Run Code Online (Sandbox Code Playgroud)

在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>
Run Code Online (Sandbox Code Playgroud)

一旦你将这一切都建立在与项目不同的目录中,就转到你的项目目录并运行:

cordova plugin add /PATH/TO/YOUR/PLUGIN
Run Code Online (Sandbox Code Playgroud)

现在已经安装了插件,您的项目中将有一个plugins文件夹,并且所有config.xml编辑将始终存在.

要编辑插件,请在/ plugins/PLUGIN_NAME/www中更改JS文件

要编辑本机代码,请浏览到/ platforms/PLATFORM /并找到您的本机代码.

每次构建或准备时,您的JS文件都将被重写为插件目录中的平台特定路径,但您的本机代码仅在安装插件时写入/ platforms/paths.

我建议,一旦你的插件完成,你应该收集你所有的插件特定文件并将它们复制回你的插件包目录,这样你就可以在将来的项目中再次使用它们(或者发布它们供他人使用的开源).


chr*_*ens 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"/>
Run Code Online (Sandbox Code Playgroud)

然后是文件2); 这很奇怪!

  • 该文件包含所有插件"feature"标签,是我的应用程序中唯一具有这些功能标签的config.xml文件.我的"cordova插件添加"命令为我的所有插件正确添加了它们.

  • 在我编辑/添加我的偏好标签到文件1)之后,每次执行我的"cordova build android"时,这些标签也被复制到这个文件中.

  • "cordova build android"仍打印到concole"从默认为平台生成config.xml"android""...但它包括我所有的偏好,一旦我将它们放入1) - 我认为一旦文件1)有更多的内容它比"默认"内容成功地将该内容复制到文件2)

  • 文件2)包括文件1)中的首选项,功能标签和正确的作者; 但它没有正确的描述,也没有文件1中正确的名称标签.这两个标签似乎来自一些cordova内部默认值,如果你直接在文件2中更改它们,它们会被下一个"cordova build android"覆盖到这些默认值.我找不到办法让他们保持自己的价值观! - 我怀疑那里有虫子!