Diperbarui (untuk kejelasan dan untuk mengurangi ambiguitas):
Saya akan mulai mengutak-atik aplikasi android. Saya berencana menulis dalam C ++ menggunakan NDK (karena saya memiliki lebih banyak pengalaman dalam C ++ dan lebih memilihnya daripada Java) tetapi menemukan yang berikut ini di halaman Android NDK :
Anda sebaiknya hanya menggunakan NDK jika itu penting untuk aplikasi Anda — bukan karena Anda lebih suka memprogram dalam C / C ++.
Saya mendapat kesan bahwa Anda harus menggunakan bahasa yang Anda sukai, selama itu sesuai dengan pekerjaan. Adakah yang bisa menjelaskan mengapa sangat disarankan untuk tidak menggunakan C / C ++ untuk pengembangan android?
Asli:
Saya akan mulai mengutak-atik aplikasi seluler, khususnya android yang merupakan OS dari ponsel saya saat ini, dan saya bertanya-tanya apakah menulis aplikasinya dalam C ++ (atau setidaknya intinya, kemudian membungkus di Java) adalah opsi yang dapat diterima.
Beberapa latar belakang, saya jurusan ilmu komputer yang telah mengambil 3 kursus C ++ (intro, menengah, OOP, dan saya mengambil kursus STL di musim semi) dan hanya 1 kursus Java (menengah). Karena itu, saya lebih nyaman dengan C ++ dan lebih memilihnya daripada Java. Saya menemukan yang berikut di halaman Android NDK :
Menggunakan kode native di Android umumnya tidak menghasilkan peningkatan performa yang nyata, tetapi selalu meningkatkan kompleksitas aplikasi Anda. Secara umum, Anda sebaiknya hanya menggunakan NDK jika itu penting untuk aplikasi Anda — bukan karena Anda lebih suka memprogram dalam C / C ++.
- Saya mendapat kesan bahwa Anda harus menggunakan bahasa yang sesuai dengan pekerjaan dan juga bahasa yang Anda kenal
- Saya mungkin ingin mem-port aplikasi ke platform seluler lain, seperti iOS, yang mendukung C ++ tetapi tidak java
- Meskipun Java adalah bahasa tingkat tinggi dan dengan demikian seharusnya membuat pengembangan lebih cepat, saya merasa pengembangan akan lebih lambat karena saya harus mempelajari kembali hampir semuanya (karena saya hanya mengambil satu kelas pada bahasa tersebut)
Nasihat apa pun akan sangat dihargai.
ps: banyak jawaban tentang hal ini berasal dari beberapa tahun yang lalu dan sangat sedikit jawaban lanjutan yang menyebutkan NDK memungkinkan pengembangan aplikasi asli lengkap di Android 2.3 dan yang lebih baru.
Jawaban:
Pikirkan seperti ini. Anda memiliki kemampuan menggunakan Java SDK untuk membangun aplikasi yang berfungsi penuh yang memanfaatkan 100% API yang tersedia untuk pengembang. Tidak ada yang dapat Anda lakukan dengan NDK yang tidak dapat dilakukan dengan SDK (dari perspektif API), NDK hanya memberikan performa yang lebih tinggi.
Sekarang lihat kebalikannya. Jika Anda memilih untuk menulis aplikasi 100% di NDK, Anda masih dapat menulis aplikasi yang berfungsi penuh, tetapi Anda dibatasi dalam jumlah framework API yang dapat Anda akses. Tidak semua framework Android dapat diakses di lapisan asli; kebanyakan API hanya untuk Java. Itu tidak berarti bahwa semua API yang ANDA butuhkan tidak tersedia di NDK, tetapi tidak ada tempat di dekat SEMUA API yang terekspos.
Selain itu, NDK memperkenalkan kode khusus platform yang memperluas ukuran distribusi Anda. Untuk setiap arsitektur perangkat yang ingin Anda dukung, kode native Anda harus dibuat dalam file .so (satu untuk armv5, armv7, dan x86) semuanya dikemas ke dalam APK yang sama. Duplikasi kode yang dapat dieksekusi ini membuat aplikasi Anda berukuran 3x (yaitu "biner lemak") kecuali Anda mengambil tugas membuat APK terpisah untuk setiap arsitektur saat Anda mendistribusikan aplikasi. Jadi, proses penerapan menjadi sedikit lebih berhasil jika Anda tidak ingin APK Anda bertambah besar secara signifikan.
Sekali lagi, meskipun tidak ada yang melarang Anda melakukan apa yang Anda pilih, hal ini menunjukkan mengapa Google mendeskripsikan Java sebagai metode "pilihan" untuk sebagian besar kode Anda dan jalur yang paling tidak resistennya. Saya harap ini menjelaskan mengapa dokumentasi tersebut diberi kata-kata seperti itu.
sumber
.so
file? Saya sadar bahwa perlu ada kompilasi kode asli yang terpisah untuk setiap arsitektur perangkat keras yang didukung, jadi setiap.so
file memiliki kompilasi terpisah?.so
untuk setiap arsitektur yang Anda pilih untuk didukung (ini dikontrol oleh makefiles Anda), dan semua file akan ditempatkan ke dalam direktori libs / APK Anda. Saat APK diinstal, hanya yang sesuai yang.so
akan dipilih, tetapi semuanya masih harus aktif di APK awal.Jika Anda hanya akan mengembangkan satu aplikasi dalam hidup Anda, gunakan NDK.
Jika Anda bertujuan mempelajari pengembangan Android dengan tujuan mengembangkan lebih dari satu aplikasi selama masa hidup Anda - dan ingin dapat mendukung semuanya dengan baik - kemungkinan besar Anda akan berhasil lebih baik dalam jangka panjang jika Anda mempelajari Java dan gunakan SDK Java Android sebagai gantinya.
sumber
Programer di King menggunakan C ++ untuk logika permainan mereka. Dan mereka tampaknya baik-baik saja menilai dari omset mereka.
Menurut pengalaman saya, C ++ untuk pemecah masalah dan Java untuk penghindar masalah. Saya suka kedua bahasa tersebut, tetapi C ++ cukup bermanfaat saat Anda menulis kode yang bagus. Namun, mungkin diperlukan beberapa saat keajaiban untuk sampai ke sana.
Anda juga dapat merekomendasikan C ++ untuk Data scientist, yang biasanya menyelesaikan pekerjaannya dengan, katakanlah, Python atau R. C ++ dapat melakukan hal yang sama dengan kinerja yang baik atau tidak lebih baik, tetapi yang dibutuhkan adalah menjadi jenius dalam bahasa. Itulah mengapa saya tidak pernah tidak merekomendasikan C ++ kepada orang yang ingin melakukannya - saya hanya akan memberikan perhatian pada suguhan yang mereka terima.
sumber
Saya menemukan artikel menarik ini dari: http://betanews.com/2014/07/22/why-c-is-the-perfect-choice-for-modern-app-development/
C ++ dibangun khusus untuk kemandirian platform dan dengan demikian ditemukan di setiap sistem operasi yang ada. Pengguna seluler tipikal Anda mungkin tahu bahwa aplikasi Android ditulis aplikasi Java dan iOS di Objective-C, tetapi yang tidak diketahui banyak orang adalah bahwa ada lebih banyak kode C / C ++ dalam memori di perangkat Anda daripada yang lainnya. C / C ++ menggerakkan banyak teknologi perangkat kecil (seperti kernel, yang berinteraksi dengan perangkat keras, serta pustaka waktu proses yang khas) dan jaringan telekomunikasi yang mengaktifkan perangkat ini. Lebih penting lagi bagi tim pengembangan, adalah bahwa ada antarmuka dan pustaka C / C ++ untuk apa pun yang perlu Anda lakukan di perangkat dan platform apa pun. Perangkat Android NDK adalah contoh bagus dari dukungan penuh C / C ++ yang awalnya ditambahkan untuk tim pengembangan game untuk memungkinkan mereka mendapatkan kinerja terbaik dari perangkat dengan menghindari Java dan Android Java runtime Dalvik, mesin virtual tempat mereka bekerja. Kode Java Android dijalankan pada. Ini telah ditingkatkan secara teratur untuk mengaktifkan setiap layanan Android.
sumber
Saya akan mengatakan menggunakan java untuk aplikasi utama. Tetapi jika Anda memiliki beberapa kode c ++ yang perlu Anda port atau beberapa library yang Anda perlukan yang diimplementasikan secara efisien di c ++, gunakan ndk untuk bit tersebut
sumber
Saya tidak melihat alasan untuk tidak menggunakan C ++ untuk pengembangan android normal, Jika Anda memiliki pengalaman yang luas dalam bekerja di C ++ dan dengan OS yang kompleks seperti windows atau semacamnya, maka Anda dapat memahami android dengan cepat dan tidak serumit OS lainnya. sambil belajar java atau bekerja tanpa mempelajarinya akan lebih membuat frustasi dan kompleks!
sumber
Pertimbangan terpenting adalah bahwa kode Java yang dikompilasi akan berjalan di semua perangkat android tanpa perubahan, sedangkan kode native perlu dikompilasi untuk semua platform target.
Maksud umum untuk Java dan Android adalah Anda menulis mayoritas jika tidak semua aplikasi Anda di Java dan menggunakan hal-hal asli hanya jika tidak ada pilihan lain ... jadi segala sesuatu tentang menulis aplikasi akan cocok untuk melakukannya di Java.
Anda akan terhindar dari banyak kesulitan dalam menjembatani antara dunia asli dan Jawa dengan menulis di Java.
Selain itu, Anda akan sangat membantu jika Anda berani mengambil risiko dan mempelajari Java. Aplikasi Android Anda tidak hanya akan menjadi lebih baik untuk itu, tetapi Anda akan mengekspos diri Anda pada pendekatan yang sangat berbeda untuk OO dan Anda akan menjadi programmer yang lebih baik untuk itu.
Tambahkan ke fakta bahwa Anda akan mengesampingkan sejumlah besar risiko keamanan dengan menulis di Java.
Dalam pikiran saya, ini adalah cara yang mudah - gunakan Java.
sumber