Ilmu Belajar Mengembangkan Aplikasi Android

Ilmu Belajar Mengembangkan Aplikasi Android dengan C++

Baru-baru ini, saya telah menghabiskan banyak waktu untuk bertemu dengan pengembang Android. Dan saya terkejut betapa sedikit jumlah devs Android yang mengerti bahasa C. Sebagian besar desainer hanya menggunakan Java dan yakin bahwa C terlalu rumit untuk kebutuhan mereka. Tetapi saya akan berusaha untuk memecahkan mitos ini - kode C dapat lebih mudah ditulis dan lebih mudah dioperasikan.

Toolchain
Langkah pertama adalah toolchain. Untuk tutorial development ini, saya akan menggunakan seperangkat toolchain yang sangat dasar. Saya sudah mengunduh NDK terbaru (r14b) dari situs web yang dikenal, menambahkan variabel lingkungan ANDROID_NDK, dan saya siap membuat bagan perkakas:

$ ANDROID_NDK / build / tools / make_standalone_toolchain. py --arch arm --api dua puluh satu - header-anified --install-dir. / toolchain
Perintah semacam ini akan menghasilkan toolchain untuk platform target dua puluh satu untuk arsitektur ARM.

Perhatian: Tingkat API target di dalam NDK memiliki interpretasi yang sangat berbeda dari targetSdkVersion di Java. Fokus NDK pada tingkat API adalah tingkat API minimum yang didukung aplikasi.
Catatan: Semua instruksi ditulis di macOS dan dapat juga digunakan untuk linux. Anda dapat mencoba menjalankan panduan ini di mesin Windows Anda dengan Cygwin atau bash windows windows modern

Jika Anda tidak akrab dengan C, saya sarankan untuk memulai dari buku “The C Development Language” oleh Kernighan dan Ritchie (juga disebut sebagai K & R C). Itu sensitif tetapi masih sangat berguna di masa kita. Seperti biasa, saya akan mulai dari Hai dunia. Berikut contoh dari buku ini (sedikit dimodifikasi untuk OS modern):

# Include int main () printf ("hello, world"); kembali 0;
Ok, berikutnya membangun dan menjalankan seperti aplikasi baris perintah pada perangkat Android.

Saya menggunakan clang compiler (ini adalah kompiler tunggakan di NDK 14). Clang adalah kompiler frontend untuk bahasa yang berbeda termasuk C dan C ++ yang menggunakan LLVM sebagai backend. Dan langkah kecil menjadi teori kompilasi. Di C ada 4 tahapan kompilasi:
  • Preprocessing
  • Koleksi aktual
  • Majelis
  • Menautkan
Catatan: Ditemukan di frontend kompiler 'berarti bahwa kompiler melakukan preprocessing dari file sumber daya, parsing kode ke AST dan menghasilkan kode lanjutan (itu tahap satu khusus dan 2). Kemudian 'backend' mengoptimalkan kode ini dan menerjemahkannya ke kode peralatan untuk arsitektur PROCESSOR tertentu (tahap 3) (file objek). Kemudian linker bekerja menghubungkan executable atau mungkin pustaka dari objek.
Kembali ke praktik, perintah ini dikompilasi. c file ke hal dan kemudian menautkannya ke file yang dapat dieksekusi untuk sistem toolchain:

/ toolchain / bin / clang helloworld. c -o main
Jika Anda menjalankan tentang API 21 atau lebih tinggi Anda harus menetapkan bendera untuk mendapatkan posisi eksekusi independen.

Dimulai dengan Android 4. 1 (API level 16), penghubung kuat Android mendukung eksekutabel bebas-posisi (PIE). Dari Android lima. 0 (API level 21), executable membutuhkan PIE. Untuk bekerja dengan PIE untuk membangun eksekutabel Anda, atur bendera -fPIE. Bendera semacam ini membuat lebih sulit untuk menggunakan bug korupsi memori hanya dengan mengacak lokasi kode. kamu

