Zaktualizowano (dla jasności i dla zmniejszenia niejednoznaczności):
Zacznę majstrować przy aplikacjach na Androida. Planowałem napisać w C ++ przy użyciu NDK (ponieważ mam większe doświadczenie w C ++ i wolę to od Java), ale na stronie Android NDK natknąłem się na następujące rzeczy :
powinieneś używać NDK tylko wtedy, gdy jest niezbędny dla twojej aplikacji - nigdy dlatego, że po prostu wolisz programować w C / C ++.
Odniosłem wrażenie, że powinieneś używać preferowanego języka, o ile pasuje do pracy. Czy ktoś mógłby wyjaśnić, dlaczego tak mocno odradza się używanie C / C ++ do tworzenia aplikacji na Androida?
Oryginał:
Zacznę majstrować przy aplikacjach mobilnych, w szczególności Androidzie, który jest systemem operacyjnym mojego obecnego telefonu, i zastanawiałem się, czy pisanie aplikacji w C ++ (lub przynajmniej rdzeniu, a następnie zawijanie w Javie) było akceptowalną opcją.
Mam pewne doświadczenie, jestem informatykiem, który ukończył 3 kursy C ++ (wprowadzenie, średniozaawansowany, OOP, a wiosną biorę kurs STL) i tylko 1 kurs Java (średniozaawansowany). Z tego powodu wolę C ++ i wolę go od Javy. Na stronie Android NDK natknąłem się na :
Korzystanie z kodu natywnego w systemie Android na ogół nie powoduje zauważalnej poprawy wydajności, ale zawsze zwiększa złożoność aplikacji. Ogólnie rzecz biorąc, powinieneś używać NDK tylko wtedy, gdy jest niezbędny dla twojej aplikacji - nigdy dlatego, że po prostu wolisz programować w C / C ++.
- Odniosłem wrażenie, że powinieneś używać języka odpowiedniego do pracy, a także takiego, który znasz
- Mogę chcieć przenieść aplikację na inną platformę mobilną, taką jak iOS, która obsługuje C ++, ale nie java
- Chociaż Java jest językiem wysokiego poziomu i dlatego powinien przyspieszyć rozwój, czuję, że rozwój byłby wolniejszy, ponieważ musiałbym nauczyć się od nowa prawie wszystkiego (ponieważ miałem tylko jedną lekcję z tego języka)
Każda rada byłaby bardzo wdzięczna.
ps: wiele odpowiedzi na ten temat pochodzi z lat temu, a niewiele jest odpowiedzi, które wspominają o NDK umożliwiającym tworzenie pełnych natywnych aplikacji na Androida 2.3 i nowszych.
Odpowiedzi:
Pomyśl o tym w ten sposób. Masz możliwość wykorzystania Java SDK do zbudowania w pełni działającej aplikacji, która w 100% wykorzystuje API dostępne dla programistów. Nie ma nic, co można zrobić z NDK, czego nie można zrobić za pomocą SDK (z perspektywy API), NDK zapewnia po prostu wyższą wydajność.
Teraz spójrz na to w odwrotnej kolejności. Jeśli zdecydujesz się napisać aplikację w 100% w NDK, nadal możesz napisać w pełni funkcjonalną aplikację, ale masz ograniczoną liczbę interfejsów API platformy, do których masz dostęp. Nie do wszystkich struktur systemu Android można uzyskać dostęp w warstwie natywnej; większość interfejsów API to tylko Java. To nie znaczy, że wszystkie interfejsy API TY mogą potrzebować nie są dostępne w NDK, ale nigdzie w pobliżu ALL API są narażone.
Poza tym NDK wprowadza kod specyficzny dla platformy, który rozszerza rozmiar Twojej dystrybucji. Dla każdej architektury urządzenia, którą chcesz obsługiwać, Twój natywny kod musi być wbudowany w pliki .so (jeden dla armv5, armv7 i x86), wszystkie spakowane w tym samym APK. To zduplikowanie kodu wykonywalnego sprawia, że Twoja aplikacja jest trzykrotnie większa (tj. „Gruby plik binarny”), chyba że podczas dystrybucji aplikacji podejmiesz zadanie tworzenia oddzielnych plików APK dla każdej architektury. Proces wdrażania staje się więc nieco bardziej skomplikowany, jeśli nie chcesz, aby plik APK znacznie się powiększył.
I znowu, chociaż żadna z tych rzeczy nie zabrania ci robienia tego, co wybierzesz, wskazuje, dlaczego Google określa Javę jako metodę „preferowaną” dla większości twojego kodu i jako ścieżkę najmniejszego oporu. Mam nadzieję, że to rzuci trochę światła na to, dlaczego dokumentacja jest sformułowana tak, jak jest.
źródło
.so
plikach? Zdaję sobie sprawę, że musi istnieć osobna kompilacja kodu natywnego dla każdej obsługiwanej architektury sprzętowej, więc każdy.so
plik ma osobną kompilację?.so
każdej architektury, którą wybrałeś do obsługi (jest to kontrolowane przez twoje pliki makefiles), a wszystkie pliki zostaną umieszczone w katalogu libs / twojego APK. Po zainstalowaniu APK.so
zostaną wybrane tylko odpowiednie , ale wszystkie one nadal muszą znajdować się w początkowym APK.Jeśli zamierzasz w życiu stworzyć tylko jedną aplikację, skorzystaj z NDK.
Jeśli zamierzasz uczyć się programowania na Androida z zamiarem tworzenia więcej niż jednej aplikacji w ciągu swojego życia - i chcesz móc odpowiednio je wszystkie obsługiwać - na dłuższą metę prawdopodobnie osiągniesz lepsze wyniki, jeśli nauczysz się języka Java i zamiast tego użyj Java SDK systemu Android.
źródło
Programiści w King używają C ++ do swojej logiki gry. I wydaje się, że dobrze sobie radzą, sądząc po ich obrotach.
Z mojego doświadczenia wynika, że C ++ jest dla osób rozwiązujących problemy, a Java jest dla osób unikających problemów. Uwielbiam oba języki, ale C ++ daje wiele satysfakcji, gdy piszesz dobry kod. Jednak dotarcie tam może zająć kilka chwil magii.
Możesz polecić C ++ również naukowcom zajmującym się danymi, którzy normalnie wykonaliby swoją pracę, powiedzmy, Python lub R. C ++ może zrobić to samo z równie dobrą lub nie lepszą wydajnością, ale wystarczy być geniuszem w języku. Dlatego nigdy nie polecałbym C ++ komuś, kto chce to zrobić - po prostu dałbym głowę do uczty, na którą są przygotowani.
źródło
Znalazłem ten interesujący artykuł z: http://betanews.com/2014/07/22/why-c-is-the-perfect-choice-for-modern-app-development/
C ++ został stworzony specjalnie z myślą o niezależności platformy i jako taki można go znaleźć w każdym istniejącym systemie operacyjnym. Twój typowy użytkownik mobilny może wiedzieć, że aplikacje na Androida są napisane w języku Java i iOS w Objective-C, ale wielu nie wie, że na urządzeniach jest więcej kodu C / C ++ niż cokolwiek innego. C / C ++ napędza wiele technologii małych urządzeń (takich jak jądro, które współdziała ze sprzętem, a także typowymi bibliotekami uruchomieniowymi) i sieciami telekomunikacyjnymi, które obsługują te urządzenia. Ważniejsze dla zespołu programistów jest to, że istnieją interfejsy C / C ++ i biblioteki do wszystkiego, co musisz zrobić na dowolnym urządzeniu i platformie. Zestaw narzędzi Android NDK jest doskonałym przykładem pełnej obsługi C / C ++, która została pierwotnie dodana do zespołów tworzących gry, aby umożliwić im uzyskanie najlepszej możliwej wydajności z urządzenia poprzez unikanie Java i środowiska uruchomieniowego Java dla Androida Dalvik, maszyny wirtualnej, na której Kod Java dla Androida jest wykonywany na. Jest regularnie ulepszany, aby umożliwić obsługę każdej usługi systemu Android.
źródło
Powiedziałbym, że użyj javy dla głównej aplikacji. Ale jeśli masz kod w C ++, który chcesz przenieść lub bibliotekę, której potrzebujesz, która jest wydajnie zaimplementowana w C ++, użyj ndk dla tych bitów
źródło
Nie widzę żadnego powodu, aby nie używać C ++ do normalnego programowania Androida.Jeśli masz duże doświadczenie w pracy w C ++ i ze złożonymi systemami operacyjnymi, takimi jak Windows lub jakikolwiek inny, możesz szybko zrozumieć Androida i nie jest to tak skomplikowane, jak inne systemy operacyjne są. podczas nauki języka Java lub pracy bez nauki byłoby to bardziej frustrujące i złożone!
źródło
Najważniejszą kwestią jest to, że skompilowany kod Java będzie działał na wszystkich urządzeniach z Androidem bez zmian, podczas gdy kod natywny będzie musiał zostać skompilowany dla wszystkich platform docelowych.
Ogólnym zamiarem zarówno dla Javy, jak i Androida jest to, aby napisać większość, jeśli nie całą aplikację, w Javie i używać natywnych rzeczy tylko wtedy, gdy nie ma innej opcji ... więc wszystko, co dotyczy pisania aplikacji, nadaje się do zrobienia w Javie.
Pisząc w Javie, oszczędzisz sobie wiele irytacji w tworzeniu pomostów między światem natywnym i Java.
Jak dobrze, zrobisz sobie wielką przysługę, jeśli zdecydujesz się na zanurzenie i nauczysz się Java. Nie tylko Twoja aplikacja na Androida będzie lepsza, ale wystawisz się na znacznie inne podejście do OO i będziesz lepszym programistą.
Dodaj do tego fakt, że pisząc w Javie, ominiesz całą masę zagrożeń bezpieczeństwa.
Moim zdaniem jest to oczywiste - użyj Java.
źródło