2012-01-24 16 views
5

Mój problem dotyczy rozwijania PhoneGap i Androida za pomocą wtyczki Eclipse Applaud. Pobrałem i zainstalowałem wtyczkę Applaud z powodzeniem. Mogę utworzyć nowy projekt za pomocą kreatora Applaud (za pomocą ikony paska narzędzi Eclipse), a wersja demonstracyjna działa poprawnie na urządzeniu. Jednak, gdy nadpisuję istniejące pliki html & js (tylko main.js, nie phonegap.js), a następnie buduję je na urządzeniu, funkcjonalność urządzenia innego niż działa dobrze (kliknięcia przycisku/aktualizacja interfejsu ui/etc), ale polecenia PhoneGap takie jak (device.version/device.platform/etc) wydaje się nie działać.Applaud & Phonegap na Androidzie

Próbowałem podłączyć to do zdarzenia onDeviceReady, a także upewniając się, że biblioteka .jar jest dołączona, ale nadal mam ten sam problem. Tak myślę, że moje pytanie jest; podczas tworzenia rozwiązania PhoneGap za pomocą Applaud, czy Eclipse trzeba skompilować i biblioteki, takie jak PhoneGap? a jeśli tak, to jak ktoś może robić takie rzeczy?

Error Log:

01-24 14:59:44.567: W/KeyCharacterMap(5453): No keyboard for id 131074 

01-24 14:59:44.567: W/KeyCharacterMap(5453): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 

01-24 14:59:59.917: I/Web Console(5453): Failed to run constructor: TypeError: object is not a function at file:///android_asset/www/resources/js/phonegap-1.3.0.js:210 

01-24 14:59:59.927: I/Web Console(5453): Failed to run constructor: TypeError: Cannot read property 'capture' of undefined at file:///android_asset/www/resources/js/phonegap-1.3.0.js:210 

01-24 14:59:59.927: I/Database(5453): sqlite returned: error code = 14, msg = cannot open file at source line 25467 

01-24 15:00:00.057: D/dalvikvm(5453): GC_CONCURRENT freed 1185K, 55% free 3188K/6983K, external 2630K/2814K, paused 2ms+3ms 
+0

czy dodałeś wtyczkę do pliku plugins.xml? – ghostCoder

+0

to zdarzenie onDeviceReady jest wyrzucane? – ghostCoder

+0

Tak, również plik wtyczki znajduje się w katalogu root/res/plugins.xml .. Zalogowałem się na urządzeniu podczas pracy i wydaje mi się, że otrzymałem następujące dane wyjściowe: I/Web Console (4894): Nie można uruchomić konstruktora: TypeError : obiekt nie jest funkcją w pliku: ///android_asset/www/resources/js/phonegap-1.3.0.js: 210I/Web Console (5109): Uruchomienie konstruktora nie powiodło się: TypeError: Nie można odczytać właściwości "przechwytywania" niezdefiniowanej w pliku: ///android_asset/www/resources/js/phonegap-1.3.0.js: 210 I/Baza danych (5109): powrócił sqlite: kod błędu = 14, msg = nie można otworzyć pliku w wierszu źródłowym 25467 – JohnHodkinson

Odpowiedz

3

Więc wróciłem i naprawiłem problem, który miałem (najprawdopodobniej przez szczęście). Kiedy zaczynałem ten projekt, pomyślałem, że najlepszym podejściem byłoby uczynienie tej aplikacji możliwie najbardziej modularną; każda funkcjonalność (żądania sieciowe, odczyt/zapis pliku itp.) powinny być oddzielone od siebie. W ten sposób utworzyłem wiele oddzielnych plików js, z których każdy został opatrzony odpowiednią nazwą (siecią, urządzeniem, językiem itp.), A następnie zawarty na mojej stronie index.html, która jest następnie uruchamiana przez phonegap.

W niektórych z tych plików, wziąłem następujące podejście:

var Device = { 
    // Returns the Device Name as a string. 
    Name: function() { 
     return window.device.name; 
    } 
}; 

W rezultacie, mogłem wtedy dostęp do tej funkcji za pomocą operatora kropki (które wolę). Jednak w wyniku tego wiele plików polegało na sobie, co utrudniało odnalezienie problemu. Po spędzeniu trochę czasu na komentowaniu i nie komentowaniu funkcjonalności, Wydaje się, że używając kombinacji powyższego podejścia (operator kropki) i mojego złego wyboru konwencji nazewnictwa. Powyższa implementacja Device.Name() wydawała się (nie do końca pewna, dlaczego/jak) kolidowała z bibliotekami PhoneGap, w wyniku czego wystąpiły błędy js na urządzeniu.

Po zmianie powyższej nazwy z "Urządzenie" na "Telefon" mój problem zniknął. Proste i być może oczywiste rozwiązanie na bolesne popołudnie.

+0

Słuchaj, miałem ten sam problem. Kiedy importujesz projekt lub tworzysz nowy, tag skryptu do ładowania phonegapa js api jest łączony. Wystarczy, że go nie potrzebujesz. Musisz tylko odkomentować tę linię. –

+0

phonegap.js definiuje obiekt Device z właściwościami właściwymi dla urządzenia - będzie kolidował z powyższym obiektem i prawdopodobnie spowoduje jego awarię –

1

będę odpowiedzieć na to pytanie, ale nie sądzę, to jest twój problem:

, czy kreator klaskać po prostu wykorzystuje phonegap.jar lub odbudowuje komponenty zależą od sposobu korzystania z kreatora tworzenia projektu.

Jeśli używasz "Wbudowanego Phonegap" lub wskaż pobraną oficjalną wersję ("Podaj ścieżkę do zainstalowanej PhoneGap"), po prostu wskaże na phonegap.jar z tego wydania. Jeśli wskażesz katalog z rozpakowaną wersją github PhoneGap, phonegap.jar nie zostanie użyty, a źródła Java PhoneGap zostaną wbudowane w Twój projekt. Ułatwia to debugowanie implementacji PhoneGap.

Jeśli chodzi o Twój problem, prawdopodobnie masz problem z plikiem index.html, np. Z błędną pisownię phonegap {...}. Js. Jak mówi ghostCoder w komentarzach, być może będziesz musiał udostępnić swój kod, aby uzyskać pomoc.

Powiązane problemy