2014-10-30 4 views
12

Изменить для разъяснения: <name> вы видите в некоторых файлах ниже, не является на самом деле часть файлов, но она включает в себя название компании, которую я должен был цензором.Кордова плагинов не работает

Тест ситуация:

  • Кордова 4
  • OS X Йосемитская
  • Android 4.4 устройство (в сочетании с USB)
  • Использование терминала; не Затмение

Что происходит: Использование 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) {}); 
     } 
    }); 

Всегда предупреждает, что нет камеры, а это значит, Кордова не добавлял 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="[email protected]<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 

Cordova/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="[email protected]<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> 

Cordova/платформы/Android/AndroidManifest.xml <

?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> 

Cordova/платформы/Android/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="[email protected]<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> 

ответ

33

Контрольный список: загружен ли ваш плагин?

  • Выполняет ли ваш index.html сценарий cordova.js? (т. е. если у вас есть www/index.html, тогда вы можете просто ссылаться на cordova.js.Этот файл не находится в каталоге www, но автоматически генерируется Кордовой и вставлен в ваше приложение)
  • Загружен ли загруженный javascript плагин? Используйте Chrome или Safari для удаленного отладки вашего приложения android/iOS.
  • cordova plugin ls: Включен ли ваш плагин?
  • plugins/android.json: Включен ли ваш плагин?
  • У platforms/android/assets/www есть все файлы? (Т.е. plugins папки со скриптами, cordova_plugins.js следует упомянуть плагин, платформа конкретного cordova.js)

Вы можете слушать deviceready события, чтобы проверить, если Кордова инициализирует вообще?(Если все сценарии на месте)

+3

Этот парень - чемпион. Я видел много старых обучающих программ на Кордове, и они были сбиты с толку, поскольку они все разные (Кордова, кажется, меняет структуру довольно много), и я подумал, что «cordova.js» больше не нужно добавлять, поскольку я не мог найти его. Я предположил, что он будет автоматически добавлен в процессе сборки. В конце концов, это была вещь. Я добавил 'cordova.js' в свой' index.html', и все работает! –

+1

Это очень помогло мне. Вытягивал мои волосы, пытаясь понять, почему это не работает! – Jason

+0

У меня есть плагин cordova add 's, но мой плагин' cordova ls' возвращается с ошибками, и моя папка плагинов находится в ярости. Любая идея почему? – Roman

1

Если плагины не работает, вы можете попробовать следующие действия:

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

также быть в курсе следующих зависимостей плагина:

  1. file , file-transfer и camera плагины зависят от плагина compat; поэтому compat необходимо удалить последним.
  2. Плагин file-transfer зависит от file, поэтому file необходимо удалить первым.
Смежные вопросы