Pisać aplikacje w C lub C ++ dla Androida? [Zamknięte]

286

Próbuję opracować / przenieść grę na Androida, ale jest ona w C, a Android obsługuje Javę, ale jestem pewien, że musi istnieć sposób na zainstalowanie aplikacji C, czy ktoś wie, jak to zrobić?

Robert Gould
źródło
tylko jeśli jailbreak telefon AFAIK.
Cogsy,
64
Czy jailbraking nie jest dla iPhone'ów?
Robert Gould,
1
G1 domyślnie nie zezwala na dostęp do roota i istnieje wiele ograniczeń dotyczących tego, co można wykonać poza środowiskiem „Androida”. Nie miałbym wielkiej nadziei na znalezienie sposobu na wykonanie natywnego kodu z poziomu Androida.
Cogsy,
2
ale pobrałem DOOM na Androida z rynku. Tak więc powinno być wykonalne
Robert Gould,
4
DOOM na Androida napisany jest w Javie code.google.com/p/doom-for-android/source/browse/#svn/trunk
Marco Mustapic

Odpowiedzi:

247

Każdy, kto przyjdzie do tego za pośrednictwem Google, pamiętaj, że począwszy od SDK 1.6 Android ma teraz oficjalny natywny SDK.

Możesz pobrać Android NDK (Native Development Kit) stąd: https://developer.android.com/ndk/downloads/index.html

Jest też post na blogu o NDK:
http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html

Andy Johnson
źródło
5
OK, więc co powiesz na C # i .Net? -)
Avi
4
Nie widzę, aby kiedykolwiek
działało
16
@Avi mono-android.net
Tomas
2
Proszę odnieść się do tego łącza androidsnippets.wordpress.com/2012/08/30/...
KK_07k11A0585
2
dla kodu .net / c # i Androida sprawdź Xamarin
bbqchickenrobot
41

Android NDK to zestaw narzędzi, który pozwala realizować części aplikacji w natywnego kodu, przy użyciu języków takich jak C i C ++. W przypadku niektórych typów aplikacji może to pomóc w ponownym użyciu bibliotek kodów napisanych w tych językach.

Aby uzyskać więcej informacji na temat rozpoczęcia pracy z programowaniem natywnym, kliknij ten link .

Przykładowe aplikacje można znaleźć tutaj .

MannyNS
źródło
1
lub 2009, 2010, 2011, 2012 lub 2013
Christopher Berman
19

Zwykle musisz:

  1. Zainstaluj Google Android NDK. Zawiera biblioteki lib, nagłówki, przykłady plików makfile i łańcuch narzędzi gcc
  2. Zbuduj plik wykonywalny z kodu C dla ARM, zoptymalizuj i połącz go z dostarczonymi bibliotekami, jeśli to konieczne
  3. Połącz się z telefonem za pomocą dostarczonego interfejsu adb i przetestuj plik wykonywalny

Jeśli chcesz sprzedać aplikację:

  1. Zbuduj bibliotekę z kodu C.
  2. Utwórz prosty kod Java, który będzie korzystał z tej biblioteki
  3. Osadź tę bibliotekę w pliku pakietu aplikacji
  4. Przetestuj swoją aplikację
  5. Sprzedaj lub rozpowszechnij za darmo
psihodelia
źródło
Jestem nowy w NDK i chcę uruchomić C LAN na Androidzie. Czy masz link referencyjny?
Parag Chauhan
14

