de Onur Tuna

Cum să începeți să utilizați codul C ++ în proiectul dvs. Android

Anul trecut am ținut o conferință la GDG DevFest din Ankara, Turcia. De atunci plănuiesc să împărtășesc acea discuție aici. Acum, că sunt doctorand și am ceva mai mult timp, pun postul aici.

Dacă doriți să obțineți prezentarea, aceasta este disponibilă pe pagina mea conduce.

Încălzire

Aș dori să încep prin a explica procesul de construire a unei aplicații în Android. Deoarece trebuie să cunoașteți câteva lucruri interne de bază, acest subiect este oarecum tehnic.

Cum sa incepeti sa utilizati codul C in proiectul

Nu trebuie să știți tot ce apare în imaginea de mai sus – dar este o referință bună.

Acum spuneți că scrieți o aplicație pentru Android folosind Java. Veți avea:

  • codul sursă pentru aplicația respectivă
  • un fel de fișiere de resurse (cum ar fi imagini sau fișiere XML pentru aranjarea GUI)
  • și poate unele fișiere AIDL, care sunt interfețe Java care fac ca procesele să vorbească între ele.

Probabil că veți folosi, de asemenea, biblioteci suplimentare și fișierele aferente acestora în proiectul dvs.

Când creați o aplicație funcțională, mai întâi compilați aceste coduri sursă împreună. Un compilator va produce un fișier DEX care apoi poate fi citit de o mașină virtuală. Acest fișier citibil de mașină și câteva informații suplimentare despre aplicație vor fi împachetate împreună de un manager de pachete. Pachetul final – numit pachet APK – este aplicația finală.

Acesta este procesul de construire a unui pachet Android în cei mai simpli termeni.

Android Run Time

Acum, să vorbim despre lucrurile care rulează. Aveți o aplicație și când începe să ruleze este citită de o mașină. Android are două tipuri de mașini virtuale pentru a rula o aplicație. Nu îl voi introduce pe cel vechi, numit Dalvik, deoarece astăzi majoritatea dispozitivelor Android rulează o mașină virtuală numită Android Run Time, ART – deci despre asta vom vorbi aici.

1612096927 31 Cum sa incepeti sa utilizati codul C in proiectul

ART este o mașină virtuală anticipată (AOT). Deci, ce înseamnă asta? Lasă-mă să explic. Când aplicația dvs. începe să ruleze pentru prima dată, codul său este compilat în codul mașinii, care poate fi apoi citit de mașina reală. Aceasta înseamnă că codul nu este compilat parte cu parte în timpul rulării. Acest lucru îmbunătățește timpul de instalare al aplicației, reducând în același timp consumul de baterie.

Pe scurt, scrieți o aplicație, apoi o compilați în cod binar care este citit de ART. Apoi ART convertește codul respectiv în cod nativ care poate fi citit de dispozitivul însuși.

ART & C ++

1612096927 187 Cum sa incepeti sa utilizati codul C in proiectul

Ce se întâmplă dacă scrieți o aplicație Android utilizând Java, dar există un cod C ++ care este în contact cu Java? Care este efectul codului C ++ respectiv asupra procesului de compilare sau a duratei de rulare a aplicației? Nu prea mult.

Codul C ++ este compilat direct în codul real al mașinii de către compilatorul său. Deci, dacă utilizați codul C ++, acesta va fi ambalat ca cod citibil de mașină în pachetul dvs. ART nu îl va reprocesa în timp ce convertește codul citibil ART în cod citibil de mașină la prima utilizare. Nu trebuie să vă faceți griji cu privire la acest proces. Sunteți responsabil numai pentru scrierea unei interfețe care permite Java să vorbească cu C ++. Vom vorbi despre asta în curând.

Procesul de construire C ++

1612096927 815 Cum sa incepeti sa utilizati codul C in proiectul

Acum trebuie să vorbim despre procesul de construire C ++. Codul sursă (fișierele .cpp și .h) este transformat în cod sursă extins de un preprocesator chiar în primul pas. Acest cod sursă conține o mulțime de cod. În timp ce puteți obține fișierul executabil final folosind o comandă precum cea de mai sus, este posibil să tăiați pașii de construcție cu semnalizările aferente. Puteți obține sursa extinsă oferind -E steag către g ++ compilator. Am un fișier de linie 40867 pentru un cod sursă „hello world” .cpp pe 4 linii.

Utilizați g ++ -E hello.cpp -o hello.ii pentru a obține codul sursă extins.

Al doilea este pasul de compilare propriu-zis. Compilatorul compilează codul nostru pentru a obține un fișier de asamblare. Deci, compilarea reală produce un fișier de asamblare, nu executabil. Acest fișier este asamblat de un asamblator. Codul rezultat se numește cod obiect. Când avem mai multe biblioteci menite să fie legate între ele, avem multe coduri de obiecte. Aceste coduri de obiecte sunt legate de un linker. Apoi obținem un executabil.

