it-swarm.com.ru

Писать приложения на C или C ++ для Android?

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

Спасибо!

280
Robert Gould

Для тех, кто придет к этому через 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

241
Andy Johnson

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

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

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

40
MannyNS

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

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

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

  1. Создайте библиотеку из вашего кода C
  2. Создайте простой Java код, который будет использовать эту библиотеку
  3. Вставить эту библиотеку в файл пакета приложения
  4. Протестируйте свое приложение
  5. Продать или распространить бесплатно
18
psihodelia

Google выпустил Native Development Kit (NDK) (в соответствии с http://www.youtube.com/watch?v=Z5whfaLH1-E в 00:07:30).

Надеемся, что информация будет обновлена ​​на странице групп Google ( http://groups.google.com/group/Android-ndk ), так как в ней говорится, что она еще не опубликована.

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

14
Marc

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

НО, посмотрите на эта страница :

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

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

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

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

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

Энди

12
Andy Johnson

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

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

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

1: Статическая компиляция с использованием автономного набора инструментов

2. Кросс-компиляция с использованием Android набора инструментов NDK

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

8
Jeegar Patel

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

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

8
rjmunro

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

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

7
backslash17

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

http://www.mosync.com/

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

7
joepal

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

6
zkunov

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

От http://developer.Android.com/sdk/ndk/index.html#overview :

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

5
Android Eve

Взгляните на группа Google ndk это выглядит многообещающе, первая версия NDK будет доступна в 1П2009.

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

5
Gordon Freeman

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

3
Alexander Stolz

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

найти/-имя gcc

/mnt/sdcard/Android/data/com.n0n3m4.droidc/files/gcc/bin/arm-linux-androideabi-gcc

кошка> test.c

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

./arm-linux-androideabi-gcc test.c -o test

./тестовое задание

привет рука!

3
elahtrebor

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

2
Krzysiek Goj

Собственные файлы C/c ++ libstdc ++. * Из вашего Ubuntu являются двоичными файлами x86 (или x86_64), но Android устройства и эмуляторы являются ARM. Конечно, это не сработает в любом случае, даже если вы установите правильное имя сына. Это очень наивный путь, который никуда не ведет. 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 здесь, чтобы загрузить пакет

исходники\cxx-stl\gnu-libstdc + +\libs\armeabi каталог.

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

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

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

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

2
ZhangXuelian
2
YumYumYum

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

2
zergius

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

1
haseman