Cordova插件无法正常工作

时间:2014-10-30 13:26:06

标签: android cordova

编辑以澄清: 您在下面的某些文件中看到的<name>实际上并不是文件的一部分,但它包含我必须审查的公司名称。

测试情况:

  • Cordova 4
  • OS X Yosemite
  • Android 4.4设备(配有USB)
  • 使用终端;不是Eclipse

会发生什么: 使用cordova run --release成功构建并签署.apk,移动设备安装并打开它没有问题。但是,没有一个插件可以工作。例如:

    title.on('click', function() {
        if (!navigator.camera) {
            alert('no camera!');
        } else {
            navigator.camera.getPicture(function success(data) {
            // do something
            }, function error(data) {});
        }
    });

始终警告没有摄像头,这意味着Cordova没有向camera对象添加window.navigator对象。

以下是有关我的cordova安装和一些xml文件的一些信息,据我所知,没有什么看起来不合适。请注意,不只是相机不起作用,我只是以它为例。

科尔多瓦信息:

Node version: v0.10.29

Cordova version: 4.0.1-nightly.2014.9.29

Config.xml file: 

<?xml version='1.0' encoding='utf-8'?>
<widget id="com.<name>.App" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <name><name> Mini</name>
    <description>
        De <name> app voor je telefoon
    </description>
    <author email="stephan@<name>.nl" href="https://<name>.nl">
        Het <name> Team
    </author>
    <content src="index.html" />
    <access origin="*" />
    <preference name="SplashScreen" value="screen" />
    <preference name="SplashScreenDelay" value="2000" />
</widget>


Plugins: 

org.apache.cordova.camera,org.apache.cordova.dialogs,org.apache.cordova.file,org.apache.cordova.file-transfer,org.apache.cordova.media,org.apache.cordova.media-capture,org.apache.cordova.splashscreen,org.apache.cordova.vibration

Android platform:

Available Android targets:
----------
id: 1 or "android-19"
     Name: Android 4.4.2
     Type: Platform
     API level: 19
     Revision: 4
     Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800, WXGA800-7in
 Tag/ABIs : default/armeabi-v7a, default/x86

科尔多瓦/ config.xml中

<?xml version='1.0' encoding='utf-8'?>
<widget id="com.<name>.App" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <name><name> Mini</name>
    <description>
        De <name> app voor je telefoon
    </description>
    <author email="stephan@<name>.nl" href="https://<name>.nl">
        Het <name> Team
    </author>
    <content src="index.html" />
    <access origin="*" />
    <preference name="SplashScreen" value="screen" />
    <preference name="SplashScreenDelay" value="2000" />
</widget>

科尔多瓦/平台/机器人/ AndroidManifest.xml中 &LT;

?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="com.kaartje2go.App" xmlns:android="http://schemas.android.com/apk/res/android">
    <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
    <uses-permission android:name="android.permission.INTERNET" />
    <application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="CordovaApp" android:theme="@android:style/Theme.Black.NoTitleBar" android:windowSoftInputMode="adjustResize">
            <intent-filter android:label="@string/launcher_name">
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="19" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.RECORD_VIDEO" />
    <uses-permission android:name="android.permission.VIBRATE" />
</manifest>

科尔多瓦/平台/机器人/ RES / XML / config.xml中

<?xml version='1.0' encoding='utf-8'?>
<widget id="com.<name>.App" 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" />
    <feature name="Camera">
        <param name="android-package" value="org.apache.cordova.camera.CameraLauncher" />
    </feature>
    <feature name="Notification">
        <param name="android-package" value="org.apache.cordova.dialogs.Notification" />
    </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="Media">
        <param name="android-package" value="org.apache.cordova.media.AudioHandler" />
    </feature>
    <feature name="Capture">
        <param name="android-package" value="org.apache.cordova.mediacapture.Capture" />
    </feature>
    <feature name="SplashScreen">
        <param name="android-package" value="org.apache.cordova.splashscreen.SplashScreen" />
    </feature>
    <feature name="Vibration">
        <param name="android-package" value="org.apache.cordova.vibration.Vibration" />
    </feature>
    <name><name> Mini</name>
    <description>
        De <name> app voor je telefoon
    </description>
    <author email="stephan@<name>.nl" href="https://<name>.nl">
        Het <name> Team
    </author>
    <content src="index.html" />
    <access origin="*" />
    <preference name="SplashScreen" value="screen" />
    <preference name="SplashScreenDelay" value="2000" />
</widget>

3 个答案:

答案 0 :(得分:41)

核对清单:你的插件是否已加载?

  • 您的index.html是否加载了cordova.js脚本? (即如果你有www/index.html,那么你可以引用cordova.js。这个文件不在www目录中,而是由Cordova自动生成并插入你的应用程序中)
  • 是否加载了插件javascript?使用Chrome或Safari远程调试您的Android / iOS应用程序。
  • cordova plugin ls:您的插件是否已列出?
  • plugins/android.json:您的插件是否已列出?
  • platforms/android/assets/www是否包含所有文件? (即带有脚本的plugins文件夹,cordova_plugins.js应提及您的插件,特定于平台的cordova.js

您是否可以收听deviceready事件以检查Cordova是否初始化? (如果所有脚本都已到位)

答案 1 :(得分:3)

如果您的插件不起作用,您还可以尝试以下步骤:

cordova plugin list;
cordova plugin remove my-cordova-plugin --save;
cordova plugin add my-cordova-plugin --nosave;

还要注意以下插件依赖项:

  1. filefile-transfercamera插件均依赖于compat插件;因此最后需要删除compat
  2. file-transfer插件取决于file,因此需要首先删除file

答案 2 :(得分:0)

今天,我了解了导致此中断的另一个原因:无论您在何处,确保您的项目都没有名为cordova.js的第二个文件。如果cordova插件管理找到了包含在标签中的文件,则可能会错误地认为您自己文件的基本路径是Cordova cordova.js的基本路径,并将其用作加载自己的JS文件的基本路径。