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

276

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

Спасибо!

  • 0
    только если у вас джейлбрейк телефона AFAIK.
  • 62
    Разве это не джейлбрейк для айфонов?
Показать ещё 9 комментариев
Теги:

20 ответов

222
Лучший ответ

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

  • 5
    Хорошо, теперь как насчет C # и .Net? -)
  • 4
    Не вижу поддержки .net
Показать ещё 5 комментариев
40

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

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

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

  • 1
    или 2009, 2010, 2011, 2012 или 2013
17

Обычно вам необходимо:

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

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

  • Создайте библиотеку из вашего кода на языке C
  • Создайте простой Java-код, который будет используйте эту библиотеку
  • Вставить эту библиотеку в приложение пакетный файл
  • Проверьте свое приложение.
  • Продать или бесплатно распространять его
  • 0
    Я новичок в 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 работает на различных устройствах (процессорах, дисплеях и т.д.). Поэтому лучший способ включить разработку - использовать (переносимый) управляемый код, который нацелен на VM Dalvik. По этой причине Android SDK не поддерживает C/С++.

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

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

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

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

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

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

Andy

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

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

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

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

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

2: кросс-компиляция с помощью инструментальной привязки Android NDKs

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

8

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

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

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

Возможно, вы ищете это?

http://www.mosync.com/

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

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

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

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

6

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

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

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

Из http://developer.android.com/sdk/ndk/index.html#overview:

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

5

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

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

3

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

find/-name gcc

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

cat > test.c

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

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

./тест

привет руку!

3

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

2
2

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

2

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

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

Почему существует ошибка: undefined ссылка на ошибку "__cxa_end_cleanup". Android stlport

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

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

http://crystax.net/android/ndk.php здесь, чтобы загрузить пакет

sources\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

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

1

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

-8

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

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

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

  • 0
    Правильно, поэтому я написал "Кажется ...". Смотрите, чтобы верить!
Сообщество Overcoder
Наверх
Меню