. / toolchain / bin / clang helloworld. o -o main -fPIE -pie
Ditujukan untuk menjalankan helloworld executable Anda memerlukan Perangkat Android atau find my device. Salin dapat dieksekusi dan kerjakan melalui adb:

adb push / main / data / lokal / tmp / adb shell / data / lokal / tmp / hello world%
Anda cukup menjalankan aplikasi baris perintah C pertama Anda yang berkaitan dengan Android. Pendekatan ini sangat bagus untuk menyaring beberapa fitur di C tanpa perlu membuat aplikasi android, mengkompilasi Java, paket. file apk, dll. Hanya duplikat biner dan jalankan - sangat sederhana.

Android library
Ada dua jenis library di C:
  1. statis
  2. dinamis
Dengan bagian ini, saya akan membuat tautan besar yang dapat dieksekusi terhadap pustaka lokal Anda dari kedua jenis. Sebagai contoh aplikasi, saya memutuskan untuk menghasilkan utilitas kecil yang bahkan mendekati hasil dari dua implementasi kuadrat terbalik yang mendasari: sistem perpustakaan matematika dan hack yang digunakan dalam Quake III. Di perpustakaan stasioner, saya telah menerapkan versi Tremble III dari akar kuadrat terbalik, dalam aktif - matematika. edisi h Dan dieksekusi ini akan meminta pengguna untuk wawasan dan mencetak kedua hasil.

Mari mulai dengan perpustakaan tetap. Sekali lagi, sebagian kecil teori:

Perpustakaan statis hanyalah kumpulan dokumen objek biasa. Koleksi ini dibuat dengan menggunakan program ar (pengarsip). Pustaka stasioner mengizinkan pengguna untuk menautkan ke program tanpa harus mengkompilasi ulang kodenya, menghemat waktu rekompilasi. Perpustakaan statis dalam banyak kasus berguna untuk pengembang jika mereka ingin mengizinkan pemrogram untuk url ke perpustakaan mereka, tetapi tidak perlu memberikan kode sumber pustaka. 2

#include float Q_rsqrt (float number) panjang i; mengapung x2, y; const mengapung threehalfs = 1.5F; x2 = angka * 0,5F; y = number; i = * (panjang *) & y; // peretasan bit tingkat mengambang yang jahat i = 0x5f3759df - (i>> 1); // apa-apaan ini? y = * (float *) & i; y = y * (threehalfs - (x2 * y * y)); // Iterasi ke-1 // y = y * (threehalfs - (x2 * y * y)); //


2nd iteration, ini dapat dihapus kembali y;
Kompilasi hacky ini. c file menjadi objek

. / toolchain / bin / clang fast-inverse-square-root. c -c
Perintah semacam ini akan dikompilasi. file c menjadi. o dokumen (objek). Ini adalah objek yang lebih canggih yang akan digunakan untuk pembuatan pustaka statis. Untuk lebih memahami objek apa yang akan kita akan gunakan kekuatan nm:

Perintah nm dapat melaporkan daftar ikon di pustaka yang diberikan. Berfungsi pada pustaka statis dan bersama. Untuk pustaka khusus nm dapat daftar nama simbol yang dijelaskan, setiap nilai simbol, serta jenis lambang. Ini juga dapat menentukan di mana simbol itu diidentifikasi dalam kode sumber (dengan nama file dan nomor baris), jika informasi itu datang di perpustakaan (lihat opsi -l). Jenis tanda ditampilkan menjadi huruf; huruf kecil berarti simbolnya lokal, sedangkan huruf besar berarti tanda itu global (eksternal).

Refbacks

  • No hay Refbacks actualmente.


e-ISSN: 2255-078X

FIR. Faedpyme International Review es una revista científica editada por FAEDPYME (La Fundación para el análisis estratégico y desarrollo de la Pequeña y Mediana Empresa)

Licencia de Creative Commons Esta obra está – si no se indica lo contrario – bajo una "Licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional". La licencia completa se puede consultar en http://creativecommons.org/licenses/by-nc-sa/4.0/.