Menulis aplikasi dalam C atau C ++ untuk Android? [Tutup]


286

Saya mencoba mengembangkan / port game ke Android, tetapi di C, dan Android mendukung Java, tapi saya yakin pasti ada cara untuk mendapatkan aplikasi C di sana, ada yang tahu cara untuk mencapai ini?


hanya jika Anda melakukan jailbreak pada ponsel AFAIK.
Cogsy

64
Bukankah jailbraking untuk iPhone?
Robert Gould

1
G1 tidak mengizinkan akses root secara default, dan ada banyak batasan yang berlaku tentang apa yang dapat dieksekusi di luar lingkungan 'Android'. Saya tidak akan memiliki banyak harapan menemukan cara untuk mengeksekusi kode asli dari dalam Android.
Cogsy

2
tapi saya sudah mengunduh DOOM untuk Android dari marketplace. Jadi itu harus bisa dilakukan
Robert Gould

Jawaban:


247

Bagi siapa pun yang datang ke ini melalui Google, perhatikan bahwa mulai dari SDK 1.6 Android sekarang memiliki SDK asli resmi.

Anda dapat mengunduh Android NDK (Native Development Kit) dari sini: https://developer.android.com/ndk/downloads/index.html

Juga ada posting blog tentang NDK:
http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html


5
OK, jadi sekarang bagaimana dengan C # dan. Net? -)
Avi

4
Tidak dapat melihat dukungan .net yang pernah terjadi
vickirk



2
untuk .net / c # kode dan android periksa xamarin
bbqchickenrobot

41

The Android NDK adalah toolset yang memungkinkan Anda menerapkan bagian dari aplikasi Anda dalam kode asli, menggunakan bahasa seperti C dan C ++. Untuk jenis aplikasi tertentu, ini dapat membantu Anda menggunakan kembali pustaka kode yang ditulis dalam bahasa tersebut.

Untuk info lebih lanjut tentang cara memulai pengembangan asli, ikuti tautan ini .

Contoh aplikasi dapat ditemukan di sini .


1
atau 2009, 2010, 2011, 2012 atau 2013
Christopher Berman

19

Biasanya, Anda harus:

  1. Instal Google Android NDK. Berisi libs, header, contoh makfile dan toolchain gcc
  2. Buat sebuah executable dari kode C Anda untuk ARM, optimalkan, dan tautkan dengan lib yang disediakan jika diperlukan
  3. Hubungkan ke telepon menggunakan antarmuka adb yang disediakan dan uji eksekusi Anda

Jika Anda ingin menjual aplikasi:

  1. Bangun perpustakaan dari kode C Anda
  2. Buat kode Java sederhana yang akan menggunakan perpustakaan ini
  3. Sematkan perpustakaan ini ke dalam file paket aplikasi
  4. Uji aplikasi Anda
  5. Jual atau distribusikan secara gratis

Saya baru di NDK dan saya ingin menjalankan C lan di Android. Punya tautan ref?
Parag Chauhan


12

Posisi resmi tampaknya adalah bahwa ini bukan sesuatu yang Anda "ingin lakukan". Lihat utas ini di daftar Pengembang Android. Google membayangkan android berjalan di berbagai perangkat yang berbeda (CPU, display, dll). Karena itu, cara terbaik untuk mengaktifkan pengembangan adalah dengan menggunakan kode yang dikelola (portabel) yang menargetkan VM Dalvik. Karena alasan ini, Android SDK tidak mendukung C / C ++.

TAPI, lihat halaman ini :

Android mencakup seperangkat pustaka C / C ++ yang digunakan oleh berbagai komponen sistem Android. Kemampuan ini diekspos kepada pengembang melalui kerangka kerja aplikasi Android.

Kerangka kerja aplikasi yang dikelola tampaknya berlapis di atas perpustakaan ini. Halaman berlanjut ke daftar lib C / C ++: perpustakaan C standar, media, 3D, SQL lite, dan lainnya.

Jadi yang Anda butuhkan adalah rantai kompiler yang akan mengkompilasi C / C ++ ke CPU yang sesuai (ARM, dalam kasus G1). Beberapa instruksi singkat tentang cara melakukan ini ada di sini .

Yang tidak saya ketahui adalah di mana menemukan deskripsi API yang disediakan perpustakaan ini. Saya kira mungkin ada file header yang terkubur di SDK di suatu tempat, tetapi dokumentasi mungkin samar / hilang. Tapi saya pikir itu bisa dilakukan!

Semoga bermanfaat. Sebagai catatan, saya belum menulis aplikasi Android asli apa pun - hanya beberapa yang dikelola sederhana.

Andy


4
Downvoting. NDK tampaknya menjadi kompiler resmi untuk kode asli Android sekarang. Menjadikan jawaban ini usang.
unixman83

8

Anda dapat menggunakan nestedvm untuk menerjemahkan C (atau bahasa GCC lainnya) ke dalam bytecode Java, dan menggunakannya sebagai dasar port Anda. Sebagai contoh, lihat port Android dari koleksi puzzle portabel Simon Tathams .

Saya berharap metode ini dibuat usang oleh NDK, tetapi mungkin tidak akan ada jika beberapa jaringan atau sesuatu tidak memungkinkan orang untuk memutakhirkan ponsel mereka.


1
Memberi +1 untuk alternatif NDK, meskipun NDK membuatnya usang.
tobsen

Bukankah nestedvm kompatibel dengan lebih banyak perangkat?
charo

8