Există două tipuri de legături: dinamice și statice.

1612096928 478 Cum sa incepeti sa utilizati codul C in proiectul

Deci, acum este timpul să mergem un pic mai adânc în timp ce discutăm despre lucruri pure C ++.

Important: puteți considera bibliotecile statice conectate ca parte a codului dvs. Așadar, aveți grijă când conectați o bibliotecă la proiectul dvs. Deoarece biblioteca pe care o utilizați ar putea să nu aibă o licență adecvată pentru a fi legată static. Majoritatea bibliotecilor open source au fost restricționate pentru a fi utilizate ca fiind conectate dinamic.

Din punct de vedere tehnic, o bibliotecă legată static este legată de proiect la momentul compilării de către compilator. Pe de altă parte, o bibliotecă legată dinamic este legată de sistemul de operare în timpul rulării. Deci nu trebuie să distribuiți proiectul cu codul de bibliotecă pe care îl utilizați. Puteți utiliza și biblioteca unui alt proiect sau biblioteca de sistem.

Datorită acestui fapt, legătura dinamică poate cauza vulnerabilitate în proiectul dvs. Cu toate că cazul de securitate nu intră în sfera acestui post, totuși.

Unele concepte

CMake și Gradle

Dacă dorim să adăugăm cod C ++ în proiectul nostru Android, este bine să folosim CMake pentru a gestiona operațiunile de construire. Vă amintiți procesul de compilare pe care tocmai l-am introdus mai sus? Când aveți o grămadă de biblioteci C ++ și cod sursă devine mai complicat să le gestionați pe toate. Un instrument precum CMake facilitează realizarea procesului de construire.

CMake va fi disponibil în mod implicit atunci când alegeți să includeți suport C ++ la începutul proiectului. De asemenea, trebuie să utilizați o închidere Gradle pentru a împacheta bibliotecile în fișierul APK.

1612096928 802 Cum sa incepeti sa utilizati codul C in proiectul

ABI

După cum știți, Android este distribuit pentru o varietate de dispozitive. Fiecare dispozitiv ar putea avea o arhitectură CPU diferită. Când dezvoltați o aplicație Android care conține cod C ++, ar trebui să vă preocupe platformele pe care va rula aplicația dvs.

Vă amintiți mecanismul de construire C ++ pe care l-am introdus mai sus? Codul C ++ trebuie compilat ca o bibliotecă pentru fiecare platformă pe care o vizați. Puteți compila biblioteca pentru toate platformele acceptate sau puteți alege să o compilați pentru o singură platformă.

Rețineți că suportul ABI pe 64 de biți va fi obligatoriu cu versiunea Android Pie dacă doriți să introduceți aplicația în Google Play Store.

1612096928 719 Cum sa incepeti sa utilizati codul C in proiectul
Tabel de asistență Android pentru diferite procesoare.

JNI

Acesta este ultimul lucru pe care aș dori să îl prezint în ceea ce privește utilizarea C ++ în Android. După cum am menționat anterior, vă prezint aceste concepte, având în vedere că doriți să dezvoltați o aplicație folosind Java.

JNI este o abreviere pentru Java Native Interface. Permite părților C ++ și Java să vorbească între ele în termeni simpli. De exemplu, dacă doriți să apelați o funcție din C ++ în Java, ar trebui să scrieți o interfață JNI în acest scop.

1612096929 721 Cum sa incepeti sa utilizati codul C in proiectul

Native-lib.cpp este interfața și conectează codul C ++ la codul Java. În exemplul de mai sus, singurul cod C ++ este JNI în sine. Cu toate acestea, puteți include bibliotecile pe care doriți să le utilizați și să implementați o funcție care le apelează. Această nouă funcție poate fi apelată din partea Java. Deci funcționează ca o punte în acest fel.

Lucruri de făcut în cazul în care doriți să încercați

Aici aveți toate cunoștințele necesare și de bază pentru a utiliza C ++ în proiectul dvs. Android. Dacă doriți să încercați, iată cum puteți crea un proiect Android simplu cu cod C ++.

Imaginile de mai jos vă arată pașii pentru a începe un astfel de proiect. După ce le-ați terminat, vă recomandăm să citiți această postare pentru a modifica și a înțelege mecanismul mai profund.

1612096929 787 Cum sa incepeti sa utilizati codul C in proiectul
1612096929 456 Cum sa incepeti sa utilizati codul C in proiectul

Această postare a fost doar o introducere. Nu uitați că mai sunt multe lucruri de învățat. Cu toate acestea, am urmărit să vă prezint cele mai importante lucruri despre conceptul de utilizare a C ++.

1612096930 412 Cum sa incepeti sa utilizati codul C in proiectul