我正在使用Phonegap构建服务编译一个ionic-cordova应用程序。在实际设备上测试应用程序时(以及通过一些调试日志消息),我得到的cordova.plugins和window.cordova.plugins都是未定义的。奇怪的是,当我在本地编译应用程序(使用Android SDK)并在我的设备上运行它时,它工作得很好。这个问题只发生在Phonegap版本中。我比较了config.xml,它们是相似的。这是我的config.xml:
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.ionicframework.reader491854" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<preference name="loglevel" value="DEBUG" />
<preference name="AndroidLaunchMode" value="singleTop" />
<feature name="App">
<param name="android-package" value="org.apache.cordova.App" />
</feature>
<feature name="Device">
<param name="android-package" value="org.apache.cordova.device.Device" />
</feature>
<feature name="File">
<param name="android-package" value="org.apache.cordova.file.FileUtils" />
<param name="onload" value="true" />
</feature>
<feature name="FileTransfer">
<param name="android-package" value="org.apache.cordova.filetransfer.FileTransfer" />
</feature>
<feature name="Clipboard">
<param name="android-package" value="com.verso.cordova.clipboard.Clipboard" />
</feature>
<feature name="SocialSharing">
<param name="android-package" value="nl.xservices.plugins.SocialSharing" />
</feature>
<feature name="Toast">
<param name="android-package" value="nl.xservices.plugins.Toast" />
</feature>
<feature name="InAppBrowser">
<param name="android-package" value="org.apache.cordova.inappbrowser.InAppBrowser" />
</feature>
<feature name="TTS">
<param name="android-package" value="org.apache.cordova.plugin.TTS" />
</feature>
<feature name="Zip">
<param name="android-package" value="org.apache.cordova.Zip" />
</feature>
<name>Test Reader</name>
<description>
Description here
</description>
<author email="hi@ionicframework" href="http://ionicframework.com/">
Author name
</author>
<content src="index.html" />
<access origin="*" />
<preference name="webviewbounce" value="false" />
<preference name="UIWebViewBounce" value="false" />
<preference name="DisallowOverscroll" value="true" />
<preference name="BackupWebStorage" value="none" />
<preference name="Fullscreen" value="true" />
<feature name="StatusBar">
<param name="ios-package" onload="true" value="CDVStatusBar" />
</feature>
<feature name="NetworkStatus">
<param name="android-package" value="org.apache.cordova.networkinformation.NetworkManager" />
<param name="android-package" value="org.apache.cordova.NetworkManager" />
</feature>
<feature name="Keyboard">
<param name="android-package" value="com.ionic.keyboard.IonicKeyboard" />
<param name="onload" value="true" />
<param name="ios-package" onload="true" value="IonicKeyboard" />
</feature>
<icon src="www/img/logo.png" />
</widget>有什么需要帮忙的吗?
发布于 2015-03-09 16:26:33
好的,我今天早上已经解决了。以下是我为可能面临类似问题的任何人所做的让它工作的方法:
1) phonegap build的配置中的根标签命名空间需要是: xmlns:gap="http://phonegap.com/ns/1.0“
2) Phonegap Build不以这种方式使用插件,只有Phonegap CLI使用。我的测试是在本地使用SDK进行的,我所有的插件都是android平台文件夹中的实际类。要使用Phonegap Build,您不必将插件与源代码一起发送,而是从中央存储库(实际上是两个)中选择所需的插件。它们是:https://build.phonegap.com/plugins和http://plugins.cordova.io/。当然,我必须回去检查我的每个插件是否在这些存储库中。如果不是,我必须找一个替代方案。所以现在我的新config.xml看起来像这样:
<widget xmlns="http://www.w3.org/ns/widgets" xmlns:gap="http://phonegap.com/ns/1.0"
id="package.id" version="1.1.1">
<name>Name</name>
<description>
Description here
</description>
<author email="email@email.com" href="http://www.domain.com">
Author Name
</author>
<content src="index.html"/>
<access origin="*"/>
<icon src="icon.png"/>
<preference name="webviewbounce" value="false"/>
<preference name="UIWebViewBounce" value="false"/>
<preference name="DisallowOverscroll" value="true"/>
<preference name="BackupWebStorage" value="none"/>
<preference name="Fullscreen" value="true"/>
<preference name="AndroidLaunchMode" value="singleTop"/>
<gap:plugin name="org.apache.cordova.device" />
<gap:plugin name="org.apache.cordova.file" />
<gap:plugin name="org.apache.cordova.file-transfer" />
<gap:plugin name="org.apache.cordova.network-information" />
<gap:plugin name="org.apache.cordova.inappbrowser" />
<gap:plugin name="org.apache.cordova.statusbar" version="0.1.4" source="pgb"/>
<gap:plugin name="com.ionic.keyboard" version="1.0.3" source="pgb"/>
<gap:plugin name="com.verso.cordova.clipboard" version="0.1.0" source="pgb"/>
<gap:plugin name="nl.x-services.plugins.socialsharing" version="4.3.8" source="pgb"/>
<gap:plugin name="nl.x-services.plugins.toast" version="2.0.2" source="pgb"/>
<gap:plugin name="com.wordsbaking.cordova.tts" version="0.2.1" source="plugins.cordova.io"/>
</widget>3)由于"device“插件没有正确包含,所以没有触发deviceready事件。我没有正确地等待这个事件,当我修复插件时,它从来没有真正触发过,这就引出了下一个问题。
4)这是最棘手的,而且需要几个小时。deviceready有时会发射,有时不会。通过将作为index.html文件中的最后一个包含的脚本来解决此问题。我不知道原因,尤其是cordova文档提到deviceready侦听器的行为不同,在这种方式下,如果事件在添加侦听器之前已经触发,则会立即调用回调。不管怎么说,这就解决了问题。
祝好运!
https://stackoverflow.com/questions/28926022
复制相似问题