Писать приложения на C или C++ для Android? [закрытый]

Я пытаюсь разработать / перенести игру на Android, но она находится в C, и Android поддерживает Java, но я уверен, что должен быть способ получить приложение C там, кто-нибудь знает хороший учебник по этому вопросу?

спасибо!

20 ответов


для тех, кто приходит к этому через Google, обратите внимание, что начиная с SDK 1.6 Android теперь имеет официальный родной SDK.

вы можете скачать Android NDK (Native Development Kit) отсюда: https://developer.android.com/ndk/downloads/index.html

также есть сообщение в блоге о NDK:
http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html


на Android NDK - это набор инструментов, который позволяет реализовать части приложения в машинный код, используя такие языки, как C и C++. Для некоторых типов приложений, это может помочь вам повторно использовать код библиотек, написанных на этих языках.

для получения дополнительной информации о том, как начать работу с родной разработки, следуйте этой ссылке.

примеры приложений можно найти здесь.


обычно вы должны:

  1. установить Google Android NDK. Он содержит библиотеки, заголовки, makfile примеры и gcc toolchain
  2. создать исполняемый файл из кода C для ARM, оптимизировать и связать его с при необходимости предоставляются библиотеки
  3. подключиться к телефону с помощью интерфейс adb и протестируйте исполняемый

Если вы хотите продавать приложения:

  1. создайте библиотеку из вашего кода C
  2. создать простой код Java, который будет используйте эту библиотеку
  3. добавьте эту библиотеку в приложение файл пакета

