Wraz z aktualizacją Android Studio do 1.0, obsługa łańcucha narzędzi NDK znacznie się poprawiła ( uwaga: przeczytaj moje aktualizacje na dole tego postu, aby zobaczyć użycie z nową eksperymentalną wtyczką Gradle i Android Studio 1.5 ).
Android Studio i NDK są wystarczająco dobrze zintegrowane, więc wystarczy utworzyć blok ndk {} w pliku build.gradle swojego modułu i ustawić pliki źródłowe w katalogu (module) / src / main / jni - i jesteś Gotowe!
Koniec z ndk-build z linii poleceń.
O tym wszystkim napisałem w moim poście na blogu tutaj: http://www.sureshjoshi.com/mobile/android-ndk-in-android-studio-with-swig/
Najistotniejsze punkty to:
Musisz wiedzieć o dwóch rzeczach. Domyślnie, jeśli masz zewnętrzne biblioteki, które chcesz załadować do aplikacji na Androida, są one domyślnie wyszukiwane w (module) / src / main / jniLibs. Możesz to zmienić, używając ustawienia sourceSets.main.jniLibs.srcDirs w pliku build.gradle modułu. Będziesz potrzebował podkatalogu z bibliotekami dla każdej docelowej architektury (np. X86, arm, mips, arm64-v8a itp.)
Kod, który chcesz skompilować domyślnie przez łańcuch narzędzi NDK, będzie znajdować się w (module) / src / main / jni i podobnie jak powyżej, możesz go zmienić ustawiając sourceSets.main.jni.srcDirs w pliku build.gradle modułu
i umieść to w pliku build.gradle swojego modułu:
ndk {
moduleName "SeePlusPlus" // Name of C++ module (i.e. libSeePlusPlus)
cFlags "-std=c++11 -fexceptions" // Add provisions to allow C++11 functionality
stl "gnustl_shared" // Which STL library to use: gnustl or stlport
}
To jest proces kompilowania kodu w C ++, stamtąd musisz go załadować i utworzyć opakowania - ale sądząc po twoim pytaniu, już wiesz, jak to wszystko zrobić, więc nie będę ponownie haszował.
Umieściłem również repozytorium Github tego przykładu tutaj: http://github.com/sureshjoshi/android-ndk-swig-example
AKTUALIZACJA: 14 czerwca 2015 r
Kiedy pojawi się Android Studio 1.3, powinno być lepsze wsparcie dla C ++ poprzez wtyczkę JetBrains CLion. Obecnie zakładam, że pozwoli to na rozwój Java i C ++ z poziomu Android Studio; jednak myślę, że nadal będziemy musieli używać sekcji Gradle NDK, jak wspomniałem powyżej. Dodatkowo myślę, że nadal będzie potrzeba pisania plików opakowujących Java <-> C ++, chyba że CLion zrobi to automatycznie.
AKTUALIZACJA: 5 stycznia 2016 r
Zaktualizowałem swojego bloga i repozytorium Github (w gałęzi deweloperskiej), aby używać Androida Studio 1.5 z najnowszą eksperymentalną wtyczką Gradle (0.6.0-alpha3).
http://www.sureshjoshi.com/mobile/android-ndk-in-android-studio-with-swig/
http://github.com/sureshjoshi/android-ndk-swig-example
Kompilacja Gradle dla sekcji NDK wygląda teraz następująco:
android.ndk {
moduleName = "SeePlusPlus" // Name of C++ module (i.e. libSeePlusPlus)
cppFlags.add("-std=c++11") // Add provisions to allow C++11 functionality
cppFlags.add("-fexceptions")
stl = "gnustl_shared" // Which STL library to use: gnustl or stlport
}
Co ciekawe, Android Studio ma funkcję autouzupełniania dla C ++ - otoki generowane przez Javę przy użyciu słowa kluczowego „natywny”:
Jednak nie jest to całkowicie różowe ... Jeśli używasz SWIG do pakowania biblioteki w celu automatycznego generowania kodu, a następnie spróbujesz użyć natywnego automatycznego generowania słowa kluczowego, umieści kod w niewłaściwym miejscu w twoim Swig _wrap Plik .cxx ... Musisz więc przenieść go do bloku „extern C”:
AKTUALIZACJA: 15 października 2017 r
Byłbym niedbały, gdybym nie wspomniał, że Android Studio 2.2 i nowsze wersje mają zasadniczo „natywne” (bez kalamburów) wsparcie dla łańcucha narzędzi NDK za pośrednictwem Gradle i CMake. Teraz, kiedy tworzysz nowy projekt, po prostu wybierz obsługę C ++ i gotowe.
Nadal będziesz musiał wygenerować własny kod warstwy JNI lub użyć techniki SWIG, o której wspomniałem powyżej, ale tworzenie szkieletów C ++ w projekcie na Androida jest teraz trywialne.
Zmiany w pliku CMakeLists (w którym umieszczasz swoje pliki źródłowe C ++) zostaną odebrane przez Android Studio i automatycznie przekompilują wszystkie powiązane biblioteki.