З оновленням Android Studio до 1.0 підтримка ланцюжків інструментів NDK надзвичайно покращилася ( зверніть увагу: будь ласка, прочитайте мої оновлення внизу цієї публікації, щоб побачити використання нового експериментального плагіна Gradle та Android Studio 1.5 ).
Android Studio та NDK інтегровані досить добре, так що вам просто потрібно створити блок ndk {} у своєму build.gradle модуля та встановити вихідні файли у каталог (module) / src / main / jni - і ви зроблено!
Більше немає ndk-build з командного рядка.
Про це я написав у своєму блозі тут: http://www.sureshjoshi.com/mobile/android-ndk-in-android-studio-with-swig/
Важливі точки:
Тут потрібно знати дві речі. За замовчуванням, якщо у вас є зовнішні бібліотеки, які ви хочете завантажити в додаток Android, їх шукають у (модулі) / src / main / jniLibs за замовчуванням. Ви можете змінити це за допомогою установки sourceSets.main.jniLibs.srcDirs у build.gradle модуля. Вам знадобиться підкаталог з бібліотеками для кожної архітектури, на яку ви орієнтуєтеся (наприклад, x86, arm, mips, arm64-v8a тощо).
Код, який ви хочете скласти за замовчуванням за допомогою інструментальної мережі NDK, буде розташований у (модулі) / src / main / jni і аналогічно вище, ви можете змінити його, встановивши sourceSets.main.jni.srcDirs у build.gradle вашого модуля
і помістіть це в build.gradle вашого модуля:
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
}
Це процес компілювання вашого C ++-коду, звідти вам потрібно завантажити його та створити обгортки - але, судячи з вашого запитання, ви вже знаєте, як все це зробити, тому я не буду повторно хешувати.
Також тут я розмістив репортаж Github цього прикладу: http://github.com/sureshjoshi/android-ndk-swig-example
ОНОВЛЕННЯ: 14 червня 2015 року
Коли Android Studio 1.3 вийде, має бути краща підтримка C ++ через плагін JetBrains CLion. На даний момент я припускаю, що це дозволить розробляти Java та C ++ з Android Studio; однак я думаю, що нам ще потрібно буде використовувати розділ Gradle NDK, як я вже говорив вище. Крім того, я думаю, все ще буде необхідність писати Java <-> C ++ файли обгортки, якщо CLion не виконає їх автоматично.
ОНОВЛЕННЯ: 5 січня 2016 року
Я оновив свій блог та Github repo (у галузі розвитку) для використання Android Studio 1.5 з останнім експериментальним плагіном 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
Збірка Gradle для розділу NDK зараз виглядає так:
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
}
Крім того, Android Studio має автоматичне доповнення для C ++ - обгортки, згенерованої Java, використовуючи "рідне" ключове слово:
Однак це не зовсім райдужно ... Якщо ви використовуєте SWIG, щоб обернути бібліотеку для автоматичного генерування коду, а потім спробуйте використати нативне ключове слово автогенерування, він поставить код у неправильне місце у вашому Swig _wrap .cxx файл ... Отже, вам потрібно перемістити його в блок "зовнішній С":
ОНОВЛЕННЯ: 15 жовтня 2017 року
Буду звільнений, якби я не згадував, що Android Studio 2.2 по суті має «рідну» (без каламбуру) підтримку ланцюжка інструментів NDK через Gradle та CMake. Тепер, коли ви створюєте новий проект, просто виберіть підтримку C ++, і ви готові йти.
Вам все одно потрібно буде генерувати власний код шару JNI або використовувати техніку SWIG, про яку я згадував вище, але ліси C ++ в проекті Android зараз тривіальні.
Зміни у файлі CMakeLists (саме там ви розміщуєте свої вихідні файли C ++) буде обрано програмою Android Studio, і він автоматично повторно складе будь-які пов’язані бібліотеки.