Google выпустила собственный комплект разработки (NDK) (согласно http://www.youtube.com/watch?v=Z5whfaLH1-E в 00: 07:30).

надеюсь, информация будет обновлена на странице Google groups (http://groups.google.com/group/android-ndk), как говорится, он еще не выпущен.

Я не уверен, где получить простую загрузку для него, но я слышал, что вы можете получить копию NDK из репозитория Git Google под пончиком отделение.


официальная позиция Кажется что это не то, что ты "хочешь". См.этой теме в списке разработчиков Android. В Google предполагают Андроид работает на множестве различных устройств (процессоров, дисплеев и т. д.). Поэтому лучший способ включить разработку-использовать (переносимый) управляемый код, предназначенный для виртуальной машины Dalvik. По этой причине Android SDK не поддерживает C/C++.

но взгляните на этот страница:

Android включает в себя набор C / C++ библиотеки, используемые различными компонентами системы Android. Эти возможности для разработчиков через приложение для Android рамки.

платформа управляемых приложений, по-видимому, находится поверх этих библиотек. Далее на странице перечислены библиотеки C/C++: стандартная библиотека C, media, 3D, SQL lite и другие.

поэтому все, что вам нужно-это цепь компилятора скомпилирует C / C++ в соответствующий процессор (ARM, в случае G1). Краткие инструкции о том, как это сделать здесь.

чего я не знаю, так это где найти описания API, которые предоставляют эти библиотеки. Я бы предположил, что где-то в SDK могут быть файлы заголовков, но документация может быть отрывочной/отсутствующей. Но я думаю, это можно сделать!

надеюсь, что это полезно. Для записи, я не написал никаких родных приложений для android - всего несколько простых удалось из них.

Энди


можно использовать nestedvm чтобы перевести C (или другие языки GCC) в байт-код Java и использовать его в качестве основы вашего порта. Например, см. Android порт Simon Tathams portable puzzle collection.

Я ожидаю, что этот метод устарел NDK, но его может не быть, если некоторые сети или что-то не позволяют людям обновлять свои телефоны.


Google уже запустила Google I / O 2011: приведение C и C++ игры для Android сессия, которая доступна по адресу http://www.youtube.com/watch?v=5yorhsSPFG4

что хорошо понять использование NDK для написания приложения на c и C++ для android.

Если вы просто хотите скомпилировать любую консольную нативную игру и запустить их на android, то в этой статье показал 3 метода для тот же.

1: статическая компиляция с использованием автономной toolchain

2: перекрестная компиляция с помощью toolchain Android NDK

3: перекрестная компиляция с использованием исходного кода AOSP


может быть, вы ищете это?

http://www.mosync.com/

Это средний уровень для разработки для нескольких мобильных платформ с использованием c++.


глядя на это кажется, возможно:

" тот факт, что поддерживается только язык Java, не означает, что вы не можете разрабатывать приложения на других языках. Это доказали многие разработчики, хакеры и эксперты в области разработки приложений для мобильных устройств. Парень в Elements Interactive B. V., компании, стоящей за библиотекой Edgelib, удалось запустить собственные приложения на C++ на платформе Android, даже в это время все еще много проблем на дисплее и звуке ... и т. д. Это включает в себя игру S-Tris2 и 3D-анимацию демо Edgelib."


с 2009 года есть развитие по этому вопросу.
Necessitas - Qt (C++ framework) для Android
Начало работы видео.


посмотри google NDK group это выглядит многообещающим, первая версия NDK будет доступна в 1H2009.

обновление: И он выпущен http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html


Я не уверен, что NDK обеспечивает полный охват официального API Java.

от http://developer.android.com/sdk/ndk/index.html#overview:

обратите внимание, что NDK не позволяет разрабатывать только native-only приложения. Первичная андроида среда выполнения остается виртуальной Dalvik машина.


Google только что выпустил NDK, который позволяет именно это.

http://feedproxy.google.com/~r/blogspot/hsDu/~3/2foWz7hwFtE/introducing-android-15-ndk-release-1.html

его можно найти здесь: http://developer.android.com/sdk/ndk/1.5_r1/index.html


вы можете скачать c4droid, а затем установить плагин GCC и установить на свой SD. Из оболочки я просто перехожу в каталог, где находится двоичный файл GCC, а затем вызываю его, чтобы сделать исполняемый файл на борту.

найти / -имя gcc

/ mnt / sdcard / Android / data / com.n0n3m4.droidc/файлы/ССЗ/ОГРН/АРМ-ОС Linux-androideabi-GCC и

cat > тест.c

#include<stdio.h>
int main(){ 
 printf("hello arm!\n");
return 0;
}

./ arm-linux-androideabi-GCC test.c-o тест

./ тест

привет arm!


этот блог может быть хорошим началом: http://benno.id.au/blog/2007/11/13/android-native-apps К сожалению, многие важные вещи "оставлены как упражнение для читателя".


Я не знаю учебник, но хороший инструмент разработки: AirPlay SDK от Ideaworks Labs. (Недавно ребрендинг"мармелад") С помощью C / C++ вы можете создавать приложения для Windows Mobile, iPhones, Android. Единственным компонентом, который мне не понравился, был GUI composer-багги, но вы всегда можете заменить его блокнотом.



собственные файлы C / C++ libstdc++.* из вашего Ubuntu являются x86 (или x86_64) двоичные файлы, но Android устройства и эмуляторы ARM. Конечно, это все равно не сработает, даже если вы установите правильный soname. Это очень наивный путь, который ведет в никуда. Android имеет очень ограниченную поддержку C++, то есть нет исключений, стандартная библиотека C++ (включая STL) и RTTI. Если вам нужна такая функциональность, используйте мой пользовательский дистрибутив NDK из

http://crystax.net/android/ndk.php - он поддерживает полные функции C++, перечисленные выше.

почему есть ошибка: неопределенная ссылка на ошибку ссылки "__cxa_end_cleanup". Android stlport

времени. Потому что нет ссылки на libstdc + +. А. Так неправильно.

поскольку он использует некоторую статическую библиотеку, необходимо связать полный libstdc + +. А. Может

http://crystax.net/android/ndk.php для загрузки пакет

источники \ схх-стл \ гну-с libstdc + + \ либы \ норм каталог.

Android самостоятельно libstdc + + поддержка ограничена, она должна быть связана с полным libstdc + +. Работа.

Добавить файл в Android.МК LOCAL_LDFLAGS = $ (LOCAL_PATH) / libs / libcurl.a \

 $ (LOCAL_PATH) / libs / liblua.a \
 `$ (LOCAL_PATH) / libs / libstdc + +. A`  

и LOCAL_CPPFLAGS + =-lstdc + +-fexceptions может быть скомпилирован


существует план разрешить библиотеки C / C++ в следующей версии SDK Android (кодовое имя Eclair?)На сегодняшний день это невозможно через Android Java SDK. Однако вы можете захватить огромный проект с открытым исходным кодом, свернуть свои собственные библиотеки, а затем прошить свое собственное устройство...но любой, кто хочет использовать вашу библиотеку, должен будет также прошить вашу пользовательскую сборку.


короткий ответ: Вы не можете.

@Backslash17: просматривая статью и следующую ссылку с инструкциями по установке, все, что компания получила, это запустить самокомпилируемый исполняемый файл на эмуляторе, минуя Android framework. Как только у вас есть эмулятор, вы можете telnet и иметь оболочку linux. Запуск программы linux там, конечно, тривиален. Но это не работает для телефонов без джейлбрейка (он же root access) и не доставляется на рынок.

Если Google не откроет другие возможности или кто-то не напишет пользовательский компилятор, который компилирует язык X в байт-код Dalvik (Dalvik-это виртуальная машина, которая запускает программы Android), вы не сможете написать собственный код.