Na obu platformach możliwe jest zawarcie zarówno wstępnie skompilowanej biblioteki, jak i kodu źródłowego C++.
Na urządzeniach z Androidem warto sprawdzić, czy używasz Android NDK
. Pozwala to na dołączenie natywnego kodu C/C++, który może przejść do Javy. Połączenie między Javą i C/C++ jest zarządzane za pomocą JNI
. Jest to dość żmudny, niezręczny system do komunikacji między C++ i Javą. Będziesz chciał zajrzeć do konfigurowania pliku Makefile Android.mk
, który określa, w jaki sposób dołączyć bibliotekę (lub kod źródłowy) do swojej kompilacji.
Na iOS jest trochę bardziej ściśle powiązany. Możesz mieć pliki Objective-C++, które mogą działać zarówno w C++, jak i Objective-C. Jeśli używasz Swift, jest trochę inny (pomost między Objective-C++ i Swift).
W niektórych przypadkach, gdy platforma (Android/iOS) zapewnia funkcjonalność wyższą od realnej lub realistycznej w C++, może okazać się, że sam tworzysz kod tak, aby twoje C++ mogło dotrzeć do platformy w razie potrzeby. Oznacza to, że możesz mieć nagłówki z oddzielnymi plikami implementacyjnymi dla każdej platformy.
thing.h
thing_android.cpp
thing_ios.mm
aplikacji na Androida w Android.mk
plik będzie zawierał thing_android.cpp
(ale nie thing_ios.mm
). Ten plik może przekroczyć most JNI, aby w razie potrzeby porozmawiać z Javą, gdy tylko potrzebujesz czegoś z zestawu SDK Androida.
Aplikacja na iOS będzie zawierać thing_ios.mm
(ale nie thing_android.cpp
). Rozszerzenie .mm
oznacza Objective-C++, dzięki czemu plik może bezpośrednio wywoływać potężne biblioteki Cocoa w razie potrzeby.
Wreszcie, na wszystkich platformach, powinieneś być pewien, aby zmniejszyć wykorzystanie C++ do najniższego wspólnego mianownika. Innymi słowy, jeśli iOS obsługuje konkretną funkcję C++, a Android nie, to nie możesz użyć tej konkretnej funkcji.
Dziękuję za wyczerpującą odpowiedź. Czytałem o pakiecie narzędzi NDK. Czy można użyć programu Visual Studio 2015 do napisania biblioteki międzyplatformowej dla systemu Android/iOS (która kompiluje się do '.so' i' .a'? Lub co byś poleciła? – Z0q
Nie rozumiem, dlaczego nie mogłeś " Zrób to - dla niektórych firm, które chcą zachować swoje źródło biblioteki zamknięte, jest to standardowa praktyka, zdarzyło mi się używać Xcode, dla wygody testowania aplikacji na iOS bezpośrednio i dokonywania szybkich zmian zarówno w źródle Objective-C, jak i C++ kod, ale w tym samym duchu skompilowałem również kod C++ bezpośrednio do kompilacji Androida, która zgłosi problemy kompilacji z góry. – drhr
Dziękuję. Jak mogę skompilować do '.so' i' .a'? – Z0q