Google telah meluncurkan Google I / O 2011: Membawa Game C dan C ++ ke sesi Android yang tersedia di http://www.youtube.com/watch?v=5yorhsSPFG4

yang bagus untuk memahami penggunaan NDK untuk menulis aplikasi di c dan c ++ untuk android.

Jika Anda hanya ingin melakukan kompilasi silang sembarang game asli berbasis konsol dan menjalankannya di android maka Artikel ini telah menunjukkan 3 metode yang sama.

1: Kompilasi statis menggunakan toolchain mandiri

2: Kompilasi silang menggunakan toolchain Android NDK

3: Kompilasi silang menggunakan kode sumber AOSP


7

Mungkin Anda mencari ini?

http://www.mosync.com/

Ini adalah lapisan tengah untuk pengembangan untuk beberapa platform seluler menggunakan c ++.


2
Tautan 404 tidak ditemukan. Itu selalu merupakan ide yang baik untuk memasukkan beberapa konten dari posting asli ke dalam jawaban jika pemilik situs memenangkan lotre, menceraikan istrinya dan pindah ke Bahama.
Zuzlx

7

Melihat hal ini tampaknya mungkin:

"Faktanya hanya bahasa Jawa yang didukung tidak berarti Anda tidak dapat mengembangkan aplikasi dalam bahasa lain. Ini telah dibuktikan oleh banyak pengembang, peretas, dan pakar dalam pengembangan aplikasi untuk seluler. Orang-orang di Elements Interactive BV, perusahaan di belakang Edgelib perpustakaan, berhasil menjalankan aplikasi C ++ asli pada platform Android, bahkan saat ini masih ada banyak masalah pada tampilan dan suara ... dll. Ini termasuk permainan S-Tris2 dan demo animasi 3D dari Edgelib. "







2

Saya tidak tahu tutorial tetapi alat pengembangan yang bagus: Airplay SDK dari Ideaworks Labs. (Baru-baru ini berganti nama menjadi " Marmelade ") Dengan menggunakan C / C ++ Anda dapat membangun aplikasi untuk Windows Mobile, iPhone, Android. Satu-satunya komponen yang saya tidak suka adalah komposer GUI - yang buggy, tetapi Anda selalu dapat menggantinya dengan Notepad.


2

Anda dapat mengunduh c4droid dan menginstal plugin GCC dan menginstal ke SD Anda. Dari shell saya hanya melintasi ke direktori di mana GCC biner berada dan kemudian memanggilnya untuk membuat on board executable.

cari / -nama 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

./uji

halo lengan!



2

File asli C / c ++ libstdc ++. * Dari Ubuntu Anda adalah binari x86 (atau x86_64) tetapi perangkat Android dan emulator adalah ARM. Tentu saja, ini tidak akan berhasil, bahkan jika Anda akan menetapkan soname yang benar. Ini adalah cara yang sangat naif yang tidak mengarah ke mana pun. Android memiliki dukungan C ++ yang sangat terbatas artinya tidak ada pengecualian, pustaka C ++ standar (termasuk STL) dan RTTI. Jika Anda memerlukan fungsionalitas seperti itu, gunakan distribusi NDK khusus saya dari

http://crystax.net/android/ndk.php - ini mendukung fitur C ++ lengkap yang tercantum di atas.

Mengapa ada kesalahan: referensi yang tidak ditentukan untuk kesalahan tautan '__cxa_end_cleanup'. Android stlport

waktu. Karena tidak ada tautan ke libstdc + +. A. sangat salah.

Karena menggunakan pustaka statis, perlu untuk menautkan libstdc penuh + +. Sebuah kaleng

http://crystax.net/android/ndk.php di sini untuk mengunduh paket

sumber \ cxx-stl \ gnu-libstdc + + \ libs \ armeabi direktori.

Dukungan Android pada libstdc ++ sendiri terbatas, ia harus ditautkan ke libstdc ++ lengkap. Sebuah pekerjaan.

Tambahkan file di Android.mk LOCAL_LDFLAGS = $ (LOCAL_PATH) / libs / libcurl.a \

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

Dan LOCAL_CPPFLAGS + =-lstdc + +-fexceptionsbisa dikompilasi


1

Ada rencana untuk mengizinkan pustaka C / C ++ di versi SDK Android berikutnya (Codename Eclair?) Sampai saat ini, tidak mungkin melalui Android Java SDK. Namun, Anda dapat mengambil proyek open source HUGE, memutar pustaka Anda sendiri, dan kemudian mem-flash perangkat Anda sendiri ... tetapi siapa pun yang ingin menggunakan pustaka Anda harus mem-flash custom build Anda juga.


-7

Jawaban singkat: Anda tidak bisa.

@ Backslash17: Melihat melalui artikel dan tautan berikut dengan instruksi instalasi, semua yang perusahaan kerjakan adalah meluncurkan executable yang dikompilasi sendiri pada emulator, melewati kerangka android. Setelah Anda memiliki emulator, Anda dapat melakukan telnet dan memiliki shell linux. Menjalankan program linux ada yang sepele tentunya. Tapi itu tidak berfungsi untuk ponsel tanpa jailbreak (alias akses root) dan tidak dapat dikirim di pasar.

Kecuali Google membuka peluang lain atau seseorang menulis kompiler khusus yang mengkompilasi Bahasa X ke dalam bytecode Dalvik (Dalvik adalah VM yang menjalankan program Android) Anda tidak akan dapat menulis kode asli.


Benar, itu sebabnya saya menulis "Sepertinya ...". Lihat untuk percaya!
backslash17
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.