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ć?


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,

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


5
OK, więc co powiesz na C # i .Net? -)
Avi

4
Nie widzę, aby kiedykolwiek
działało


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 .


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

Jestem nowy w NDK i chcę uruchomić C LAN na Androidzie. Czy masz link referencyjny?
Parag Chauhan


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


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.


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


7

Może tego szukasz?

http://www.mosync.com/

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


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. ”







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.


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ę!



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ć


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ę.


-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.


Właśnie dlatego napisałem „Wygląda na…”. Zobacz, aby uwierzyć!
backslash17,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.