簡體   English   中英

Cordova Android插件:由cordova覆蓋的config.xml准備?

[英]Cordova Android Plugin: config.xml overwritten by cordova prepare?

我正在為Android平台開發Cordova插件。

如上所述這里 ,我編輯的platforms/android/res/xml/config.xml文件中包含插件的類映射。

這一切都很好,除了每次我運行cordova prepare android這個文件得到覆蓋說:

Generating config.xml from defaults for platform "android"

所以,我必須每次都撤消這個非常煩人的變化。 有沒有辦法告訴cordova不要這樣做或在其他地方插入類映射?

您將需要創建一個插件包並安裝它來解決此問題。

插件包有一個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。

我建議,一旦你的插件完成,你應該收集你所有的插件特定文件並將它們復制回你的插件包目錄,這樣你就可以在將來的項目中再次使用它們(或者發布它們供他人使用的開源)。

我正在使用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); 這很奇怪!

  • 該文件包含所有插件“功能”標簽,是我的應用程序中唯一具有這些功能標簽的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”覆蓋到這些默認值。 我找不到辦法讓他們保持自己的價值觀! - 我懷疑那里有蟲子!

我想為我的cordova應用程序創建一個不同的起始頁面,並遇到同樣的問題 - 我的config.xml文件被build命令覆蓋了。 解決此問題的方法是更改​​公共config.xml文件,該文件當前位於項目根文件夾中。 一旦我在那里進行了更改,就會在構建命令中獲取更改。 我用這個頁面作為參考。

這是一個非常古老的線程 - 希望這有助於某人。

因此,確保您正在編輯頂級config.xml文件非常重要。

有時,至少在該文件中的權限的情況下,您將需要刪除並重新安裝該插件,並在命令行中設置所需的權限,即使Cordova文檔說您可以在任一位置設置這些權限。

有關示例,請參閱相機插件上的iOS怪癖部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM