Программирование для Android на С/С++? — Хабр Q&A
Склонен считать, что программист, который не переносит тот, или иной язык программирования — пока еще недостаточно программист. Язык — это инструмент. Вообще, приложения на NDK сделать можно, смотрите в строрну NativeActivity — получаете точку входа, а дальше делайте что хотите на C/C++. Но я бы не стал забивать гвозди микроскопом. При разработке на чистом С/C++ для андроид — вам придется сделать весь ЮИ, который уже есть в стандартном SDK, своими руками… Может быть вы сможете сделать лучше, но всегда станет вопрос кому это было нужно?
Ответ написан
Android NDK очень плохо документирован. Надо брать в расчет что процессоры разные (armeabi armeabi-v7a x86) и есть небольшие расхождения (небольшая информация тут). Так же необходимо учесть что нормально писать и компилить NDK лучше на линуксах.
В общем литературы по NDK катастрофически мало, сюрпризов очень много, без java кода максимум можно сделать что то консольное, что в чем то даже удобно.
Мельком глянул сейчас, вроде бы появились фреймворки с нативными UI для NDK, к примеру juce.com.
Ответ написан
Сейчас засыплю цитатами из интернета ))
От привычных мобильных приложений до программного обеспечения высокотехнологичного промышленного оборудования – Qt лежит в основе миллионов устройств и программ, используемых по всему миру.
Язык C++ сохраняет высокий уровень совместимости на разных платформах и устройствах.
Вы можете переносить существующие библиотеки C++ для платформ Android и Windows…
C++Builder — это отмеченный наградами набор инструментов быстрой разработки приложений на C++ для нативной разработки под Windows, Mac и для мобильных устройств, с расширенной поддержкой облаков и IoT.
… ну и т.д…
Ответ написан
Комментировать
Если взять хороший кроссплатформенный фреймворк, то писать на джаве не придется.
Подключение каких-то еще библиотек требует плясок с бубном, но в итоге код с десктопных платформ работает почти без изменений. Даже OpenGL ES из нативного кода работает.
какую посоветуете литературу
Мануала к выбранному фреймворку и гугла должно хватить.
что я получу от использования исключительно С/С++
Прирост в производительности, но это и так понятно.
Размер бинарников больше: Код и все нативные библиотеки компилируется отдельно под разные архитектуры (в моем случае было 4) и собирается в одно приложение.
Ответ написан
Комментировать
Разработка кроссплатформенных мобильных приложений на языке C++
Twitter LinkedIn Facebook Адрес электронной почты
- Статья
- Чтение занимает 4 мин
Вы можете создавать собственные приложения на языке C++ для iOS, Android и Windows устройств, используя кроссплатформенные инструменты, доступные в Visual Studio. Разработка мобильных приложений на языке C++ — это рабочая нагрузка, доступная в программе установки Visual Studio. Она устанавливает пакеты SDK и средства, необходимые для кроссплатформенной разработки общих библиотек и собственных приложений. После ее установки язык C++ можно использовать для создания кода, выполняющегося на устройствах и платформах с iOS и Android, Windows, Windows Store, и Xbox.
Написание кода для различных платформ может часто быть утомительным. Основные языки и средства разработки для iOS, Android и Windows для каждой платформы различны. Однако все платформы поддерживают написание кода на языке C++. Это общий знаменатель, который обеспечивает использование основной части кода на разных платформах. Машинный код, написанный на языке C++, может быть более производительным и устойчивым к реконструированию. Повторное использование кода позволяет сэкономить время и силы при создании приложений для разных платформ.
Использование языка C++ для разработки кроссплатформенных мобильных приложений имеет несколько преимуществ.
Простая установка. Установщик Visual Studio получает и устанавливает средства и пакеты SDK сторонних разработчиков, необходимые для создания приложений или библиотек для Android и iOS. Установка и настройка просты и в основном производятся автоматически.
Эффективная и привычная среда сборки. Шаблоны Visual Studio позволяют легко создавать общие кроссплатформенные решения и проекты. Управлять свойствами для всех проектов можно с помощью единого интерфейса. Редактируйте весь код в редакторе Visual Studio и используйте встроенную кроссплатформенную функцию IntelliSense для автозавершения и выделения ошибок.
Унифицированный процесс отладки. используйте средства отладки мирового класса в Visual Studio для просмотра и пошагового перехода по коду C++ на всех платформах: устройства и эмуляторы Android, симуляторы и устройства iOS, а также Windows или Windows устройства и эмуляторы магазина.
Получить инструменты
Разработка мобильных приложений с помощью C++ — это устанавливаемая рабочая нагрузка, поставляемая с Visual Studio. Сведения о необходимых компонентах и инструкции по установке см. в статье Установка Visual C++ для разработки кроссплатформенных мобильных приложений на языке C++. Для создания кода для iOS также требуются компьютер Mac и учетная запись разработчика Apple iOS. Дополнительные сведения см. в статье Установка и настройка средств для разработки с помощью iOS.
Быстрое начало работы
Если у вас есть опыт разработки для Android или iOS, мы можем предложить вам отличные материалы, которые помогут вам приступить к работе. Visual Studio — это выразительная среда разработки с широкими возможностями. Чтобы научиться использовать ее, попробуйте обратиться к руководству по началу работы для разработчиков решений Android или руководству по началу работы для разработчиков решений iOS. В этих статьях вы получите общие сведения о Visual Studio и ознакомитесь с понятиями, которые нужно знать для разработки кроссплатформенных приложений для Windows и Windows Store. Чтобы приступить к написанию первого кросс-платформенного приложения для iOS и Android, см.
статью Создание приложения OpenGL ES в Android и iOS.Рабочая нагрузка Visual C++ для разработки кроссплатформенных мобильных приложений включает несколько шаблонов, которые помогут вам приступить к созданию приложений:
Нативное приложение (Android)
Создает полнофункциональное приложение C++ OpenGL в форме проекта Android Native Activity.
Приложение OpenGLES (Android, iOS)
Создает решение с набором проектов для приложения Android Native Activity и приложения iOS. Эти приложения используют библиотеки для конкретных платформ, созданные с помощью общего кода C++ OpenGL ES, с целью отрисовки одинакового вращающегося куба.
Общая библиотека (Android, iOS)
Создает решение с проектами, предназначенными для создания файлов динамической библиотеки Android (SO) и статической библиотеки iOS (A) с помощью общего кода C++ в общем проекте.
Простое приложение (Android, Ant)
Создает проект приложения Hello, World для Android, в котором используется только исходный код Java и система сборки Ant.
Простое приложение (Android, Gradle)
Создает проект приложения Hello, World для Android, в котором используется только исходный код Java и система сборки Gradle.
Простая библиотека (Android, Ant)
Создает проект библиотеки Hello, World для Android, в котором используется только исходный код Java и система сборки Ant.
Простая библиотека (Android, Gradle)
Создает проект библиотеки Hello, World для Android, в котором используется только исходный код Java и система сборки Gradle.
Динамическая общая библиотека (Android)
Создает файл динамической библиотеки Android (SO) с помощью кода C++.Приложение OpenGLES 2 (iOS)
Создает решение с набором проектов для сборки приложения iOS OpenGL ES 2. Приложение использует библиотеку кода C++ OpenGL ES для рисования вращающегося куба в приложении iOS. Это приложение может стать хорошей отправной точкой для ознакомления с импортом библиотек C++ в приложение iOS.
Статическая библиотека (Android)
Создает проект для сборки статической библиотеки для Android. Приложение Android может быть связано только с одной динамической библиотекой, но с любым количеством статических библиотек.
Статичная библиотека (iOS)
Создает проект для сборки статической библиотеки для iOS.
Проект Makefile (Android)
Создает оболочку проекта для ваших собственных проектов Android, использующих файл makefile.
Испытайте образец кода
Скачайте образцы, демонстрирующие создание библиотек общего кода, которые можно использовать в приложениях Windows, Android и iOS. См. примеры создания готовых приложений для Android. Чтобы приступить к работе, см. раздел Примеры разработки кроссплатформенных мобильных приложений.
См. также
Установка Visual C++ для разработки кроссплатформенных мобильных приложений на языке C++
Создание приложения Android Native Activity
Создание приложения OpenGL ES в Android и iOS
Примеры разработки кроссплатформенных мобильных приложений
Добавьте код C и C++ в свой проект
Вы можете добавить код C и C++ в свой проект Android, поместив код в каталог cpp в вашем модуле проекта. Когда вы строите свой проект, это код компилируется в нативную библиотеку, которую Gradle может упаковать с вашим приложением. Затем ваш код Java или Kotlin может вызывать функции в вашей родной библиотеке. через собственный интерфейс Java (JNI). Чтобы узнать больше об использовании JNI Framework, прочитайте советы JNI для Андроид.
Android Studio поддерживает CMake, что хорошо для кроссплатформенных проектов, и ndk-build, который может быть быстрее, чем CMake, но только поддерживает Андроид. Использование CMake и ndk-build в одном модуле недопустимо. в настоящее время поддерживается.
Если вы хотите импортировать существующую библиотеку ndk-build в вашу Android Studio проект, научитесь свяжите Gradle с вашим родным проектом библиотеки.
На этой странице показано, как настроить Android Studio с помощью необходимые инструменты сборки, создайте новый проект на C/C++ поддержки и добавляйте в проект новые файлы C/C++.
Если вместо этого вы хотите добавить собственный код в существующий проект, вам необходимо Следуй этим шагам:
- Создайте новые собственные исходные файлы и добавьте их
в ваш проект Android Studio.
- Вы можете пропустить этот шаг, если у вас уже есть нативный код или вы хотите импортировать предварительно созданную нативную библиотеку.
- Настройте CMake для
встройте свой собственный исходный код в библиотеку. Вам также требуется эта сборка
script, если вы импортируете и связываете с готовым или платформой
библиотеки.
- Если у вас есть собственная библиотека, для которой уже
CMakeLists.txt
скрипт сборки или использует ndk-build и включаетAndroid.mk
построить скрипт, вы можете пропустить этот шаг.
- Если у вас есть собственная библиотека, для которой уже
- Настроить Gradle, указав путь к файлу сценария CMake или ndk-build. Gradle использует скрипт сборки для импорта исходного кода в ваш Android Studio и упакуйте свою родную библиотеку (файл SO) в приложение.
После того, как вы настроите свой проект, вы можете получить доступ к своим собственным функциям из Код Java или Kotlin с использованием фреймворка JNI. Чтобы создать и запустить приложение, просто нажмите Выполнить .
Примечание: Если в вашем существующем проекте используется ndkCompile
, вам следует перейти на использование CMake или
ndk-сборка. Чтобы узнать больше, перейдите в раздел о том, как
Миграция с ndkCompile.
Внимание экспериментальных пользователей Gradle: Рассмотрим переход на плагин версии 2.2.0 или выше и использование CMake или ndk-build для создания собственных библиотек, если к вам относится любое из следующих условий: нативный проект уже использует CMake или ndk-build; вы бы предпочли использовать стабильную версия системы сборки Gradle; или вам нужна поддержка дополнительных инструментов, например CCache. В противном случае вы можете продолжать использовать экспериментальная версия Gradle и плагин для Android.
Загрузка NDK и инструментов сборки
Чтобы скомпилировать и отладить собственный код для вашего приложения, вам потребуется следующее составные части:
- Родной комплект для разработки Android (NDK) : набор инструментов, позволяющий использовать код C и C++ с Android, а также предоставляет библиотеки платформ, которые позволяют вам управлять собственными действий и доступа к физическим компонентам устройства, таким как датчики и сенсорные вход.
- CMake : внешний инструмент сборки, который работает вместе с Gradle для создания собственного библиотека. Вам не нужен этот компонент, если вы планируете использовать только ndk-build.
- LLDB : отладчик, который Android Studio использует для отладки машинного кода.
Сведения об установке этих компонентов см. в разделе Установка и настройка NDK, CMake и LLDB.
Создать новый проект с поддержкой C/C++
Создание нового проекта с поддержкой нативного кода аналогично создание любого другого Android Студийный проект, но есть дополнительный шаг:
- В разделе мастера выберите свой проект , выберите Тип проекта Native C++ .
- Щелкните Далее .
- Заполните все остальные поля в следующем разделе мастера.
- Щелкните Далее .
- В разделе мастера Customize C++ Support можно настроить ваш проект с полем C++ Standard . Используйте раскрывающийся список, чтобы выберите, какую стандартизацию C++ вы хотите использовать. Выбор цепочки инструментов По умолчанию использует настройку CMake по умолчанию.
- Нажмите Готово .
После того, как Android Studio завершит создание нового проекта, откройте Панель проекта в левой части IDE и выберите Android вид. Как показано на рисунке 2, Android Studio добавляет cpp группа:
Рисунок 2. группы представлений Android для собственных источников и внешние скрипты сборки.
Примечание: Это представление не отражает фактическую файловую иерархию. на диске, но группирует похожие файлы, чтобы упростить навигацию по вашему проекту.
В группе cpp вы можете найти все родные
исходные файлы, заголовки, сценарии сборки для CMake или ndk-build, а также готовые
библиотеки, которые являются частью вашего проекта. Для новых проектов Android Studio
создает образец исходного файла C++, native-lib.cpp
, и помещает его
в src/main/cpp/
вашего модуля приложения. Этот образец
код предоставляет простую функцию C++, stringFromJNI()
, которая
возвращает строку «Привет с C++». Вы можете узнать, как добавить дополнительные
исходные файлы в ваш проект в разделе о том, как
Создайте новые собственные исходные файлы.
Подобно тому, как файлы build.gradle
сообщают Gradle, как собрать
app, CMake и ndk-build требуют скрипта сборки, чтобы знать, как собрать
родная библиотека. Для новых проектов Android Studio создает скрипт сборки CMake, CMakeLists.txt
и помещает его в корневой каталог вашего модуля.
Чтобы узнать больше о содержимом этого скрипта сборки, прочитайте
Настройте CMake.
Сборка и запуск примера приложения
Когда вы нажимаете Run , Android Studio создает и запускает приложение, которое отображает текст «Привет с C++» на вашем Android-устройство или эмулятор. В следующем обзоре описаны события, которые происходят для сборки и запуска примера приложения:
- Gradle вызывает ваш внешний скрипт сборки,
CMakeLists.txt
. - CMake выполняет команды в сценарии сборки для компиляции исходного кода C++.
файл
native-lib.cpp
в общую библиотеку объектов и имена этоlibnative-lib.so
, который Gradle затем упаковывает в приложение. - Во время выполнения приложение
MainActivity
загружает собственный библиотека с использованиемSystem.loadLibrary()
. Родная функция библиотеки,stringFromJNI()
, теперь доступно для приложения. -
MainActivity.onCreate()
вызововstringFromJNI()
, который возвращает «Hello from C++» и использует его для обновленияTextView
.
Примечание: Мгновенно Run не совместим с компонентами вашего проекта, написанными на родном языке. код.
Если вы хотите убедиться, что Gradle упаковывает нативную библиотеку в приложение, вам можно использовать анализатор APK:
- Выберите Build > Build Bundle(s) / APK(s) > Build APK(s)
- Выберите «Сборка » > «Анализ APK ».
- Выберите APK или AAB из каталога
app/build/outputs/
. и нажмите OK . - Как показано на рисунке 3, вы можете увидеть
libnative-lib.so
в Окно APK Analyzer подlib/
./ Рисунок 3. Поиск собственной библиотеки с помощью APK Анализатор.
Совет: Если вы хотите поэкспериментировать с другими приложениями Android, использовать нативный код, нажмите Файл > Создать > Импорт образца и выберите образец проекта из списка Ndk .
Создание новых исходных файлов C/C++
Чтобы добавить новые исходные файлы C/C++ в существующий проект, выполните следующие действия:
- Если у вас еще нет каталога
cpp/
в основном источнике набор вашего приложения, создайте его следующим образом: - Откройте панель Project с левой стороны IDE и выберите проект вид из выпадающего меню.
- Перейдите к your-module > src , щелкните правой кнопкой мыши в главном каталоге и выберите New > Справочник .
- Введите
cpp
в качестве имени каталога и нажмите ОК . - Щелкните правой кнопкой мыши каталог
cpp/
и выберите New > Исходный файл C/C++ . - Введите имя исходного файла, например
родная библиотека
. - В раскрывающемся меню введите выберите расширение файла
для исходного файла, например
.cpp
.- В раскрывающееся меню можно добавить файлы других типов, например
.cxx
или.hxx
, нажав Изменить типы файлов . В появившемся диалоговом окне C/C++ введите выберите другое расширение файла из исходного расширения и Расширение заголовка раскрывающихся меню и нажмите ОК .
- В раскрывающееся меню можно добавить файлы других типов, например
- Если вы также хотите создать заголовочный файл, установите флажок Создать связанный заголовок флажок.
- Щелкните OK .
После добавления в проект новых файлов C/C++ вам все равно необходимо настройте CMake, чтобы включить их в ваша родная библиотека.
Дополнительные ресурсы
Чтобы узнать больше о поддержке кода C/C++ в вашем приложении, попробуйте следующее ресурс.
Codelabs
- Создайте Hello-CMake с помощью Android Studio, лаборатория кода, которая показывает, как использовать шаблон Android Studio CMake для запуска Разработка проекта Android NDK
Могу ли я программировать Android на C++, C?
спросил
Изменено 1 год, 11 месяцев назад
Просмотрено 116 тысяч раз
57
Новинка! Сохраняйте вопросы или ответы и организуйте свой любимый контент.
Узнать больше.
Могу ли я программировать Android на C++, C? Если ответ «да», то подскажите как? И какова процедура настройки?
Не знаю Obj-C, Java, но хорошо разбираюсь в C, C++, Flash AS3, SDK от Google.
Пожалуйста, не говорите о NVDIA SDK, он не полностью разработан 🙂
- c++
- android
ОБРАТИТЕ ВНИМАНИЕ: ОТВЕТ НИЖЕ УЖАСНО УСТАРЕЛ И МОЖЕТ БЫТЬ НЕ ПОЛНОСТЬЮ ПРАВИЛЬНЫМ.
Вы можете программировать на C/C++ с помощью Android NDK. Вам нужно будет обернуть свою кодовую базу С++ в статическую библиотеку и загрузить ее через оболочку Java и JNI.
Стандартный NDK не поддерживает RTTI, а также недоступны многие функции стандартного C++, такие как std::string и т. д. Чтобы решить эту проблему, вы можете перекомпилировать NDK. Дмитрий Москальчук предоставляет модифицированную версию NDK, поддерживающую это, по адресу http://www.crystax.net/android/ndk-r3.php. Эта модифицированная версия работает на всех телефонах Android, работающих на процессоре ARM.
В зависимости от типа приложения вы должны решить использовать Java или C/C++. Я бы использовал C/C++ для всего, что требует вычислительной мощности выше среднего и игр — Java для всего остального.
Просто выберите один язык и напишите большую часть своего приложения на этом языке; Вызовы JNI могут значительно снизить производительность. Однако Java не так уж сложна — если вы знаете, как программировать на C/C++. Преимущество Java в том, что приложение может работать на любом устройстве под управлением Android, тогда как приложения NDK зависят от архитектуры, для которой они были скомпилированы.
1
Вы должны использовать Android NDK для разработки важных для производительности частей ваших приложений в собственном коде. См. Android NDK.
В любом случае, я не думаю, что это правильный способ разработки всего приложения.
Да, вы можете программировать приложения Android на C++ (по большей части), используя Native Development Kit (NDK), хотя Java является основным/предпочтительным языком для программирования Android, и ваш код C++, скорее всего, должен будет взаимодействовать с Java компоненты, и вам, вероятно, также потребуется прочитать и понять документацию по компонентам Java. Поэтому я бы посоветовал вам использовать Java, если только у вас нет существующей кодовой базы C++, которую необходимо портировать и которую нецелесообразно переписывать на Java.
Java очень похож на C++, я не думаю, что у вас возникнут проблемы с его освоением… переход от C++ к Java невероятно прост; перейти с Java на C++ немного сложнее, хотя и не страшно. Java для программистов на C++ довольно хорошо объясняет различия. Написание кода Android на Java будет более идиоматичным, а также облегчит вам процесс разработки (поскольку инструментарий для Java Android SDK значительно лучше, чем соответствующий инструментарий NDK)
Что касается настройки, Google предоставляет Android Studio IDE для разработки как Java, так и C++ для Android (с Gradle в качестве системы сборки), но вы можете использовать любую IDE или систему сборки по своему усмотрению, если под капотом вы используете Android SDK/NDK для получения окончательных результатов.
8
Вам также следует обратить внимание на MoSync, MoSync предоставляет стандартные C/C++, простые в использовании хорошо документированные API и полнофункциональную IDE на основе Eclipse. Теперь это IDE с открытым исходным кодом, все еще довольно крутая, но больше не поддерживаемая.
0
Вы также можете взглянуть на C++ Builder XE6, а XE7 поддерживает Android в коде C++ и с библиотекой Firemonkey.
http://www.embarcadero.com/products/cbuilder
Довольно простой способ начать работу и собственный код. Но бинарники имеют большой размер.
0
Вы можете использовать Android NDK, но в ответах следует учитывать, что приложение Android NDK не является бесплатным для использования, и нет четкого пути к программированию Android 9 с открытым исходным кодом.0054 на Android на рынке, который все больше ориентируется на Android, который начинался как открытый исходный код, с поддержкой разработчиков Android или обширным приложением NDK, а это означает, что вы рассматриваете отказ от Android как любой платформы для программирования первых шагов без платежей.