În această serie de tutori, veți cunoaște limba Java, limba de programare folosită pentru a dezvolta aplicații Android. Scopul nostru este de a pregăti pe cei deja familiarizați cu un limbaj de programare, cum ar fi PHP sau Obiectiv-C, pentru a deveni confortabil în lucrul cu limbajul de programare Java și pentru a vă scufunda în dezvoltarea aplicațiilor Android. În acest tutorial, veți primi o scurtă introducere la fundamentale Java, inclusiv programare orientată obiect, moștenire și multe altele. Dacă sunteți nou la Java, sau doar căutați să citiți detaliile, atunci aceasta este seria tutorial pentru tine!
În ceea ce privește premisele, vom presupune că înțelegeți cum să programați (probabil în PHP sau Visual Basic sau C ++), dar că nu sunteți familiarizați cu specificul programării în limba Java. Nu vă vom învăța să programați; vă vom oferi exemple clare de construite și principii de limbă utilizate în mod obișnuit în Java, în timp ce vom arăta câteva sfaturi și trucuri specifice pentru Android.
Din punct de vedere tehnic, nu aveți nevoie de niciun fel de instrumente pentru a finaliza acest tutorial, dar cu siguranță veți avea nevoie de ele pentru a dezvolta aplicații Android.
Pentru a dezvolta aplicații Android (sau orice aplicații Java, de pildă), aveți nevoie de un mediu de dezvoltare pentru a scrie și a construi aplicații. Eclipse este un mediu de dezvoltare foarte popular (IDE) pentru Java și IDE preferat pentru dezvoltarea Android. Este disponibil gratuit pentru sistemele de operare Windows, Mac și Linux.
Pentru instrucțiuni complete despre cum să instalați Eclipse (inclusiv versiunile acceptate) și SDK-ul Android, consultați site-ul Web pentru dezvoltatorii Android.
Aplicațiile Android sunt dezvoltate folosind limba Java. De acum, aceasta este singura opțiune pentru aplicațiile native. Java este un limbaj de programare foarte popular dezvoltat de Sun Microsystems (acum deținut de Oracle). Dezvoltat de mult timp după C și C ++, Java încorporează multe dintre caracteristicile puternice ale acestor limbi puternice, abordând în același timp unele dintre dezavantajele lor. Totuși, limbile de programare sunt la fel de puternice ca și bibliotecile lor. Aceste biblioteci există pentru a ajuta dezvoltatorii să construiască aplicații.
Unele dintre caracteristicile importante ale Java sunt:
Android se bazează foarte mult pe aceste fundamente Java. SDK-ul Android include numeroase biblioteci standard Java (biblioteci de structuri de date, biblioteci de matematică, biblioteci de grafică, biblioteci de rețea și tot ce ai putea dori), precum și biblioteci speciale Android care vă vor ajuta să dezvoltați aplicații Android minunate.
Java este ușor de învățat din mai multe motive. Cu siguranță nu există lipsă de resurse Java pentru a vă ajuta să învățați limba, inclusiv site-uri web, tutoriale, cărți și clase. Java este una dintre limbile cele mai discutate, predate și utilizate pe planetă. Este folosit pentru multe tipuri diferite de proiecte de programare, indiferent de scara lor, de la aplicații web la aplicații desktop la aplicații mobile.
Dacă veniți dintr-un mediu de programare tradițional, cum ar fi C sau C ++, veți găsi sintaxa Java destul de similară. Dacă nu sunteți, luați mângâiere atunci când știți că ați ales una dintre cele mai ușoare limbi de învățat. Veți fi în picioare în cel mai scurt timp.
În cele din urmă, Java este una dintre limbile mai ușor de citit de om acolo, prin care înțelegem că o persoană care nu știe nimic despre programare poate adesea să privească un cod Java și să aibă cel puțin o idee despre ceea ce face. Luați în considerare următorul exemplu:
char caracter = 'a'; dacă (caracter == 'a') doSomething (); altceva doSomethingElse ();
Dacă citiți cu ușurință codul cu voce tare, puteți spune destul de mult că acest fragment de cod face. Există o variabilă cu o singură literă numită caracter. Dacă variabila caracter este egală cu litera a, atunci facem ceva (apelați metoda doSomething ()), altfel facem altceva (apelând metoda doSomethingElse ()).
Cu multe limbi de programare, trebuie să utilizați un compilator pentru a reduce codul în limbajul mașinii pe care dispozitivul îl poate înțelege. În timp ce acest lucru este bine și bun, dispozitive diferite folosesc limbi diferite ale mașinilor. Aceasta înseamnă că este posibil să aveți nevoie să compilați aplicațiile pentru fiecare dispozitiv sau limbă de mașină diferită - cu alte cuvinte, codul dvs. nu este foarte portabil. Nu este cazul cu Java. Compilerele Java convertesc codul dvs. din fișierele sursă Java, care pot fi citite de om, în ceva numit "bytecode" în lumea Java. Acestea sunt interpretate de o mașină virtuală Java, care funcționează la fel ca un CPU fizic care ar putea funcționa pe codul mașinii, pentru a executa efectiv codul compilat. Deși se pare că acest lucru este ineficient, au fost depuse multe eforturi pentru a face acest proces foarte rapid și eficient. Aceste eforturi s-au plătit în acea performanță Java, în general, în al doilea rând, numai în comparațiile C / C ++ în performanța lingvistică comună.
Aplicațiile Android rulează într-o mașină virtuală specială numită Dalvik VM. Deși detaliile acestui VM nu sunt semnificative pentru dezvoltatorul mediu, poate fi util să vă gândiți la Dalvik VM ca pe un balon în care rulează aplicația dvs. Android, permițându-vă să nu vă faceți griji dacă dispozitivul este un Droid Motorola HTC Evo sau cel mai recent toaster care rulează Android. Nu vă pasă dacă dispozitivul este prietenos cu Dalvik VM - și asta este misiunea producătorului dispozitivului de a implementa, nu a dvs..
Să luăm această idee cu bule un pic mai departe. Deoarece aplicațiile Java se execută în interiorul bubble-ului, care este o mașină virtuală, acestea sunt izolate de hardware-ul de bază al dispozitivului. Prin urmare, o mașină virtuală poate încapsula, conține și gestiona execuția codului într-un mod sigur, în comparație cu limbile care funcționează direct în codul mașinii. Platforma Android ia lucrurile un pas mai departe. Fiecare aplicație Android rulează pe sistemul de operare (bazat pe Linux) folosind un alt cont de utilizator și în propria instanță a Dalvik VM. Aplicațiile Android sunt monitorizate îndeaproape de sistemul de operare și se închid dacă nu joacă frumos (de ex., Folosesc prea multă putere de procesare, nu răspund, resursele de deșeuri etc.). Prin urmare, este important să dezvoltați aplicații care sunt stabile și receptive. Aplicațiile pot comunica între ele folosind protocoale bine definite.
Ca multe limbi, Java este încă un limbaj compilat, chiar dacă nu se compilează până la codul mașinii. Aceasta înseamnă că, dezvoltatorul, trebuie să vă compilați proiectele Android și să le includeți în pachete pentru a le instala pe dispozitive. Mediul de dezvoltare Eclipse (folosit cu plug-in-ul de dezvoltare Android) face acest lucru destul de nedureros. În Eclipse, compilarea automată este de obicei activată în mod implicit. Aceasta înseamnă că de fiecare dată când salvați un fișier proiect, Eclipse recompune modificările pentru pachetul de aplicații. Veți vedea imediat erori de compilare. Eclipse interpretează și Java în timp ce tastați, oferind colorarea și formatarea codului la îndemână, precum și afișarea mai multor tipuri de erori pe măsură ce mergeți. De multe ori, puteți să faceți clic pe eroare și să activați Eclipse în mod automat o tipografie sau să adăugați o declarație de import sau să furnizați un stub de metode pentru dvs., economisind o mulțime de scriere.
Puteți compila manual codul dvs. dacă doriți. În Eclipse, veți găsi setările Build în meniul de proiect. Dacă ați activat funcția "Construiți automat", puteți să alegeți opțiunea "Curățare ..." care vă va permite să efectuați o reconstrucție completă a tuturor fișierelor. Dacă opțiunea "Construiți automat" este dezactivată, opțiunile de meniu "Construiți toate" și "Construiți proiectul" sunt activate. "Build All" înseamnă a construi toate proiectele din spațiul de lucru. Puteți avea multe proiecte într-un spațiu de lucru Eclipse.
Procesul de construire, pentru proiectele obișnuite Java, are ca rezultat un fișier cu extensia JAR - Java ARarpagic. Aplicațiile Android iau fișierele JAR și le împachetează pentru implementare pe dispozitive ca Android PACKfișiere de vârstă cu o extensie .apk. Aceste formate includ nu numai codul dvs. Java compilat, ci și orice alte resurse, cum ar fi șiruri de caractere, imagini sau fișiere de sunet pe care aplicația dvs. trebuie să le execute, precum și fișierul Manifest Application, AndroidManifest.xml. Fișierul Manifest Android este un fișier solicitat de toate aplicațiile Android, pe care îl utilizați pentru a defini detaliile despre configurația aplicației.
Bine. Timp pentru o scurtă și 20.000 de vizualizări a programelor orientate pe obiecte (OOP). OOP este un stil sau o tehnică de programare care se bazează pe definiția structurilor de date numite obiecte. Pentru cei noi la OOP, un obiect poate fi considerat ca un tip de date personalizat. De exemplu, este posibil să aveți un obiect de câine, care reprezintă planul pentru un câine generic, cu un nume, o rasă și un gen. Ați putea apoi să creați diferite exemple de obiecte Dog pentru a reprezenta câini specifici. Fiecare obiect de câine trebuie să fie creat prin apelarea sa constructor (o metodă care are același nume ca și obiectul însuși și poate sau nu poate avea parametri pentru setarea valorilor inițiale). De exemplu, următoarele obiecte de câine utilizează un constructor cu trei parametri (nume, rasă, sex):
Dog dog1 = câine nou ("Lassie", collie, feminin); Dog dog2 = câine nou ("Fifi", pudel, femelă); Dog dog3 = câine nou ("Asta", foxterrier, masculin);
Deci, unde este definit acest obiect Dog? Ei bine, aici trebuie să începem să definim unele dintre blocurile fundamentale ale limbajului de programare Java. A clasă oferă o definiție pentru un obiect. Prin urmare, există o clasă de câini undeva - fie definită de dvs., fie în unele biblioteci undeva. În general, o clasă va fi definită în propriul fișier, cu numele de fișier care corespunde cu numele clasei (de ex. Dog.java). Există excepții de la această regulă, cum ar fi clasele definite în cadrul altor clase (atunci când o clasă este declarată într-o clasă, ea este în general definită pentru a fi utilizată în clasa părinte doar ca o clasă de ajutor și menționată ca clasa interioară).
Când doriți să trimiteți un obiect dintr-o altă clasă, trebuie să includeți un declarație de import în partea de sus a fișierului de clasă, ca și cum ați folosi o instrucțiune #include într-o limbă compilată, cum ar fi C.
O clasă descrie în mod obișnuit datele și comportamentul unui obiect. Comportamentul este definit folosind clasa metode. Metodă este termenul obișnuit pentru o subrutină într-un limbaj OOP. Multe clase obișnuite de obiecte sunt definite în bibliotecile de clasă partajată, cum ar fi kiturile de dezvoltare software (SDK), în timp ce altele sunt definite de dvs., dezvoltatorul, pentru propriile scopuri. Software-ul este apoi construit prin utilizarea și manipularea instanțelor de obiecte în moduri diferite.
Rețineți că aceasta este o definiție foarte generalizată a POR. Există cărți întregi scrise pe această temă. Dacă doriți să aflați mai multe despre OOP, iată câteva resurse pe care ați putea dori să le verificați:
Notă: în acest tutorial folosim o mulțime de terminologii diferite. Există mai multe moduri de a se referi la un anumit concept (de ex. Clasa superclass vs. parent), ceea ce este confuz pentru programele orientate spre obiecte noi sau obiect. Dezvoltatorii diferiți folosesc termeni diferiți și, prin urmare, am încercat să menționăm sinonime acolo unde este cazul. Decideți ce termeni veți folosi este o alegere personală.
Iată un alt aspect important Conceptul Java pe care îl veți întâlni într-o mulțime: moştenire. Pur și simplu, moștenirea înseamnă că clasele Java (și, prin urmare, obiectele) pot fi organizate în ierarhii cu clase mai mici, mai specifice, în ierarhie moștenind comportament și trăsături din clase mai mari, mai generice.
Acest concept este cel mai bine ilustrat prin exemplu. Să presupunem că dezvoltăm o aplicație Java pentru a simula un acvariu. Acest acvariu are pește în el. Prin urmare, am putea defini o clasă pentru a reprezenta un pește. Această clasă, numită Pește, ar putea include câmpuri de date (numite și atribute sau variabile membre de clasă) pentru a descrie un obiect de pește: specie, culoare și dimensiune; precum și unele din comportamentul său sub formă de metode (numite și subrutine sau funcții în limbile de procedură), cum ar fi mânca (), somnul () și makeBabyFish ().
Un tip special de metodă, numit a constructor, este folosit pentru a crea și a inițializa un obiect; constructorii sunt numiți la fel ca clasa lor și pot include parametri. Următoarea clasă de pești are doi constructori: unul pentru crearea unui obiect generic Fish și altul pentru construirea unui anumit obiect Fish cu unele date inițiale. Veți vedea, de asemenea, că clasa Fish are două metode eat (): una pentru a mânca ceva la întâmplare și altul pentru a mânca un alt pește, care ar fi reprezentat de un alt exemplu al clasei Fish:
clasa publica Pește private String mSpecies; String privat mColor; private int mSize; Pește () // pește generic mSpecies = "necunoscut"; mColor = "necunoscut"; mSize = 0; Pește (specii de coarde, culoare șir, mărime int) mSpecies = specie; mColor = culoare; mSize = dimensiune; void public mânca () // mănâncă alge; public void mânca (Fish fishToEat) (/ / mânca un alt pește! ; void public void () // sleep; public void makeBabyFish (pește de peșteSpouse, int numBabies) / / Make numbabies în valoare de pește pentru copii, cu soțul de pește;
Clasele pot fi organizate în ierarhii, unde a clasa derivată (sau subclasă) include toate caracteristicile sale clasa părinților (sau superclasei), dar le îmbunătățește și le adaugă pentru a defini un obiect mai specific folosind cuvântul cheie extins. Aceasta se numește moștenire.
De exemplu, clasa Fish poate avea două subclase: FreshwaterFish și SaltwaterFish. Aceste subclase ar avea toate caracteristicile clasei Fish, dar ar putea personaliza în continuare obiectele prin atribute și comportamente noi sau comportamente modificate din clasa părintească Fish. De exemplu, clasa FreshwaterFish poate include informații despre tipul de mediu al apei dulci (de exemplu, râu, lac, iaz sau baltă). În mod similar, clasa SaltwaterFish ar putea personaliza metoda makeBabyFish () astfel încât peștele să-și mănânce mate după reproducere (așa cum este definit în clasa super), folosind mecanismul de suprascriere, după cum urmează:
clasa publica SaltwaterFish extinde Pește @Override public void makeBabyFish (Pește peșteSpouse, int numBabies) // apel metoda părinte super.makeBabyFish (fishSpouse, numBabies); // mănâncă mate mânca (peșteSpouse);
În Java, puteți organiza comportamente obiect în ceea ce se numesc interfețe. În timp ce o clasă definește un obiect, o interfață definește un comportament care poate fi aplicat unui obiect. De exemplu, am putea defini o interfață Swimmer care oferă un set de metode care sunt comune în toate obiectele care pot înota, indiferent dacă sunt pești, vidri sau androizi submersibili. Interfața Swimmer poate să specifice patru metode: startSwimming (), stopSwimming (), dive () și surface ().
interfața publică Swimmer void startSwimming (); void stopSwimming (); void dive (); suprafață void ();
O clasă ca Fish ar putea implementa apoi interfața Swimmer (folosind cuvântul cheie implementat) și va oferi implementări ale comportamentului de înot:
clasă publică Pește implementează înotător // Furnizează implementări ale celor patru metode în cadrul interfeței Swimmer
Ierarhiile de clasă, cum ar fi clasele noastre de pește, pot fi apoi organizate în pachete. Un pachet este pur și simplu un set de clase și interfețe, grupate împreună. Dezvoltatorii folosesc spații de nume pentru a denumi unic pachetele. De exemplu, am putea utiliza com.mamlambo.aquarium sau com.ourclient.project.subproject ca numele pachetului nostru pentru a urmări cursurile noastre legate de pești.
Wow! Tocmai v-ați angajat într-un curs în Java pentru dezvoltare Android. Am acoperit o cantitate destul de intensă de material aici, deci lăsați lucrurile să se stabilească puțin înainte de a trece la următoarea lecție a acestei serii de tutorial. În Lecția 2, ne concentrăm atenția asupra detaliilor din sintaxa Java.
Ați zgâriat doar suprafața de dezvoltare Java pentru dezvoltarea Android. Verificați toate celelalte tutoriale mari de pe Mobiletuts + pentru a vă arunca cu adânc în dezvoltarea Java și Android. Mult noroc!
Dezvoltatorii mobili Lauren Darcey și Shane Conder au coautorizat mai multe cărți despre dezvoltarea Android: o carte de programare în profunzime intitulată Dezvoltarea aplicațiilor fără fir Android și Sams TeachYourself Dezvoltarea de aplicații Android în 24 de ore. Când nu scriu, își petrec timpul dezvoltând software-ul mobil la compania lor și oferind servicii de consultanță. Acestea pot fi obținute prin e-mail la androidwirelessdev@[email protected], prin intermediul blogului lor la androidbook.blogspot.com, și pe Twitter @ androidwireless.
Dacă doriți să începeți dezvoltarea cu Android, un șablon de aplicație pentru Android este un loc minunat pentru a începe. Consultați selecția de pe Envato Market - sau puteți arăta mai exact articolele Java.
Șabloane de aplicații Android pe Envato MarketDe asemenea, puteți găsi dezvoltatori Android de la Envato Studio pentru a vă ajuta cu totul, de la design-ul UI la crearea unei aplicații native Android.
Dezvoltatorii Android de pe Envato Studio