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

286

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

Роберт Гулд
источник
только если у вас джейлбрейк телефона AFAIK.
Cogsy
64
Разве это не джейлбрейк для айфонов?
Роберт Гулд
1
G1 по умолчанию не разрешает root-доступ, и существует множество ограничений в отношении того, что может быть выполнено вне среды «Android». У меня не было бы большой надежды найти способ выполнить собственный код из Android.
Cogsy
2
но я скачал DOOM для Android с торговой площадки. Так что это должно быть выполнимо
Роберт Гулд
4
DOOM для Android написан на Java code.google.com/p/doom-for-android/source/browse/#svn/trunk
Марко

Ответы:

247

Для тех, кто приходит к этому через 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/introduction-android-15-ndk-release-1.html

Энди Джонсон
источник
5
Хорошо, теперь как насчет C # и .Net? -)
Avi
4
Никогда
16
@Avi mono-android.net
Томас Андрл,
2
Пожалуйста, обратитесь по этой ссылке androidsnippets.wordpress.com/2012/08/30/…
KK_07k11A0585
2
для кода .net / c # и Android проверьте xamarin
bbqchickenrobot
41

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

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

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

MannyNS
источник
1
или 2009, 2010, 2011, 2012 или 2013
Кристофер Берман
19

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

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

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

  1. Создайте библиотеку из вашего кода C
  2. Создайте простой Java-код, который будет использовать эту библиотеку
  3. Вставить эту библиотеку в файл пакета приложения
  4. Протестируйте свое приложение
  5. Продать или распространить бесплатно
psihodelia
источник
Я новичок в NDK и хочу запустить C lan в Android. У вас есть ссылка?
Параг Чаухан
14

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 в разделе пончиков.

Марк
источник
12

Официальная позиция , по-видимому, такова, что вы никогда не захотите этого делать. Смотрите эту ветку в списке разработчиков 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 - только несколько простых управляемых.

Энди

Энди Джонсон
источник
4
Downvoting. NDK теперь является официальным компилятором нативного кода Android. Делая этот ответ устаревшим.
unixman83
8

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

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

rjmunro
источник
1
+1 за альтернативу NDK, хотя NDK делает его устаревшим.
Тобсен
Разве nestedvm не совместим с большим количеством устройств?
чаро
8

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

Джигар Патель
источник
7

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

http://www.mosync.com/

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

joepal
источник
2
ссылка 404 не найдена. Всегда полезно вставить в ответ какой-либо контент из оригинального поста, если владелец сайта выигрывает в лотерею, разводится со своей женой и переезжает на Багамские острова.
Zuzlx
7

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

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

backslash17
источник
6

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

zkunov
источник
Хорошая точка зрения. В качестве дополнительной информации Necessitas использует Android NDK.
Хайме Иван Сервантес
5

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

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

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

Android Eve
источник
2

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

zergius
источник
2

Вы можете скачать 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

./тест

привет рука!

elahtrebor
источник
2

Собственные файлы 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может быть скомпилировано

ZhangXuelian
источник
1

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

haseman
источник
-7

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

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

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

попойка
источник
Правильно, поэтому я написал "Кажется ...". Смотрите, чтобы верить!
backslash17