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

Добавьте код C и C++ в свой проект Android, поместив его в каталог cpp в модуле проекта. При сборке проекта этот код компилируется в нативную библиотеку, которую Gradle может упаковать вместе с вашим приложением. Затем ваш код Java или Kotlin может вызывать функции в вашей нативной библиотеке через Java Native Interface (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. В разделе мастера «Выберите проект» выберите тип проекта Native C++ .
  2. Нажмите Далее .
  3. Заполните все остальные поля в следующем разделе мастера.
  4. Нажмите Далее .
  5. В разделе мастера «Настройка поддержки C++» вы можете настроить свой проект с помощью поля «Стандарт C++» .
    • Используйте раскрывающийся список, чтобы выбрать, какую стандартизацию C++ вы хотите использовать. Выбор Toolchain Default использует настройку CMake по умолчанию.
  6. Нажмите «Готово» .

После того, как Android Studio завершит создание нового проекта, откройте панель Project с левой стороны 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 , и помещает его в корневой каталог вашего модуля. Чтобы узнать больше о содержимом этого скрипта сборки, прочитайте Configure CMake .

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

Когда вы нажимаете «Выполнить» запустите, а затем запустите приложение из строки меню , Android Studio создает и запускает приложение, которое отображает текст «Hello from 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 Analyzer :

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

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

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

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

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

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

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

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

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

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

Кодовые лаборатории