Google wydało Native Development Kit (NDK) (zgodnie z http://www.youtube.com/watch?v=Z5whfaLH1-E o 00:07:30).

Mamy nadzieję, że informacje zostaną zaktualizowane na stronie grup google ( http://groups.google.com/group/android-ndk ), ponieważ informują, że nie zostały jeszcze opublikowane.

Nie jestem pewien, skąd pobrać prosty plik, ale słyszałem, że możesz otrzymać kopię NDK z repozytorium Google Git w gałęzi pączków.

Marc
źródło
12

Oficjalne stanowisko wydaje się być takie, że nie jest to coś, co „chciałbyś zrobić”. Zobacz ten wątek na liście programistów Androida. Google przewiduje, że Android działa na różnych urządzeniach (procesory, wyświetlacze itp.). Dlatego najlepszym sposobem na umożliwienie programowania jest użycie (zarządzanego) kodu zarządzanego, który atakuje maszynę wirtualną Dalvik. Z tego powodu zestaw SDK systemu Android nie obsługuje C / C ++.

ALE, spójrz na tę stronę :

Android zawiera zestaw bibliotek C / C ++ używanych przez różne komponenty systemu Android. Funkcje te są udostępniane programistom za pośrednictwem platformy aplikacji na Androida.

Struktura aplikacji zarządzanych wydaje się być warstwowa na tych bibliotekach. Na stronie znajduje się lista bibliotek C / C ++: standardowa biblioteka C, media, 3D, SQL lite i inne.

Wszystko czego potrzebujesz to łańcuch kompilatora, który skompiluje C / C ++ do odpowiedniego procesora (ARM, w przypadku G1). Niektóre instrukcje krótkie, jak to zrobić to tutaj .

Nie wiem, gdzie znaleźć opisy interfejsów API udostępnianych przez te biblioteki. Sądzę, że gdzieś w SDK mogą być ukryte pliki nagłówków, ale dokumentacja może być pobieżna / brakująca. Ale myślę, że da się to zrobić!

Mam nadzieję, że to przydatne. Dla przypomnienia, nie napisałem żadnych natywnych aplikacji na Androida - tylko kilka prostych zarządzanych.

Andy

Andy Johnson
źródło
4
Downvoting. NDK wydaje się teraz oficjalnym kompilatorem dla natywnego kodu Androida. Sprawiając, że ta odpowiedź jest nieaktualna.
unixman83
8

Możesz użyć nestedvm do przetłumaczenia C (lub innych języków GCC) na kod bajtowy Java i użyć go jako podstawy swojego portu. Na przykład zobacz port przenośnej kolekcji puzzli Simona Tathamsa na Androida .

Spodziewam się, że ta metoda jest przestarzała przez NDK, ale może nie być dostępna, jeśli niektóre sieci lub coś nie pozwalają ludziom uaktualnić swoich telefonów.

rjmunro
źródło
1
+1 za alternatywę dla NDK, mimo że NDK czyni go przestarzałym.
tobsen
Czy nestedvm nie jest kompatybilny z większą liczbą urządzeń?
charo
8

Firma Google uruchomiła już Google I / O 2011: wprowadzenie gier C i C ++ do sesji Androida, która jest dostępna pod adresem http://www.youtube.com/watch?v=5yorhsSPFG4

co dobrze zrozumieć użycie NDK do pisania aplikacji w C i C ++ dla Androida.

Jeśli chcesz po prostu skompilować dowolną natywną grę na konsolę i uruchomić ją na Androidzie, w tym artykule pokazano 3 metody na to samo.

1: Kompilacja statyczna przy użyciu autonomicznego łańcucha narzędzi

2: Kompilacja krzyżowa przy użyciu zestawu narzędzi systemu Android NDK

3: Kompilacja krzyżowa przy użyciu kodu źródłowego AOSP

Jeegar Patel
źródło
7

Może tego szukasz?

http://www.mosync.com/

Jest to środkowa warstwa do programowania dla kilku platform mobilnych za pomocą c ++.

joepal
źródło
2
link nie znaleziono 404. Zawsze dobrym pomysłem jest umieszczenie w odpowiedzi treści z oryginalnego postu na wypadek, gdyby właściciel witryny wygrał na loterii, rozwiódł się z żoną i przeprowadził się na Bahamy.
Zuzlx,
7

Patrząc na to, wydaje się możliwe:

„fakt, że obsługiwany jest tylko język Java, nie oznacza, że ​​nie można tworzyć aplikacji w innych językach. Zostało to udowodnione przez wielu programistów, hakerów i ekspertów w tworzeniu aplikacji dla urządzeń mobilnych. Faceci z Elements Interactive BV, firmy stojącej za Edgelib biblioteki, udało się uruchomić natywne aplikacje C ++ na platformie Android, nawet jeśli w tej chwili wciąż jest wiele problemów z wyświetlaniem i dźwiękiem ... itd. Obejmuje to grę S-Tris2 i demonstrację animacji 3D Edgelib. ”

ukośnik odwrotny 17
źródło
6

Od 2009 r. Rozwija się w tej sprawie.
Necessitas - Qt (framework C ++) dla Androida
Pierwsze kroki wideo .

zununow
źródło
Słuszna uwaga. Jako dodatkową notatkę, Necessitas używa Androida NDK.
Jaime Ivan Cervantes
5

Nie jestem pewien, czy NDK zapewnia pełne pokrycie oficjalnego API Java.

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

Należy pamiętać, że NDK nie pozwala ci tworzyć aplikacji tylko dla natywnych. Głównym środowiskiem uruchomieniowym Androida pozostaje maszyna wirtualna Dalvik.

Android Eve
źródło
2

Nie znam samouczka, ale dobre narzędzie programistyczne: Airplay SDK od Ideaworks Labs. (Ostatnio przemianowany na „ Marmelade ”) Za pomocą C / C ++ możesz tworzyć aplikacje na Windows Mobile, iPhone'y, Android. Jedynym komponentem, który mi się nie podobał, był kompozytor GUI - wadliwy, ale zawsze możesz go zastąpić Notatnikiem.

zergius
źródło
2

Możesz pobrać c4droid, a następnie zainstalować wtyczkę GCC i zainstalować na karcie SD. Z powłoki po prostu przechodzę do katalogu, w którym znajduje się plik binarny GCC, a następnie wywołuję go, aby wykonać plik wykonywalny na pokładzie.

znajdź / -name gcc

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

kot> test. c

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

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

./test

cześć ramię!

elahtrebor
źródło
2

Natywne pliki C / c ++ libstdc ++. * Z systemu Ubuntu to pliki binarne x86 (lub x86_64), ale urządzenia z Androidem i emulatory to ARM. Oczywiście i tak to nie zadziała, nawet jeśli ustawisz prawidłową soname. To bardzo naiwny sposób, który nie prowadzi do nikąd. Android ma bardzo ograniczoną obsługę C ++, co oznacza, że ​​nie ma wyjątków, standardowej biblioteki C ++ (w tym STL) i RTTI. Jeśli potrzebujesz takiej funkcjonalności, skorzystaj z mojej niestandardowej dystrybucji NDK z

http://crystax.net/android/ndk.php - obsługuje pełne funkcje C ++ wymienione powyżej.

Dlaczego występuje błąd: niezdefiniowane odwołanie do błędu łącza „__cxa_end_cleanup”. Android stlport

czas. Ponieważ nie ma linku do libstdc + +. A. Tak źle.

Ponieważ używa jakiejś biblioteki statycznej, konieczne jest połączenie pełnego libstdc + +. Puszka

http://crystax.net/android/ndk.php tutaj, aby pobrać pakiet

sources \ cxx-stl \ gnu-libstdc + + \ libs \ armeabi.

Android na własnej obsłudze libstdc + + jest ograniczony, musi być połączony z pełną biblioteką libstdc + +. Praca.

Dodaj plik w Android.mk LOCAL_LDFLAGS = $ (LOCAL_PATH) / libs / libcurl.a \

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

I LOCAL_CPPFLAGS + =-lstdc + +-fexceptionsmożna go skompilować

ZhangXuelian
źródło
1

Planuje się zezwolić na biblioteki C / C ++ w następnej wersji zestawu SDK systemu Android (Codename Eclair?) Do tej pory nie jest to możliwe za pośrednictwem zestawu Android Java SDK. Możesz jednak pobrać OGROMNY projekt open source, rozwinąć własne biblioteki, a następnie sflashować własne urządzenie ... ale każdy, kto chce korzystać z Twojej biblioteki, będzie musiał także sflashować niestandardową kompilację.

Haseman
źródło
-7

Krótka odpowiedź: nie możesz.

@ Backslash17: Przeglądając artykuł i poniższy link z instrukcjami instalacji, cała firma pracowała, aby uruchomić samodzielnie skompilowany plik wykonywalny na emulatorze, omijając platformę Android. Gdy masz emulator, możesz telnet i mieć powłokę Linux. Uruchamianie programu linux jest oczywiście trywialne. Ale to nie działa na telefony bez jailbreak (inaczej dostęp do roota) i nie jest dostępne na rynku.

O ile Google nie otworzy innych możliwości lub ktoś nie napisze niestandardowego kompilatora, który kompiluje język X do kodu bajtowego Dalvik (Dalvik to maszyna wirtualna z programami na Androida), nie będziesz mógł pisać kodu natywnego.

buster
źródło
Właśnie dlatego napisałem „Wygląda na…”. Zobacz, aby uwierzyć!
backslash17,