Android SDK vs NDK

0

Witam,
mam pytanie do osób które bawiły się z programowaniem pod Androida. Co powinienem wybrać: Android SDK czy NDK. Powiem że zdecydowanie wolę C++ od Javy. Nie wiem na ile dobre mam informacje, ale słyszałem że NDK kompiluje mimo wszystko do kodu pośredniego oraz że ma jakieś ograniczenia w stosunku do SDK.
W grę wchodzi też Qt ale podobno jest to mało używane rozwiązanie. Bo interesuje mnie też ewentualnie rynek pracy.

0

wystarczy przeczytać o NDK:

http://developer.android.com napisał(a)

Before downloading the NDK, you should understand that the NDK will not benefit most apps.

Skoro zaczynasz z Androidem to pchanie się tam z C++ to proszenie się o podwójne kłopoty. Przesiadka z C++ do Java jest przyjemna, a jeśli chcesz zacząć używać Androida to nawet zalecana.

0

Przesiadkę z C++ na Androida już przeżywałem i wcale to dla mnie nie było nic przyjemnego. Jednak niektóre przyzwyczajenia trudno zmienić z dnia na dzień.
Nie chcę wywoływać kolejnej dyskusji co jest lepsze - Java czy Cep. Ja wolę po prostu Cepa i szanuję tych co wolą Javę. Nie chcę też żeby ktoś mnie do Javy przekonywał. Po prostu pytam czy Android+C++ ma przyszłość. Jak nie ma to niestety będę musiał się do Javy przyzwyczaić.

Więc takie pytanko MarekR22: Dlaczego myślisz że pcham się w podwójne kłopoty? Rozwiń tą myśl.

0

Android ma swoje pułapki i dziwactwa. Przykładowo wszyscy równo nabierają się na:

  • obsługę zmiany orientacji (ogólnie chodzi o zmianę konfiguracji)
  • interpretacja sensora przy zmianach orientacji (tu zwykle wtopa jest na tabletach)
  • wyciek pamięci spowodowany statyczną referencją do zasobów załadowanych z kontekstu activity
    Takich nieoczekiwanych zachowań Android ma sporo i Stackoverflow roi się od pytań ich dotyczących. Jak dodać do tego C++ to te kłopoty tego typu na pewno się nasilą.

Android był w zasadzie moim pierwszym prawdziwym kontaktem z Java, bo ja tez jestem bardziej C++, ale po doświadczeniach z Objective C na iOS chwalę sobie Java'ę.

0
MarekR22 napisał(a):

Jak dodać do tego C++ to te kłopoty tego typu na pewno się nasilą.

Nie widzę powodu żeby tak było. Chociaż mogę się mylić.

Trochę się dziwie że tak mało osób (1) zainteresowało się tematem. Czyżby tak mało ludzi klepało pod Androida!?

Btw, ciekawe co z pomysłem ze sprzętową implementacją wirtualnej maszyny. Jeżeli Google chce zostać przy Javie to byłoby to idealne rozwiązanie dla smartfonów.

0

Trochę się dziwie że tak mało osób (1) zainteresowało się tematem. Czyżby tak mało ludzi klepało pod Androida!?

Bo wszyscy programują w Javie?

Btw, ciekawe co z pomysłem ze sprzętową implementacją wirtualnej maszyny. Jeżeli Google chce zostać przy Javie to byłoby to idealne rozwiązanie dla smartfonów.

Sprzętowa Java jest w starych ARMach: http://en.wikipedia.org/wiki/Jazelle i jak myślę pozwalała na zwiększenie wydajności (i wydajności na wat) w przypadku interpretowanej Javy. W przypadku JITa Jazelle się zupełnie nie opłaca, bo procesory nie robią (względnie) wysokopoziomowych optymalizacji, takich jak np dewirtualizacja, bez której wydajność jest żałosna. Do tego dochodzi fakt, iż Dalvik nie jest implementacją platformy Java. Owszem jest spora część wspólna bibliotek z Javą SE, język też jest ten sam, ale jest mnóstwo rzeczy w których się różnią - jedna z nich to inny format bajtkodu.

C++ pod Androidem to chyba tylko w grach jest wykorzystywany. No chyba, że ktoś zna inny przykład.

0

Jeszcze takie pytanko. Jak wcześniej napisałem, wyczytałem gdzieś że NDK jest oszustwem, bo i tak jest kompilowany do kodu pośredniego, więc nazwa Native Development Kit jest zła. Czy to prawda?

0

Nie wiem, ale szczerze wątpię. Jaki byłby tego sens?

Wyczytałeś to w oficjalnej dokumentacji, czy też może napisał to jakiś anonim w komentarzu lub poście na forum?

0
Wibowit napisał(a):

Nie wiem, ale szczerze wątpię. Jaki byłby tego sens?

Wyczytałeś to w oficjalnej dokumentacji, czy też może napisał to jakiś anonim w komentarzu lub poście na forum?

Sens byłby taki, żeby dogodzić takim cwaniaczkom jak ja, którzy wolą klepać kod w C++ niż w Javie.

No właśnie jakiś anonim na forum tak napisał. Dlatego pytam.

0

Ja nie znalazłem żadnych takich rewelacji, Native to native i już. Dodatkowo na Androidzie działa JNI i możesz łączyć C++ z Javą, np zaklepać GUI w Javie za pomocą Googlowej wtyczki do Eclipse, a nie-GUI-owe rzeczy możesz sobie poklepać w C++ jak już tak bardzo chcesz. Tylko, że każde wywołanie JNI to pewien narzut (przynajmniej w desktopowej Javie dość duży), więc tych wywołań musiałoby być jak najmniej, tzn w jednym wywołaniu powinieneś robić maksymalnie dużo, by zamortyzować narzut.

1 użytkowników online, w tym zalogowanych: 0, gości: 1