Писати програми на C або C ++ для Android? [зачинено]


286

Я намагаюся розробити / перенести гру на Android, але це на C, а Android підтримує Java, але я впевнений, що там повинен бути спосіб запустити додаток С, хтось знає про спосіб цього досягти?


лише у випадку, якщо ви втечете з тюремного телефону AFAIK.
Cogsy

64
Чи не джейлбрейкінг для iPhone?
Роберт Гулд

1
G1 не дозволяє користуватися кореневим доступом за замовчуванням, і існує чимало обмежень щодо того, що можна виконати поза середовищем "Android". Я б не сподівався на те, щоб знайти спосіб виконання власного коду в Android.
Cogsy

2
але я завантажив DOOM для Android з ринку. Тож це повинно бути виконано
Роберт Гулд

Відповіді:


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/introducing-android-15-ndk-release-1.html


5
Гаразд, тепер як щодо C # і .Net? -)
Avi

4
Не вдається побачити підтримку .net, яка колись трапляється
vickirk


2
Будь ласка , зверніться до цим посиланням androidsnippets.wordpress.com/2012/08/30 / ...
KK_07k11A0585

2
для .net / c # код та android check out xamarin
bbqchickenrobot

41

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

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

Зразки програм можна знайти тут .


1
або 2009, 2010, 2011, 2012 або 2013
Крістофер Берман

19

Зазвичай ви повинні:

  1. Встановіть Google Android NDK. Він містить libs, заголовки, приклади makfile та інструменти gcc
  2. Створіть виконуваний файл зі свого коду С для ARM, оптимізуйте і при необхідності зв’яжіть його з наданими libs
  3. Підключіться до телефону за допомогою наданого інтерфейсу adb та протестуйте свій виконуваний файл

Якщо ви хочете продати додаток:

  1. Створіть бібліотеку зі свого коду С
  2. Створіть простий код Java, який буде використовувати цю бібліотеку
  3. Вставити цю бібліотеку у файл пакету програми
  4. Перевірте свою програму
  5. Продайте або роздайте безкоштовно

я новий у 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 з сховища Git Google під філією пончика.


12

Офіційна позиція здається, що це не те, що ви коли-небудь "хотіли б зробити". Дивіться цю тему у списку розробників Android. Google пропонує Android працювати на різних пристроях (процесорах, дисплеях тощо). Оптимальним способом активізації розробки є використання (портативного) керованого коду, орієнтованого на програму VM Dalvik. З цієї причини Android SDK не підтримує C / C ++.

АЛЕ, погляньте на цю сторінку :

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

Схоже, що керована програма додатків є багатошаровою поверх цих бібліотек. На цій сторінці можна переглянути список C / C ++ вкладок: стандартна бібліотека C, медіа, 3D, SQL lite та інші.

Тому все, що вам потрібно, - це ланцюг компілятора, який буде компілювати C / C ++ у відповідний процесор (ARM, у випадку G1). Деякі короткі інструкції, як це зробити, тут .

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

Сподіваюся, що це корисно. Для запису я не написав жодних власних програм для Android - лише кілька простих керованих.

Енді


4
Нахил NDK зараз є офіційним компілятором для нативного коду Android. Зробити цю відповідь застарілою.
unixman83

8

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

Я вважаю, що цей метод застарілий NDK, але він може не бути, якщо деякі мережі або щось не дозволяють людям оновити свої телефони.


1
+1 для альтернативи 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 ++.


2
посилання 404 не знайдено. Завжди корисно вписати у відповідь якийсь вміст з оригінальної публікації, якщо власник сайту виграє в лотерею, розлучиться з дружиною та переїде на Багами.
Zuzlx

7

Дивлячись на це, здається, що можливо:

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




5

Я не впевнений, що NDK забезпечує повне покриття офіційного Java API.

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

Зауважте, що NDK не дає змоги розробляти програми лише для рідних. Основним режимом роботи Android залишається віртуальна машина Dalvik.




2

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


2

Ви можете завантажити c4droid, а потім встановити плагін GCC та встановити на свій SD. З оболонки я просто переходжу до каталогу, де є двійковий файл GCC, а потім викликаю його, щоб зробити бортовий виконуваний файл.

find / -name gcc

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

кіт> тест.с

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

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

./тест

привіт рука!



2

Native C / c ++ Files 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 + +. A. Може

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можуть бути складені


1

Існує план дозволити бібліотеки C / C ++ у наступній версії SDK Android (Codename Eclair?) На сьогоднішній день через Android Java SDK неможливо. Однак ви можете захопити ВЕЛИЧЕЗНИЙ проект з відкритим кодом, прокатати власні бібліотеки, а потім виправити власний пристрій ... але кожен, хто хоче користуватися вашою бібліотекою, також повинен прошивати вашу власну збірку.


-7

Коротка відповідь: Ви не можете.

@ Backslash17: Переглядаючи статтю та наступне посилання з інструкціями щодо встановлення, все, що компанія почала працювати, - це запустити самостійно складений виконуваний файл на емуляторі, минаючи рамки для Android. Як тільки у вас є емулятор, ви можете входити в телнет і мати оболонку Linux. Запуск програми Linux є звичайним. Але це не працює для телефонів без джейлбрейка (він же кореневий доступ) і не доступний на ринку.

Якщо Google не відкриє інших можливостей або хтось не напише користувальницький компілятор, який компілює Language X у байт-код Dalvik (Dalvik - це віртуальна машинка, яка запускає програми Android), ви не зможете написати нативний код.


Правильно, тому я написав "Здається ...". Дивіться, щоб повірити!
зворотний
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.