Добавьте код C и C++ в свой проект

Добавьте код C и C++ в свой проект Android, поместив его в каталог cpp в модуле проекта. Когда вы создаете проект, этот код компилируется в собственную библиотеку, которую Gradle может упаковать вместе с вашим приложением. Затем ваш код Java или Kotlin может вызывать функции в вашей собственной библиотеке через собственный интерфейс Java (JNI). Чтобы узнать больше об использовании платформы JNI, прочтите советы по JNI для Android .

Android Studio поддерживает CMake, что полезно для кроссплатформенных проектов. Android Studio также поддерживает ndk-build , который может быть быстрее, чем CMake, но поддерживает только Android. Использование CMake и ndk-build в одном модуле в настоящее время не поддерживается.

Чтобы импортировать существующую библиотеку ndk-build в проект Android Studio, узнайте, как связать Gradle с проектом собственной библиотеки .

На этой странице показано, как настроить Android Studio с необходимыми инструментами сборки, создать новый проект с поддержкой C/C++ и добавить в проект новые файлы C/C++ .

Если вместо этого вы хотите добавить собственный код в существующий проект, выполните следующие действия:

  1. Создайте новые исходные файлы и добавьте их в свой проект Android Studio.
    • Пропустите этот шаг, если у вас уже есть собственный код или вы хотите импортировать готовую собственную библиотеку.
  2. Настройте CMake для сборки собственного исходного кода в библиотеке. Этот сценарий сборки необходим, если вы импортируете и связываете готовые библиотеки или библиотеки платформы.
    • Если у вас есть собственная библиотека, в которой уже есть сценарий сборки CMakeLists.txt или которая использует ndk-build и включает сценарий сборки Android.mk , пропустите этот шаг.
  3. Настройте Gradle , указав путь к файлу сценария CMake или ndk-build . Gradle использует сценарий сборки для импорта исходного кода в проект Android Studio и упаковки вашей собственной библиотеки в приложение.

После настройки проекта получите доступ к собственным функциям из кода Java или Kotlin с помощью платформы JNI . Чтобы создать и запустить приложение, нажмите «Выполнить». запустить, затем запустить приложение из строки меню .

Примечание. Если в существующем проекте используется устаревший инструмент ndkCompile , перейдите на использование CMake или ndk-build .

Загрузите NDK и инструменты сборки.

Для компиляции и отладки машинного кода вашего приложения вам потребуются следующие компоненты:

  • Android Native Development Kit (NDK) : набор инструментов, который позволяет использовать код C и C++ с Android. NDK предоставляет библиотеки платформы, которые позволяют вам управлять собственными действиями и получать доступ к физическим компонентам устройства, таким как датчики и сенсорный ввод.
  • CMake : внешний инструмент сборки, который работает вместе с Gradle для создания вашей собственной библиотеки. Этот компонент вам не нужен, если вы планируете использовать только ndk-build .
  • LLDB : отладчик в Android Studio, который отлаживает собственный код .

Сведения об установке этих компонентов см. в разделе Установка и настройка NDK и CMake .

Создайте новый проект с поддержкой C/C++.

Чтобы создать новый проект с поддержкой нативного кода, процесс аналогичен созданию любого другого проекта Android Studio , но с дополнительным шагом:

  1. В разделе мастера « Выберите проект » выберите тип проекта «Собственный C++» .
  2. Нажмите Далее .
  3. Заполните все остальные поля в следующем разделе мастера.
  4. Нажмите Далее .
  5. В разделе мастера «Настройка поддержки C++» вы можете настроить свой проект с помощью поля «Стандарт C++» .
    • Используйте раскрывающийся список, чтобы выбрать стандартизацию C++, которую вы хотите использовать. При выборе Toolchain Default используются настройки CMake по умолчанию.
  6. Нажмите «Готово» .

После того, как Android Studio завершит создание нового проекта, откройте панель «Проект» в левой части IDE и выберите представление Android в меню. Как показано на рисунке 1, Android Studio добавляет группу cpp :

Рисунок 1. Группы представлений Android для ваших собственных источников и внешних сценариев сборки.

Примечание. Это представление не отражает фактическую иерархию файлов на диске, а группирует похожие файлы для упрощения навигации по проекту.

