2014-10-30 20 views
12

Edycja dla wyjaśnienia: <name> widać w niektórych plików poniżej nie jest faktycznie część plików, ale zawiera nazwę firmy, które miałem do cenzurowania.Cordova wtyczki nie działa

sytuacja testu:

  • Cordova 4
  • OS X Yosemite
  • Android 4.4 urządzenia (w połączeniu z USB)
  • przez zacisk; Nie Eclipse

Co się dzieje: Korzystanie cordova run --release powodzeniem buduje i podpisuje apk i mobilne urządzenie instaluje i otwiera je bez problemów. Ale żadna z wtyczek nie działa. Na przykład:

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

zawsze alarmuje, że nie ma aparatu, co oznacza Cordova nie dodać camera obiektu do obiektu window.navigator.

Poniżej znajduje się kilka informacji o mojej instalacji cordova i niektórych plikach xml, o ile mogę powiedzieć, że nic nie wygląda nie na miejscu. Zwróć uwagę, że nie jest to tylko aparat, który nie działa, po prostu użyłem go jako przykładu.

Cordova info:

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/platform/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/platform/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> 

Odpowiedz

33

Lista kontrolna: Czy Twoja wtyczka jest załadowana?

  • Czy Twój index.html wczytuje skrypt cordova.js? (Jeśli masz numer www/index.html, możesz po prostu odwołać się do cordova.js. Plik ten nie znajduje się w katalogu www, ale jest automatycznie generowany przez Cordova i wstawiany do Twojej aplikacji)
  • Czy wtyczka jest ładowana javascript? Użyj przeglądarki Chrome lub Safari, aby zdalnie debugować aplikację na Androida/iOS.
  • cordova plugin ls: Czy Twoja wtyczka znajduje się na liście?
  • plugins/android.json: Czy Twoja wtyczka znajduje się na liście?
  • Czy platforms/android/assets/www ma wszystkie pliki? (Tj plugins folderu ze skryptami, cordova_plugins.js należy wymienić swoje wtyczki, platforma specyficzne cordova.js)

można słuchać przypadku deviceready aby sprawdzić, czy Cordova inicjuje w ogóle?(Jeśli wszystkie skrypty są na miejscu)

+3

Ten facet jest mistrzem. Widziałem wiele starszych tutoriali na temat Cordova i były one mylące, ponieważ wszystkie są różne (Cordova wydaje się bardzo zmieniać strukturę) i pomyślałem, że 'cordova.js' nie musi już być dodawany, ponieważ nie mogłem go znaleźć. Zakładałem, że zostanie on automatycznie dodany podczas procesu kompilacji. W końcu to było. Dodałem 'cordova.js' do mojego' index.html' i wszystko działa! –

+1

Bardzo mi to pomogło. Wyciągałam włosy, próbując zrozumieć, dlaczego to nie działa! – Jason

+0

Mam 'cordova plugin add ' s, ale moja 'cordova plugin ls' zwraca pustkę, a mój folder wtyczek jest pusty. Każdy pomysł, dlaczego? – Roman

1

Jeśli wtyczki nie działają Można również spróbować kroki:

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

również pamiętać o następujących zależnościach wtyczkę:

  1. file , file-transfer i camera wtyczki są zależne od wtyczki compat; więc compat należy usunąć na końcu.
  2. Wtyczka file-transfer jest zależna od file, więc file należy najpierw usunąć.
Powiązane problemy