[英]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.