В группе cpp вы можете найти все собственные исходные файлы, заголовки, сценарии сборки для CMake или ndk-build , а также готовые библиотеки, которые являются частью вашего проекта. Для новых проектов Android Studio создает образец исходного файла C++, native-lib.cpp , и помещает его в каталог src/main/cpp/ вашего модуля приложения. В этом примере кода представлена ​​простая функция C++ stringFromJNI() , которая возвращает строку "Hello from C++" . Узнайте, как добавить в проект дополнительные исходные файлы, в разделе о том, как создавать новые собственные исходные файлы .

Подобно тому, как файлы build.gradle инструктируют Gradle, как создавать ваше приложение, CMake и ndk-build требуют сценария сборки, чтобы знать, как собрать собственную библиотеку. Для новых проектов Android Studio создает сценарий сборки CMake, CMakeLists.txt , и помещает его в корневой каталог вашего модуля. Чтобы узнать больше о содержимом этого сценария сборки, прочтите статью Настройка CMake .

Создайте и запустите пример приложения.

Когда вы нажимаете «Выполнить» запустить, затем запустить приложение из строки меню Android Studio создает и запускает приложение, которое отображает текст «Привет из C++» на вашем устройстве Android или в эмуляторе. В следующем обзоре описаны события, которые происходят при сборке и запуске примера приложения:

  1. Gradle вызывает ваш внешний скрипт сборки CMakeLists.txt .
  2. CMake следует командам сценария сборки для компиляции исходного файла C++, native-lib.cpp , в общую библиотеку объектов и называет его libnative-lib.so . Затем Gradle упаковывает его в приложение.
  3. Во время выполнения MainActivity приложения загружает собственную библиотеку с помощью System.loadLibrary() . Собственная функция библиотеки stringFromJNI() теперь доступна приложению.
  4. MainActivity.onCreate() вызывает stringFromJNI() , который возвращает "Hello from C++" и использует его для обновления TextView .

Чтобы убедиться, что Gradle упаковывает собственную библиотеку в приложение, используйте анализатор APK :

  1. Выберите Сборка > Сборка пакетов / APK > Сборка APK .
  2. Выберите «Сборка» > «Анализ APK» .
  3. Выберите APK или AAB в каталоге app/build/outputs/ и нажмите «ОК» .
  4. Как показано на рисунке 2, вы можете увидеть libnative-lib.so в окне анализатора APK в разделе lib/<ABI>/ .

    Рисунок 2. Найдите собственную библиотеку с помощью анализатора APK.

Совет: Если вы хотите поэкспериментировать с другими приложениями Android, использующими собственный код, нажмите «Файл» > «Создать» > «Импортировать образец» и выберите образец проекта из списка Ndk .

Создайте новые исходные файлы C/C++.

Чтобы добавить новые исходные файлы C/C++ в существующий проект, выполните следующие действия:

  1. Если у вас еще нет каталога cpp/ в основном исходном наборе вашего приложения, создайте его следующим образом:
    1. Откройте панель «Проект» в левой части IDE и выберите представление «Проект» в меню.
    2. Перейдите к your-module > src .
    3. Щелкните правой кнопкой мыши основной каталог и выберите «Создать» > «Каталог» .
    4. Введите cpp в качестве имени каталога и нажмите «ОК» .

  2. Щелкните правой кнопкой мыши каталог cpp/ и выберите «Создать» > «Исходный файл C/C++» .
  3. Введите имя исходного файла, например native-lib .
  4. В меню «Тип » выберите расширение исходного файла, например .cpp .
    • Нажмите «Редактировать типы файлов». чтобы добавить в меню другие типы файлов, например .cxx или .hxx . В появившемся диалоговом окне «Новые расширения файлов» выберите другое расширение файла в меню «Расширение источника» и «Расширение заголовка» и нажмите «ОК» .
  5. Чтобы создать файл заголовка, установите флажок Создать связанный заголовок .
  6. Нажмите ОК .

После добавления в проект новых файлов C/C++ вам все равно необходимо настроить CMake для включения файлов в вашу собственную библиотеку.

Дополнительные ресурсы

Чтобы узнать больше о поддержке кода C/C++ в вашем приложении, попробуйте следующий ресурс.

Кодлабы