2013-03-04 10 views
26

Chcę spróbować napisać i skompilować kod w C++ dla urządzeń iOS i Android. Używam XCode przez jakiś czas (pisałem kod C++ dla MacOS i Windows). Więc chcę używać XCode do moich celów.Kompilowanie kodu C++ (XCode) dla iOS i Androida. To się dzieje naprawdę?

Problem polega na tym, że nie wiem, jak skompilować kod w C++ zarówno na urządzenia z Androidem, jak i na iPada/IPhone. Chcę używać rozwiązania crossplatform dla iOS i Androida, ale nie chcę używać takich frameworków jak Marmalade (C++) lub innych.

Czy to prawda, czy nie? :) Czy są tutoriale lub inne pomocne materiały?

+1

Czy najpierw próbowałeś wyszukać w Google? – crashmstr

+0

Nie wiem o systemie iOS, ale Android jest w istocie java i dlatego może używać kodu C++ przez JNI. – Motes

+0

Jeśli nie masz nic przeciwko C#, możesz użyć Xamarin http://xamarin.com/monotouch – AedonEtLIRA

Odpowiedz

58

Możesz zdecydowanie użyć C++ na iOS i Android. Napisałem własne silniki do gier dla obu.

Xcode jest normalnym IDE dla iOS i natywnie obsługuje rozwój "Objective-C++" (Kompilator obsługuje zarówno Objective-C, jak i C++). Będziesz musiał napisać cienką powłokę w Objective-C, aby wchodzić w interakcje z systemem operacyjnym, ale możesz napisać wszystko inne w C++, jeśli chcesz. Jeśli pobierzesz narzędzia wiersza poleceń Xcode, możesz także budować ze skryptów.

Eclipse jest zwykle standardem IDE dla systemu Android, a po pobraniu NDK można używać interfejsu JNI do komunikacji między językiem Java i C++. Podobnie jak iOS, będziesz potrzebował co najmniej opakowania Java do interakcji z systemem operacyjnym.

Nie jesteś jednak ograniczony do Eclipse i Xcode. Można na przykład użyć emacs i/lub zatrudniać CMake, aby umożliwić nieco skonsolidowanie ustawień projektu. Emacs to bardzo wydajne i elastyczne narzędzie IDE, ale ma bardzo stromą krzywą uczenia się i nie jest łatwe do zainstalowania. Jeśli zrobisz to na Macu, polecam emacsformacosx i zainstaluję również ECB i autocomplete. CMake to w zasadzie wieloplatformowy system kompilacji, który pozwala budować wiele różnych plików projektu (Visual Studio, Xcode, Eclipse itp.) Z jednego drzewa źródłowego. Podobnie jak emacs jest to bardzo potężna, ale nieco stroma krzywa uczenia się. Jeśli chcesz od razu zacząć grę, prawdopodobnie zaczniesz od Xcode i Eclipse. Jeśli pracujesz na komputerze, potrzebujesz Mac VM lub Hackintosh, aby korzystać z Xcode i cygwin do korzystania z NDK dla Androida (użytkownicy Macbook Pro mogą się dobrze bawić bez problemów).

Natywny rozwój Androida jest zdecydowanie trudniejszy. Nie tylko masz do czynienia z większą segmentacją urządzeń, ale rodzime debugowanie nie jest proste. Musisz uruchomić serwer GDB na urządzeniu i połączyć się z nim, aby ustawić punkty przerwania i wiele osób robi to z wiersza poleceń. Słyszałem, że niektórzy ludzie osiągnęli sukces dzięki Tegra Tools dla Eclipse, jeśli chcesz mieć IDE oparte na GUI.

Zdecydowanie zaleca się rozwijanie systemu na iOS, ponieważ masz do dyspozycji znacznie wydajniejsze narzędzia z IDE. Możesz śledzić wycieki pamięci, kod profilu, łatwo zestawiać punkty przerwania;) itd. Po opracowaniu funkcji na iOS możesz zmagać się z plikami .mk i innymi dobrami rozwoju natywnego Androida.

Oto kilka informacji na temat cyklu życia obiektów podstawowych i dla iOS:

i dla Androida:

Dopóki grasz dobrze z OS i przestrzegasz cyklu życia aplikacji, możesz wykonywać połączenia z logiką C++. Możesz to zrobić bezpośrednio w iOS, ale w przypadku Androida musisz przekazywać połączenia przez JNI. Jeśli obudujesz specyfikację platformy, możesz podzielić się logiką C++ między obiema platformami.

Jestem zwolenniczką C++, ale wybór jej użycia zależy od sytuacji na tych platformach. C++ nie jest popularnym wyborem dla tych platform i jako taki nie znajdziesz zbyt wielu dokumentów (twoja własna przez większość czasu). Złożoność może wzrosnąć nieco, jeśli nie znasz się dobrze na C++ (Czy znasz się z RAII, design patters, STL?).

Oto kilka sytuacji, w których może to mieć sens:

  • Jeśli trzeba wykorzystać biblioteki, który został utworzony w języku C/C++
  • Jeśli chcesz zbudować własny agnostic platformy ramy aplikacje lub gry
  • Jeśli pracujesz z realtime/wydajności krytycznych aplikacji, takich jak gry

nie mówię ci KONIECZNIE używa C++ w tych sytuacjach, ponieważ wiele osób rozwinęło gry w Objective-C. Mówię tylko, że może to być coś, co należy wziąć pod uwagę, jeśli chcesz w pełni wykorzystać sprzęt lub po prostu chcesz czegoś bardziej przenośnego.

+0

Bardzo interesujące! Nie masz kilku tutoriali na temat tego, o czym mówisz w tym poście? :) – JavaRunner

+1

Ten temat jest bardzo bliski mojemu sercu, ponieważ pracuję w branży gier, a także hobby z nim w wolnym czasie. Zdecydowanie postaram się rozszerzyć ten post nieco bardziej, aby zapewnić jasność. –

+0

Byłoby całkiem fajnie! :) Nigdy nie opracowałem dla systemu iOS, ale mam trochę doświadczenia z rozwijaniem dla Androida (z Eclipse). Ale teraz chcę spróbować "emigrować" do C++ i do XCode. I chcę zbudować własne środowisko gry (łatwe, ale szybkie :)). – JavaRunner

Powiązane problemy