Kako podesiti pametne telefone i računare. Informativni portal

Priprema za razvoj. Instalacija Android Studio

Android - besplatno operativni sistem, baziran na Linuxu sa Java programskim interfejsom.

Ako imate želju da razvijate aplikacije za telefone pod Android kontrola, tada morate pažljivo pripremiti i instalirati sve potrebne alate za posao.

Instalacija Android Studio

Članci se često prerađuju jer neke stvari brzo zastare. Ali ne mogu sve pratiti, tako da ćete morati sami shvatiti stvari ako naiđete na razlike.

Važno je shvatiti da je sama aplikacija napisana na Javi (a sada iu Kotlinu), a razvojno okruženje je odabrano po vašem ukusu. Šta se može uraditi na Android Studio(ili u njegovom starijem bratu IntelliJ IDEA), može se uraditi u Eclipse-u i drugim uređivačima. Iako od 2016 zvanična podrška Eclipse je zaustavljen.

Instalacioni paket za studio možete preuzeti sa stranice https://developer.android.com/studio/index.html

Sama instalacija ne bi trebala uzrokovati probleme. Instalacioni paket uključuje potreban minimum. Ponekad treba da trčiš Android SDK Upravljajte i provjerite da li postoje nove verzije SDK-a kroz meni Alati | Android | SDK Manager:

S vremenom ćete sami shvatiti šta trebate instalirati, a šta nije potrebno. Prvo se složite sa uslovima koje vam menadžer nudi po podrazumevanoj vrednosti.

Korisnik iz Bugarske je napisao da Win64 zahtijeva administratorska prava prilikom instaliranja ili ažuriranja. Imajte na umu. Imam na čisti sistem nije ništa pitao.

U studijskoj verziji 2.3 (možda ranije) instaliran je OpenJDK paket, koji je alternativa JDK-u iz Oraclea. U postavkama studija postoji napomena da je OpenJDK preporučena opcija, iako možete odrediti putanju do standardnog JDK. U svakom slučaju, imat ćete Java 8 bez obzira koju opciju odaberete.

Kreiranje emulatora

Za otklanjanje grešaka u aplikacijama koristimo emulator telefona - virtuelnu mašinu na kojoj će se naša aplikacija pokrenuti. Možete koristiti i pravi uređaj.

Sada, u trenutku instalacije, studio kreira jedan uređaj za emulator. Ako to nije slučaj, uvijek možete instalirati ručno. Također možete dodati druge uređaje pod različite verzije Android, rezolucije ekrana itd.

Da kreirate emulator telefona, izaberite iz menija Alati | Android | AVD Manager. Kada ga pokrenete prvi put, pojavit će se dijaloški okvir čarobnjaka.

Pritisnite dugme Kreirajte virtuelni uređaj a u novom prozoru vidimo skup mogućih emulatora, uključujući i satove. Preuzmite potrebne emulatore. Za početak, jedan emulator je sasvim prikladan.

Unesite bilo koje prijateljsko ime, na primjer, Android4. Izaberi potrebnu verziju Android, veličina ekrana itd.

Ako je potrebno, možete kreirati emulatore za svaku verziju OS-a i provjeriti funkcionalnost programa. Preostale postavke se mogu ostaviti nepromijenjene. Uvijek se možete vratiti na postavke i ponovo urediti. Često se preporučuje korištenje opcije Koristite Host GPU iskoristiti prilike GPU. Ovo povećava brzinu emulatora. Pritisnite dugme uredu.

Dodati emulatori će biti pohranjeni u upravitelju emulatora.

Ako ste kreirali nekoliko emulatora, odaberite onaj koji vam je potreban i pritisnite dugme sa zelenim trokutom da pokrenete emulator. Ikona olovke vam omogućava da uređujete postavke. Ali obično se emulator ne pokreće zasebno. Kada pokrenete aplikaciju, sam studio će ponuditi pokretanje emulatora.

zapamtite da virtuelne mašine podrazumevano se spremaju u fasciklu korisnika, a putanje fascikle ne bi trebalo da sadrži ruske znakove da bi se izbegli problemi.

Ako i dalje upadate u ovu zamku, onda ću vam dati link za promjenu korisničkog foldera na engleski: http://www.cherneenet.ru/lokalnaj_zapis.html (hvala čitatelju Evgeny Stepanov na savjetu). Također možete urediti ini datoteku i odrediti putanju do virtuelni uređaj na takav način da na putu nema ruskih slova (prema tome, samu datoteku *.avd također treba premjestiti na drugu lokaciju).

Ovisno o snazi ​​vašeg računala, možda ćete morati malo pričekati da se emulator prvi učita. Intel emulator se učitava mnogo brže. Također možete koristiti pravi telefon. Ja obično koristim stari telefon i emulator za nove verzije Androida.

Testiranje na stvarnom uređaju

Preporučljivo je testirati konačnu verziju aplikacije na stvarnom uređaju. Počevši od Androida 4.4, morate aktivirati način rada programera na svom uređaju (tabletu, telefonu, satu). Da biste to učinili, idite na Postavke, otvorite stranicu "O telefonu" i kliknite sedam puta na liniju s brojem verzije Broj gradnje. Nakon toga će se pojaviti u postavkama nova stavka Za programere ili nešto slično ako proizvođač koristi svoju školjku.

Kada otvorite stranicu programera, morate omogućiti USB otklanjanje grešaka. Uključujem i opciju Ne isključujte ekran. Neki uređaji zahtijevaju instaliranje zasebnog drajvera; informacije potražite na web stranici proizvođača.

Rad u terminalskom modu

Studio vam takođe omogućava da pokrenete komande iz komandne linije poseban prozor. Radi praktičnosti, trebali biste malo prilagoditi sistem za sebe.

Imam instaliranu nelokalizovanu verziju Windows-a, tako da će neke tačke biti date na engleskom.

Za Windows 7/8 otvoren Control Panel | Sistem, pritisnite dugme Napredni sistem Postavke. U novom prozoru kliknite na dugme Varijable okruženja.

Pronađite varijablu Put na listi Sistemske varijable

Kliknite na dugme Uredi da uredite varijablu. Dodajte tačku i zarez na kraju reda, a zatim navedite putanje mape platformski alati I alata, koji su uključeni u SDK. U mom slučaju je ispalo ovako:

;D:\Android\SDK\platform-tools;D:\Android\SDK\tools

Zatvorite sve prozore (bolje ponovo pokrenuti). Provjerite da li sve radi kako treba. Trči komandna linija i unesite naredbu:

Echo %path%

Trebalo bi da vidite red sa spiskom svih putanja uključenih u varijablu Put, uključujući i vaše.

Za sljedeću provjeru unesite naredbu:

Pojaviće se lista parametara komande.

Pokušajte i sa komandom:

Otvoriće se prozor SDK Manager.

Ako ste nešto pogrešno napisali, komande neće biti prepoznate i morate ispraviti grešku u pisanju putanje.

A sada da uradimo ove operacije u samom studiju. Pokrenite studio i otvorite projekat (pogledajte sljedeću lekciju). Na dnu statusne trake nalazi se kartica. Prebaci se na to. U prozoru terminala unesite bilo koju od prethodne dvije naredbe.

Dokumentacija

Najnovija dokumentacija se uvijek može pronaći na developer.android.com. Ako imate problema sa internetom, onda u podfolderu /docs u vašem folderu instaliran Android SDK, možete pronaći njegovu lokalnu kopiju (ako niste odbili da ga instalirate).

Cat instalacija

Ova točka nije obavezna, ali kao što pokazuje praksa, posjedovanje mačke vam omogućava da postignete brzi rezultati u učenju Androida. Mačku možete pokupiti na ulici, udomiti je iz skloništa ili kupiti preko oglasa. Bilo koja vrsta će odgovarati - crvena, prugasta, crna. Mačku treba oprati, nahraniti i smjestiti u blizini. Vaša karma u ovom trenutku raste i proces savladavanja gradiva će ići brže.

Pripreme za razvoj su završene. Sada je sljedeći korak kreiranje prve aplikacije.

Zavalite se i vežite pojaseve - očekuje nas uzbudljivo putovanje u svijet razvoja Android aplikacija.

Kada počnete da savladavate razvoj za bilo koju platformu, sigurno ćete odmah naići na mnoge zamke koje su na prvi pogled nevidljive. Većina njih će se odnositi na sam proces kodiranja: nedosljednosti u API-ju, skrivene funkcije, ograničenja, poseban stil programiranja za platformu. Tu su i kamenčići koji leže malo dalje: testiranje i automatska optimizacija, kreiranje kliparta i ikona, primanje automatskih izvještaja o padu. Neiskusni Android programeri izlažu se riziku da se obe noge poseku.

U ovom članku ćemo razmotriti probleme razvoja Androida u kontekstu uslužnih programa i alata. Riješit ćemo se potrebe za povezivanjem pametnog telefona pomoću kabla tokom testiranja i otklanjanja grešaka na uređaju, a aplikaciju ćemo podijeliti na Lite verzije i Pro, mi ćemo u njega ugraditi mehanizam automatska generacija i slanjem izvještaja o padu na server, automatiziramo testiranje, zamagljujemo i optimiziramo kod, a za nekoliko minuta kreiramo ikonu i sve potrebne resurse za aplikaciju. Idi.

1. Spori emulator

Dakle, skicirali ste svoju prvu aplikaciju i vrijeme je da je pokrenete i testirate njenu funkcionalnost. U tu svrhu, Android SDK uključuje emulator. Dugo su mu zamjerali da je spor, ali s izdavanjem Android Studio 2.0 situacija se značajno popravila - x86 verzija emulatora dobila je hardversko ubrzanje, tako da sada radi brže od stvarnih uređaja. Osim toga, sada ima zgodnu GUI, sa kojim možete simulirati pozive, SMS, promjenu GPS podaci i mrežni kvarovi, odnosno sve ono za šta ste prethodno morali koristiti alate komandne linije.

Stoga, ako još niste nadogradili, toplo preporučujem da to učinite, a da ne spominjemo prelazak sa Eclipsea. I obavezno odaberite x86 verziju emulatora u AVD menadžeru; ARM verzija ne podržava hardversko ubrzanje.

2. Pametni telefon na uzici

Druga faza je testiranje za pravi uređaj. Ovdje je sve jednostavno: povezujete pametni telefon putem USB-a, instalirate drajvere, omogućavate način otklanjanja grešaka u postavkama programera, nakon čega se uređaj pojavljuje na listi aplikacija dostupnih za instalaciju (pored emulatora). Jedini problem je što u u ovom slučaju uređaj mora biti povezan sa računarom pomoću kabla, a ako je ovo vaš glavni pametni telefon koji prima pozive i poruke, onda o pogodnostima ne treba govoriti.

Srećom, Android Studio (ili bolje rečeno, ADB uslužni program, koji koristi za komunikaciju s uređajem) podržava umrežavanje. Ali ovu funkciju još uvijek treba aktivirati. Ako imate rootan pametni telefon, onda imate sreće: možete omogućiti otklanjanje grešaka na mreži pomoću WiFi ADB aplikacije. Slijed:

  1. Instalirajte WiFi ADB, pokrenite ga, omogućite mrežni način rada pomoću prekidača i zapamtite IP adresu.
  2. Pokrenite Android Studio.
  3. Otvorite konzolu, idite u direktorij s instaliranim SDK-om, zatim na platformske alate i pokrenite sljedeću naredbu:

    $ adb connect IP adresa

Sada, ako pokušate da napravite i pokrenete aplikaciju, takođe ćete videti svoj pametni telefon na listi uređaja. Oni koji nisu root mogu ponovo pokrenuti ADB mrežni način rada, nakon što ga povežete kablom. Ovo se radi ovako:

  1. Povezujemo pametni telefon i instaliramo drajvere.
  2. Omogućite način otklanjanja grešaka u postavkama programera.
  3. Otvorite konzolu, idite na direktorij SDK/platform-tools i pokrenite sljedeću naredbu:

    $ adb tcpip 5555

  4. Povežite se na pametni telefon putem mreže:

    $ adb connect IP adresa

IP adresu možete pronaći kroz podešavanja: „O telefonu (O tabletu) → Opće informacije", stavka "IP adresa".

3. Biblioteke

U redu, čini se da vaš hak koji ste sastavili za pola sata radi, i vrijeme je da ga pretvorite u pravu aplikaciju sa prekrasnim interfejsom i widgetima za vaš desktop. U ovoj fazi, vjerovatno će vam trebati eksterne biblioteke koje implementiraju različite koncepte interfejsa, obrasce programiranja i komunikaciju sa eksternim servisima. A ako je s ovim posljednjim sve jasno (potreban vam je SDK za Dropbox - otvorite portal za programere i slijedite upute), onda je s ostalim već teže. Gdje ih potražiti i koje su biblioteke bolje?

Najsveobuhvatniji bibliotečki katalog je Android Arsenal. Tamo ćete naći skoro sve što vam je potrebno. Dostupan zgodna pretraga i sortiranje po ocjeni, za svaku biblioteku postoje upute kako je povezati sa svojim projektom, uključujući korištenje standardne za Android sistemi Gradle gradi: samo dodajte spremište u projektnu datoteku build.gradle i navedite biblioteku na listi zavisnosti.


Na ovoj stranici možete pronaći odličnu listu biblioteka koje morate imati. U svoje lično ime, dodaću da u prvim fazama treba odmah učiti Bodež 2, RxJava I Retrofit. Kako postanete napredni programer, na ovaj ili onaj način ćete početi koristiti ove biblioteke.

4. Ikone i klipart

Konačno, nakon nekoliko dana ili sedmica, počinjete da vidite puna aplikacija. Ali još uvijek nema grafičkog materijala: ikona je standardna, u obliku zelenog robota, umjesto kliparta su placeholderi. Očigledno, bez grafike nema smisla ići na pijace, ali plaćati ikonu za svoju prvu aplikaciju je također glupo. sta da radim?

Zapravo, ikona se može generirati. Postoji divan web servis Android Asset Studio, sa kojim ćete za samo par minuta dobiti prekrasnu ikonu u svim mogućim rezolucijama. Kao osnovu, možete snimiti sliku koju ste pripremili, jednostavno napisati tekst ili, najbolje od svega, odabrati neki od isječaka koji pruža usluga. Također možete postaviti stil ikone (okrugla, kvadratna, itd.) iOS stil...), boja, podešavanje senki i drugih parametara. Kao rezultat, imat ćete na raspolaganju arhivu ic_launcher.zip, koja se mora postaviti u AndroidstudioProjects/APP_NAME/app/src/main/res direktorij. Obavezno kreirajte web ikonu tako što ćete kliknuti na dugme "Generiraj web ikonu". Trebaće ti.


Ista usluga vam omogućava da kreirate ikone za ActionBar i statusnu traku. Princip je otprilike isti, samo ću reći da ikone sa uvlačenjem od 15% od ivica najbolje izgledaju u statusnoj traci.

Osim toga, trebat će vam takozvana Feature Image. Ovo posebna slika, koji Play Market i druge prodavnice aplikacija koriste se kao traka na vrhu ekrana (kada otvorite stranicu aplikacije na pametnom telefonu). Može se generirati korištenjem druge usluge. Za snimanje ekrana, možete koristiti službenu uslugu od Googlea. Stvara okvir pametnog telefona oko snimka ekrana.

5. Izvještaji o padu

Aplikacija je spremna, postoji ikona, sučelje je prikladno, kod je kvalitetan. Vrijeme je za testiranje, a prvo što uradite je da pošaljete aplikaciju svojim prijateljima i poznanicima. Ali evo problema: za neke od njih se aplikacija ruši, ali kod vas sve radi dobro i ne možete ponoviti radnje koje su dovele do pada. Šta treba da uradite, zamolite prijatelje da vam pošalju logcat listu?

Ne, potreban nam je sistem za izvještavanje o padu. Ima ih ogroman broj, a svi implementiraju isti princip rada: povežite se s aplikacijom mala biblioteka, koji u trenutku pada beleži stack trace i druge podatke o padu i šalje ih serveru, a zatim poseban web interfejs generiše lepe i vizuelne izveštaje na osnovu njih.

Jedan od najpopularnijih takvih sistema je Fabric, ali preporučujem da se osvrnete na Splunk MINT: besplatan je, jednostavan i lako integrisan u aplikaciju (samo dodajte jednu liniju koda). Da biste počeli da ga koristite, potrebno je da povežete SDK sa projektom; to se može uraditi koristeći isti Gradle. Otvorite datoteku build.gradle (onu koja se odnosi na aplikaciju, a ne na cijeli projekat) i dodajte sljedeće redove:

Repozitorijumi ( maven ( url "https://mint.splunk.com/gradle/" ) ) zavisnosti ( kompajlirajte "com.splunk.mint:mint:5.0.0")


Nakon ovoga, Splunk MINT će vam pokazati red koda koji treba umetnuti u kod:

Nastavak je dostupan samo pretplatnicima

Opcija 1. Pretplatite se na Hacker za čitanje svih materijala na stranici

Pretplata će vam omogućiti da pročitate SVE plaćene materijale na stranici u navedenom periodu. Prihvatamo plaćanje bankovne kartice, elektronski novac i transfere sa računa mobilnog operatera.

Prije nekog vremena službeno IDE za Android postojao je Eclipse (kao de facto standard za Javu) sa ADT dodatkom. Nešto kasnije, JetBrains IDE je počeo da dobija na popularnosti među Java programerima, tada se za njega pojavio dodatak za Android razvoj i ljudi su počeli polako da prelaze na njega sa Eclipse-a.

Nešto kasnije, Google najavljuje šta će Android Studio raditi na osnovu IDEA. A sada dolazi i drugi Android verzija Studio, a Eclipse se pamti samo kao ruzan san :)

Android Studio— službeno razvojno okruženje za Android. U suštini, Android Studio je poznata Java IDE IntelliJ IDEJA sa dodacima.

On ovog trenutka Postoje sljedeće opcije kada birate Android IDE:

  1. Eklipsa. Najpopularniji IDE za Javu prije nekog vremena, sada ga koristite za razvoj Androida jako se ne preporučuje.
  2. IntelliJ IDEA. Odličan IDE, dobar za Android.
  3. Android Studio. Najbolji IDE za Android. Razlikuje se od IDEJE u malim stvarima, ali te male stvari su jako, jako ugodne i znatno nam olakšavaju rad :) Na ovo ćemo se fokusirati.

Prije svega, morate biti sigurni da imate instaliran JDK ( Java Development Kit). Ovo je neophodna komponenta za razvoj u Javi, a budući da se razvoj za Android odvija u Javi, potrebna je i za razvoj za Android.

Drugo, potvrdite okvire "prikaži brojeve redova" i "prikaži separatore metoda":

Prvi će prikazati brojeve redova lijevo od teksta, drugi će crtati separatore između metoda u kodu.

Ove dvije opcije su nevjerovatno važne, posebno za početnike, i ne razumijem zašto su one po defaultu onemogućene.

Treće, konfigurirajte automatsko dovršavanje. Da biste to učinili, odaberite "Ništa" u "Završavanje osjetljivo na velika i mala slova":

Dozvolite mi da objasnim zašto je to tako. Podrazumevana opcija znači da automatsko dovršavanje radi samo ako je prvo slovo upisano u ispravnom velikom i velikom broju. Opcija None će uzrokovati automatsko dovršavanje bez obzira u kojem slučaju počnete kucati kod.

Standardno značenje ove opcije, kao i prethodne dvije, zbunjuje me.

Kreiranje prvog projekta

Pa, riješili smo postavljanje i instalaciju Android Studija, vrijeme je da kreiramo naš prvi projekat.

U glavnom prozoru Android Studija kliknite na " Započnite novi Android Studio projekat«:

Pojavit će se novi prozor u kojem trebamo izvršiti nekoliko radnji.

U prvom, trebate navesti naziv aplikacije, domenu kompanije (naziv paketa će biti kreiran iz ova dva parametra) i lokaciju projekta na disku:

U Androidu, kao iu Javi, primarni identifikator aplikacije je naziv paketa. Ako ste ranije radili sa Javom, znate šta je to. Za one koji ne znaju, preporučujem Google, ili, na primjer, ovdje.

Zatim će nas Android Studio pitati koje i koje verzije SDK-a želimo koristiti. Za sada će nam biti dovoljan SDK “Telefon i tablet”; postavite verziju API-ja na 16 umjesto preporučenih 15, jer API 15 više nije relevantan i uopće nije rasprostranjen:

Na sljedećem ekranu ćemo biti upitani koje komponente aplikacije želimo kreirati. Odaberite "Empty Activity":

On sljedeći korak samo kliknite na "Završi" bez promjene bilo čega.

Po završetku ovog procesa, konačno ćete vidjeti svoj prvi projekat:

Već je prilično funkcionalan, ali za pokretanje nam je potreban Android emulator.

Kreiranje Android emulatora

Za stvaranje Android emulator trebace nam Android AVD Manager(AVD = Android Virtuelni uređaj). Ne brinite, nećete morati da instalirate ništa drugo. Samo kliknite na ovo dugme:

Zatim na ovom dugmetu:

A onda samo nekoliko puta kliknite "Dalje" i na kraju "Završi"

Lansiranje Hello World

Vrijeme je da pokrenemo naš prvi projekat kreiran u Android Studio!

Kliknite na ovo dugme (ili Shift-F10):

Nakon toga, vidjet ćete dijalog u kojem će se od vas tražiti da odaberete uređaj na kojem IDE treba pokrenuti sastavljenu aplikaciju:

Označite polje označeno strelicom i kliknite na OK. Projekat će početi da se gradi, emulator će se pokrenuti, aplikacija će biti instalirana na emulatoru i aplikacija će se pokrenuti.

Ovo će potrajati (što je vaš računar moćniji, to će vam trebati manje vremena), budući da je emulator prilično spor, uprkos ogromnim poboljšanjima u posljednjih nekoliko godina.

I sada, nakon 1-10 minuta (nakon pokretanja emulatora, projekti će se, naravno, brže sastavljati i pokretati), konačno ćete vidjeti svoj Hello World na ekranu emulatora!

To je sve, a u sljedećoj lekciji ćemo pogledati.

Svaki dan se dodaju nove lekcije! Kako biste bili sigurni da ništa ne propustite, pretplatite se na naš

Da biste pisali aplikacije za Android OS, moraćete da instalirate razvojno okruženje Android Studio (u daljem tekstu AS). Možete pitati, zašto AS, a ne Eclipse? srijeda Razvoj pomračenja radi mnogo brže i teži manje od Android Studija,

ali Google “preporučuje” korištenje AS, jer u budućnosti više neće (ili bolje rečeno već je) prestao da ga podržava. Android Studio je budućnost, da tako kažem. Moraš imati dovoljno moćan računar, poželjno x64 bit, pošto AS koristi oko 3 GB ram memorija, dodajte još 3 GB ovdje za emulator android uređaja... Moj PC ima win 8.1 pro x64, instaliran dual core Intel procesor 3,3 GHz, sa 8 GB RAM-a, i osjećam se sasvim slobodno...

Idite na službenu web stranicu putem veze https://developer.android.com/studio, preuzmite najnoviju verziju potrebna dubina bita. Za danas trenutna verzija android-studio-2-1-2,

bit će težak otprilike 1,2 GB. Zato budite strpljivi ako imate spor internet.

Nakon preuzimanja pokrenite instalacijski program android-studio-2-1-2.exe,

Čarobnjak za instalaciju će vas pitati korak po korak da odredite sastav instalacije,

prihvatite licencu

odaberite lokaciju za instalaciju,

Ponovo čekamo da se instalacija završi.

Nakon toga ćemo pokrenuti Android Studio sa radne površine ili iz menija,

i kliknite na dugme Konfiguriši da konfigurišete SDK. Vidjet ćete listu instalirane verzije android,

za koje možete kreirati aplikacije, po mogućnosti sve. Ako neke verzije nisu instalirane, kliknite na vezu Pokrenite samostalni SDK Manager za instaliranje i ažuriranje paketa.

SDK menadžer će se otvoriti,

označite polja koja su neophodna, kako saznati koje? Menadžer SDK pomoći će vam u tome tako što će primijetiti potrebnih paketa verzije. Zatim kliknite na dugme u donjem desnom uglu koje kaže Instaliraj 1 (1..100) paket..

U vašem slučaju, broj paketa će biti drugačiji. Ako ste vi lično, ili mjesto u kojem živite, pod "zapadnim sankcijama", onda da ažurirate pakete idite na Alati->Opcije... meni,

gdje možete odrediti adresu i port proxy servera,

1. Morate instalirati JDK (Java Development Kit) i JRE (Java Runtime Environment).
Ranije je Android SDK podržavao samo JDK verziju 6, ali to je sada stvar prošlosti. Podržava 7, pa čak i 8 (prema najmanje, to je bila 8. verzija koju sam naveo kao JAVA_HOME i u postavkama Android Studija i nije imao nikakvih problema).
JRE je potreban za vođenje samog studija. Koristim verziju 7.
Možete preuzeti JDK i JRE verzije veće od 6 sa Oracle web stranice.

Varijabilna JAVA_HOME Sada, čini se, nema potrebe da ga instalirate, jer ćemo u Android Studiju odrediti putanju do JDK-a u postavkama. Ali ja sam ga instalirao. Da biste to uradili potrebno vam je:

  • Idi , odaberite lijevo , u dijalogu koji se otvori pronađite dugme Varijable okruženja.
  • Kreirajte sistemsku ili korisničku varijablu JAVA_HOME i odredite putanju do JDK za to. imam ovaj put: C:\Program Files\Java\jdk1.8.0_05.
2. Ako imate instaliran Android SDK.
Android Studio dolazi sa sopstvenim Android SDK-om. A, ako želite da ga koristite, onda se u nekim slučajevima mogu dogoditi čudne stvari. Na primjer, prilikom ažuriranja SDK-a preko SDK Manager-a, neki fajlovi su upisani u staru mapu, a problemi su se pojavili kada sam obrisao ovu mapu. Najvjerovatnije se to dogodilo zbog činjenice da je registar pohranio ključ s putanjom do stari folder. Stoga ima smisla očistiti registar. Da biste to učinili, morate pokrenuti regedit.exe i pronaći HKEY_LOCAL_MACHINE\Softver\Android SDK alati za 32-bitne mašine ili HKEY_LOCAL_MACHINE\Software\Wow6432Node\Android SDK alati za 64-bitne mašine i uklonite Android SDK Alati. Ako u registru vašeg sistema nema takvih ključeva, onda je sve u redu.

Ako ste instalirali varijabla okruženja ANDROID_SDK_HOME a želite da ukazuje na staru instalaciju, onda, u teoriji, to ne bi trebao biti problem, jer ćemo prilikom postavljanja Android Studija ukazati na putanju do SDK-a. Problemi mogu nastati ako ovu varijablu koristi bilo koja od aplikacija uključenih u Android SDK.

3. Idemo sada na instalaciju Android Studija.
Morate preuzeti Android Studio za vaš sistem sa službene stranice i instalirati ga. Prema zadanim postavkama, ako odaberete “Instaliraj samo za mene”, on se postavlja \Korisnici\ \AppData\Local\Android\android-studio\, inače stavite \Programske datoteke(x86)\Android\android-studio\. Također možete odabrati drugi folder.

Nakon instalacije, pokrenite Android Studio.

Vidimo ovaj dijalog


U njemu radimo sljedeće:

Kreiranje projekta

1. Novi projekat
Kliknite Novi projekat.

Pojavljuje se sljedeći dijalog


U njemu možete konfigurirati:
  • Naziv projekta (ostavio sam ga kao zadano: Moja aplikacija)
  • Domena kompanije, podrazumevano .example.com, u mom slučaju markone.example.com
  • Naziv paketa se također može urediti klikom na Uredi desno. Podrazumevano se generiše iz naziva projekta i domene kompanije i izgleda kao com.example. .<имя проекта в lowercase без пробелов>, я его изменил на com.example.markedone.myapp.
  • Putanja na kojoj će projekat biti sačuvan. Naveo sam svoju fasciklu za sve vrste test projekata.
Kada je sve uneseno, kliknite Sljedeći.
2. Form Factors
U ovom dijalogu odaberite ciljne platforme i API-je.

Dijalog izgleda ovako


Ovdje sam sve ostavio kao zadano: telefon i tablet i 4.0.3 IceCreamSandwich. Ako API nije instaliran za neke platforme, prikazuje se poruka Not Insatlled. Na primjer, kao što možete vidjeti na snimku ekrana, nemam instalirane biblioteke za Google Glass (ovo se može uraditi preko SDK Managera).

Također obratite pažnju na Pomozi mi izabrati, cool stvari

Ako pritisnete Pomozi mi da izaberem, tada će se otvoriti ovaj zanimljiv dijalog


Sadrži informacije o pokrivenosti uređaja prilikom odabira određene verzije API-ja. Na pravokutnike verzija API-ja se može kliknuti, a sa desne strane će se prikazati lista funkcionalnosti koje su dostupne u njima. Na primjer, za zadani sladoled sendvič:



Kliknite Sljedeći.
3.Dodaj aktivnost

Na sljedećem ekranu od nas se traži da odaberemo Aktivnost


Naravno, nisam mogao zaobići Aktivnost preko cijelog ekrana i odabrao sam je. Možete odabrati drugu aktivnost, ali u ovom slučaju Java izvori će biti drugačiji i morat ćete sami dodati poziv izvorne metode iz Jave (međutim, u tome nema ništa komplikovano).
Napravite izbor, kliknite Sljedeći.

Pojavljuje se sljedeći dijalog


Ovdje se od nas traži da konfigurišemo aktivnost.
  • Naziv aktivnosti- naziv klase, ostavio sam ga kao zadano: FullscreenActivity.
  • Layout Name- raspored imena, za UI editor, je takođe ostavljen kao podrazumevani.
  • Naslov- FullscreenActivity se nudi po defaultu, stavio sam razmak: Aktivnost na cijelom ekranu.
Kliknite Završi.

Kao rezultat, projekat bi trebao biti otvoren

Izgradite i pokrenite

1. Izgradite projekat
Sastavljanje počinjemo kroz meni: Izgradi->Napravi projekat(Ikone i prečice su označene za stavke menija, tako da neće biti teško razumjeti ih).
Tokom moje prve izrade dobio sam grešku:

Ovo se dogodilo u fajlu MyApplication/app/build.gradle
Da shvatite šta se dešava, samo zadržite pokazivač iznad podvučene linije:


Jednostavno, ovdje je navedena verzija 19, ali imamo samo 20 instaliranih, au postavkama projekta smo naveli 20 kao cilj. Samo promijenimo broj:


Očigledno, studio nije zadovoljan ovim i nudi instalaciju još novije verzije. Ali ovo nam sada ne treba.

Pokrenimo ponovo Izgradi->Napravi projekat. Ovaj put sam sve skupio. Nadam se da ćeš i ti.

2. Postavljanje virtuelnog uređaja
Da biste pokrenuli program u emulatoru, potrebno je konfigurirati virtuelni uređaj. Idemo na Alati->Android->AVD Manager(ovo je, kao i SDK Manager, uslužni program iz Android SDK-a). Treba nam prva kartica, Android virtuelni uređaj, po defaultu je otvoren. Na desnoj strani nalazimo dugme Stvoriti... i pritisnite ga.

Pojavit će se dijalog postavki virtuelnog uređaja.



Na dnu dijaloga videćete koju grešku ste napravili tokom podešavanja. Na primjer, razmaci se ne mogu unijeti u naziv uređaja, a neka polja su obavezna. Kada ispod nema natpisa, sve je ispravno upisano. Kliknite uredu.

Uređaj se pojavljuje na listi


Nekoliko riječi o kartici Definicije uređaja


Na njemu su navedeni dostupni uređaji (oni koji se zatim prikazuju na padajućoj listi Uređaj prilikom kreiranja novog virtuelnog uređaja). Da biste kreirali novi uređaj, potrebno je da kliknete na dugme Kreiraj uređaj... i pobrinite se da ispunite sljedeći dijalog:



Zatvorite AVD Manager i vratite se na glavni prozor Android Studija.
3. Pokrenite na emulatoru
Izvodimo Pokreni->Pokreni "aplikaciju".
Morat ćete pričekati dok se projekat ne izgradi za pokretanje.

Na kraju će se pojaviti prozor za odabir uređaja


Ovdje jedina dostupna opcija za odabir je naš virtuelni uređaj. Nudi nam se odmah, pa samo kliknite uredu.

Emulator se pokreće, potrebno je dosta vremena


Može se otvoriti Alati->Android->Monitor Android uređaja(uslužni program iz Android SDK-a) da vidite dnevnike iz emulatora. Trebao bi automatski pokupiti virtuelni uređaj i odmah početi sa slanjem dnevnika.

Monitor Android uređaja


Ali nakon pokretanja emulatora, aplikacija mi se nije otvorila prvi put, morao sam ponovo kliknuti Pokreni->Pokreni "aplikaciju".

Pojavio se malo izmijenjen dijalog

Ovdje je uređaj prešao sa liste za pokretanje na listu već pokrenutih. Ova lista, naravno, uključuje i prave uređaje.

Nakon toga su stvari krenule dobro, a aplikacija se instalirala i pokrenula prilično brzo.

Način rada preko cijelog ekrana

A ako dodirnete aplikaciju, ona izgleda ovako

Ovo nije ponašanje sistema; klik se obrađuje u aplikaciji (FullscreenActivity.java fajl):
// Postavite korisničku interakciju da se ručno prikaže ili sakri sistem UI contentView.setOnClickListener(new View.OnClickListener() ( @Override public void onClick(View view) ( if (TOGGLE_ON_CLICK) ( mSystemUiHider.toggle(); ) else ( mSystemUiHider.show(); ) )); Nakon pokretanja, Android Studio me je pozvao da isključim Android Device Monitor kako bih integrirao izlaz direktno u IDE.

Ovako izgleda integracija

4. Pokrenite u načinu za otklanjanje grešaka
Run->Debug "app"

Opet poznati dijalog

Čekamo da se aplikacija pokrene i da se debuger poveže. Postavljam tačku prekida kada se klikne na lažno dugme.

Android Studio u otklanjanju grešaka


Malo smeta nedostatak panela sa svim vrstama Step Into, Step Out itd.

Sve ovo je u meniju Pokreni

5. Pokreni 4.0.3
Tokom procesa izgradnje i pokretanja projekta, možda ste primijetili da smo kreirali aplikaciju koja je bila kompatibilna sa verzijom 4.0.3, ali je radila samo na najnovijoj verziji Androida. Sada ćemo to popraviti. Da biste to učinili, morate instalirati verziju 4.0.3 putem Alati->Android->SDK Manager.

Potrebne stavke su označene kvačicama na snimku ekrana.


Ovo SDK platforma, Slika sistema ARM EABI v7a I Slika sistema Intel x86 Atom. U stvari, koristili smo ARM emulator i sada ne moramo instalirati Intel. Instalirao sam ga isključivo zato što je instaliran i za Android L.
Sada napravimo još jedan uređaj za novu staru verziju Androida (ili možete urediti staru).

Nove postavke uređaja


Pokreni ( Pokreni->Pokreni "aplikaciju").

U dijalogu odaberite novi uređaj za pokretanje


I da vidimo kako izgleda novi emulator - očito je brutalniji.

Pokreni

Način rada preko cijelog ekrana

Nakon klika

5. Pokrenite na uređaju
Prije nego što počnemo s NDK-om, pokrenimo projekat na stvarnom uređaju. Pokrenuću ga na svom telefonu

Huawei Ascend G300 sa Androidom 4.0.3


Prva stvar koju treba da uradite je da instalirate adb drajver. Kod mene je sve prilično jednostavno, drajver se nalazi direktno na telefonu, jedino što treba da uradite je da uključite kabl u računar, odete na montirani disk i pokrenete izvršni fajl koji će instalirati adb drajver. Što se tiče drugih uređaja, stvari mogu biti složenije. Na primjer, za Prestigio tablet sam jednom morao registrovati Vendor ID u posebnoj datoteci (kako bi se koristio standardni drajver iz Google-a), Samsungu je bio potreban vlastiti Kies, postojao je poseban drajver za HTC i tako dalje. Općenito, morat ćete shvatiti kako sami instalirati drajver za svoj uređaj.

Nakon što je upravljački program instaliran, morate omogućiti USB otklanjanje grešaka na uređaju. Na svom telefonu da to uradim moram da odem do Postavke->Za programere->USB otklanjanje grešaka. Ali za različite uređaje, kao i verzije i verzije Androida, lokacija ove stavke izbornika može se razlikovati.

Sada će telefon imati Android SDK, a aplikacije koje se razvijaju će biti instalirane. Međutim, za Huawei ovo nije sve: nema evidencije koja dolazi s telefona, morate ih omogućiti.

Kako omogućiti evidenciju na Huawei-u

Birajte kao broj telefona: *#*#2846579#*#*
Pojaviće se servisni meni.
Idi ProjectMenu->Background Setting->Log Setting
Otvori Log switch i instalirajte tamo ON.
Otvori Podešavanje nivoa dnevnika i postavite nivo evidentiranja koji vam je potreban (ja sam postavio verbose).
Ponovo pokrenite telefon.


Sada možete pokrenuti aplikaciju na svom uređaju: Pokreni->Pokreni "aplikaciju"

U dijalogu za odabir uređaja pojavljuje se pravi uređaj


Pokrenimo na telefonu.

Rezultat lansiranja.

Aplikacija u portretu:

Primjena u pejzažu:

Instalacija i konfiguracija Android NDK-a

1. Instalacija NDK
Android SDK, kao što smo već saznali, uključen je u Android Studio kit, ali NDK nije. Ovdje preuzmite NDK prikladan za vaš sistem. Raspakujte arhivu i stavite je u neki folder, na primjer, u D:\ndk, tako da datoteka ndk-build.cmd lezi u njemu. Bitan: Neophodno je da na putu do NDK nema razmaka.
2. Dodajte varijablu ANDROID_NDK_HOME
Idemo na Control Panel\System and Security\System, odaberite na lijevoj strani Napredne sistemske postavke, u dijalogu koji se otvori kliknite na dugme Varijable okruženja. Kreirajte varijablu s imenom ANDROID_NDK_HOME i značenje D:\ndk(put do vašeg NDK).

Alternativno, umjesto specificiranja globalne varijable, možete odrediti putanju do ndk u datoteci local.properties vašeg projekta (direktno u root folderu: MyApplication\local.properties). Sadržaj datoteke će izgledati otprilike ovako (obratite pažnju na dvostruke kose crte, jer je to kritično za Windows):
## Ovu datoteku automatski generiše Android Studio. # Nemojte mijenjati ovaj fajl -- VAŠE PROMJENE ĆE BITI BRISANE! # # Ovu datoteku *NE* treba provjeriti u Sistemima kontrole verzija, # jer sadrži informacije specifične za vašu lokalnu konfiguraciju. # # Lokacija SDK-a. Ovo koristi samo Gradle. # Za prilagođavanje kada koristite sistem kontrole verzija, pročitajte # napomenu u zaglavlju. sdk.dir=C:\\Korisnici\\ \\AppData\\Local\\Android\\android-studio\\sdk ndk.dir=D:\\ndk
Ne vjerujte odricanju odgovornosti o tome da će “vaše promjene biti bačene”, u ovom slučaju to nije istina. Imajte na umu da je preporučljivo isključiti ovu datoteku iz kontrole verzija jer sadrži samo informacije lokalne za korisnika. Za promjenu, nisu nas lagali o ovome. Pa, naravno, ova promjena ni na koji način neće utjecati na vaše druge projekte. Kada se instalira ANDROID_NDK_HOME Nije potrebno specificirati putanju u local.properties.

3. Instalirajte potrebnu verziju Android API-ja
Idi NDK\platforme(Imam ovo D:\ndk\platforms) i pogledajte maksimalnu verziju dostupnih API-ja. U mom slučaju, maksimalna verzija je 19. Ali u isto vrijeme u SDK imamo instalirane samo verzije 20 i 15. Tako da idemo u SDK Manager i preuzimamo SDK Platformu verziju 19, inače ništa neće raditi.

Šta preuzeti

4. Konfigurirajte gradle za rad sa NDK
Uzeo sam informacije iz uzoraka, možete ih preuzeti. Preuzeo sam uzorke za verziju 0.11. Uzeo sam ndkSanAngeles kao glavni primjer.

Kako pokrenuti ndkSanAngeles

Nakon preuzimanja uzoraka, potrebno ih je raspakirati. Zatim morate otvoriti projekt ndkSanAngeles. Za Android Studio, projekat je folder, pa ga morate otvoriti. Da bismo to uradili izvodimo Datoteka->Otvori, ili, ako ste u dijalogu dobrodošlice, Otvorite projekat. Tražimo fasciklu ndkSanAngeles kroz dijalog za otvaranje datoteke.

Nakon otvaranja projekta, trebali biste pogledati datoteku build.gradle. Evo originala:
buildscript ( spremišta ( mavenCentral() ) ovisnosti ( put do klasa "com.android.tools.build:gradle:0.11.0" ) ) primijeniti dodatak: "android" android ( compileSdkVersion 19 buildToolsVersion "19.1.0" defaultConfig (Name "modul" sanangeles" cFlags "-DANDROID_NDK -DDISABLE_IMPORTGL" ldLibs "GLESv1_CM", "dl", "log" stl "stlport_static" ) // Ovo je stvarni kod verzije aplikacije. Dajemo sebi 1.000.000 vrijednosti versionCode = Tgypejnis.debuildDebujnis.debuild true productFlavors ( x86 ( ndk ( abiFilter "x86") // ovo je dio koda verzije. // Mora biti viši od kraka za uređaje koji podržavaju // oba, pošto je poželjan x86. versionCode = 3 ) arm ( ndk ( abiFilter "armeabi-v7a" ) versionCode = 2 ) mips ( ndk ( abiFilter "mips" ) versionCode = 1) fat ( // fat binarni, kod najniže verzije će biti // zadnja opcija versionCode = 0 )) // pravimo kod verzije po varijanti applicationVariants.all ( varijanta ->
A evo i modificirane verzije tako da se projekat može sastaviti od mene:
buildscript ( spremišta ( mavenCentral() ) ovisnosti ( put do klasa "com.android.tools.build:gradle:0.12.+" ) ) primijeniti dodatak: "android" android ( compileSdkVersion 19 buildToolsVersion "20.0.0" defaultConfig (Name "modul" sanangeles" cFlags "-DANDROID_NDK -DDISABLE_IMPORTGL" ldLibs "GLESv1_CM", "dl", "log" stl "stlport_static" ) // Ovo je stvarni kod verzije aplikacije. Dajemo sebi 1.000.000 vrijednosti versionCode = Tgypejnis.debuildDebujnis.debuild true productFlavors ( x86 ( ndk ( abiFilter "x86") // ovo je dio koda verzije. // Mora biti viši od kraka za uređaje koji podržavaju // oba, pošto je poželjan x86. versionCode = 3 ) arm ( ndk ( abiFilter "armeabi-v7a" ) versionCode = 2 ) mips ( ndk ( abiFilter "mips" ) versionCode = 1) fat ( // fat binarni, kod najniže verzije će biti // zadnja opcija versionCode = 0 )) // napravimo kod verzije po varijanti applicationVariants.all ( varijanta -> // dobijemo jedan okus def flavorVersion = variant.productFlavors.get(0).versionCode // postavi kompozitni kod variant.mergedFlavor.versionCode = flavorVersion * 1000000 + defaultConfig. versionCode ) )
Promjene su sljedeće:

  • O neusklađenosti verzije gradle dodatka ( classpath "com.android.tools.build:gradle:0.11.0") će se reći kada pokušate da napravite i ponudite tačan broj verzije. Za mene je 0,12.+.
  • compileSdkVersion 19 ostaje jer je to maksimalna verzija za trenutni NDK.
  • buildToolsVersion promijenjeno na 20. Instalirane verzije se mogu vidjeti u SDK Manageru, a druge se mogu instalirati tamo.
Nakon toga, ndkSanAngeles bi se trebao ponovo sastaviti. Budite oprezni i provjerite verzije koje ste instalirali.

U našem projektu moramo odabrati ispravan build.gradle fajl, pošto ih ima dva. Stvar je u tome što je MyApplication projekat, a aplikacija je projektni modul (ili podprojekat), i oni imaju svoj build.gradle za svaki. Prvo pogledajmo datoteku projekta

MyApplication->build.gradle

// Datoteka za izgradnju najviše razine u koju možete dodati opcije konfiguracije zajedničke za sve pod-projekte/module. buildscript ( spremišta ( jcenter() ) ovisnosti ( put do klase "com.android.tools.build:gradle:0.12.+" // NAPOMENA: Ne postavljajte ovisnosti svoje aplikacije ovdje; one pripadaju // pojedinačnim datotekama modula build.gradle ) ) svi projekti ( spremišta ( jcenter() ) )


Iz komentara u kodu je jasno da nam je potreban fajl modula

MyApplication->app->build.gradle

primijeni dodatak: "com.android.application" android ( compileSdkVersion 20 buildToolsVersion "20.0.0" defaultConfig ( applicationId "com.example.markedone.myapp" minSdkVersion 15 targetSdkVersion 20 versionCode 1 versionName) (buildPro 1 verzijaName) getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" ) ) ) zavisnosti ( kompajlirajte fileTree(dir: "libs", include: ["*.jar"]) // Morate instalirati ili ažurirati Podrška Repozitorijum preko SDK menadžera da koristi ovu zavisnost. //kompiliraj "com.android.support:support-v4:19.+" kompajliraj "com.android.support:support-v4:20.+" )


Hajde da ga konfigurišemo da radi sa NDK, koristeći build.gradle iz ndkSanAngeles kao „donatora“.

Prvo, zamenimo
compileSdkVerzija 20
on
compileSdkVerzija 19
pošto je NDK ograničen na verziju 19.

IN defaultConfig dodaćemo podešavanja ndk, i također zamijeniti targetSdkVersion u 19:00
defaultConfig ( applicationId "com.example.markedone.myapp" minSdkVersion 15 targetSdkVersion 19 versionCode 1 versionName "1.0" ndk ( moduleName "myapp" cFlags "-DANDROID_NDK" ldLibs "log" stl "stlport" include )

  • moduleName- naziv modula, koristit će se za imenovanje *.so datoteke
  • cFlags- C zastavice
  • ldLibs- biblioteke koje želite da povežete na izvorni kod
  • stl- verzija STL biblioteke
U buildTypes ćemo omogućiti JNI sklop za otklanjanje grešaka za otklanjanje grešaka:
buildTypes ( release ( runProguard false proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" ) debug.jniDebugBuild true )
Sada dodajmo productFlavors. Ovdje ukazujemo koje *.so biblioteke treba uključiti u build za određenu arhitekturu. Dakle, *.apk kompajliran za arm će sadržati verziju biblioteke samo za arm, za x86 - za x86 i tako dalje. Ovaj komad je u potpunosti kopiran sa ndkSanAngeles. Objašnjenje značenja versionCode iz komentara: za x86 postavljamo maksimalnu vrijednost versionCode, jer ako uređaj podržava i x86 i ruku, onda je poželjniji x86 sklop (očigledno, budući da ima veću verziju, biće instaliran), a minimalni versionCode propisano za debeo(u teoriji, ovo bi trebao biti “debeli” *.apk, koji sadrži sve moguće verzije biblioteka odjednom).
productFlavors ( x86 ( ndk ( abiFilter "x86" ) // ovo je aromatični dio koda verzije. // Mora biti viši od one ruke za uređaje koji podržavaju // oba, pošto je x86 poželjan. versionCode = 3 ) arm ( ndk ( abiFilter "armeabi-v7a" ) versionCode = 2 ) mips ( ndk ( abiFilter "mips" ) versionCode = 1) fat ( // fat binarni, najniži kod verzije da bude // zadnja opcija versionCode = 0 ))
“Prikupljanje” značenja versionCode za svaku opciju izgradnje:
// napravimo kod verzije po varijanti applicationVariants.all ( varijanta -> // dobijemo jedan okus def flavorVersion = variant.productFlavors.get(0).versionCode // postavi kompozitni kod variant.mergedFlavor.versionCode = flavorVersion * 1000000 + defaultConfig.versionCode)
Konačno, posljednji dio, zavisnosti. Ako se sjećate, ovdje smo se promijenili kompajlirajte "com.android.support:support-v4:19.+" on kompajlirajte "com.android.support:support-v4:20.+", za izgradnju sa jedinom verzijom biblioteke koja je instalirana kod nas. Sada ga morate vratiti na 19.
zavisnosti ( compile fileTree(dir: "libs", include: ["*.jar"]) // Morate instalirati ili ažurirati Repozitorijum podrške preko SDK menadžera da biste koristili ovu zavisnost. kompajlirajte "com.android.support:support- v4:19.+" )

Potpuna lista modificirane datoteke build.gradle

primijeni dodatak: "com.android.application" android ( compileSdkVersion 19 buildToolsVersion "20.0.0" defaultConfig ( applicationId "com.example.markedone.myapp" minSdkVersion 15 targetSdkVersion 19 versionCode 1 versionName "cdkVersion 19 versionCode 1 versionName "idFlags" -DANDROID_NDK" ldLibs "log" stl "stlport_static" ) ) buildTypes ( release ( runProguard false proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" ) debug.jniDebugBuild true ( x8Flavorsndk abiFilter "x86" ) // ovo je aromatični dio koda verzije. // Mora biti viši od one ruke za uređaje koji podržavaju // oba, pošto je x86 poželjan. versionCode = 3 ) arm ( ndk ( abiFilter "armeabi -v7a" ) versionCode = 2 ) mips ( ndk ( abiFilter "mips" ) versionCode = 1 ) fat ( // fat binarni, kod najniže verzije treba biti // zadnja opcija versionCode = 0 ) ) // napraviti verziju po varijanti kod applicationVariants.all ( varijanta -> // dobiti jedan okus def flavorVersion = variant.productFlavors.get(0).versionCode // postaviti kompozitni kod variant.mergedFlavor.versionCode = flavorVersion * 1000000 + defaultConfig.versionCode main ) sourceSets ( ( jni.srcDirs = ["src/main/jni", "src/main/jni/"] ) ) ) zavisnosti ( kompajlirajte fileTree(dir: "libs", uključuje: ["*.jar"]) // Vi mora instalirati ili ažurirati Repozitorijum podrške preko SDK menadžera da bi koristio ovu zavisnost. kompajlirajte "com.android.support:support-v4:19.+" )

5. Kreirajte jni folder
Sačuvaćemo C/C++ fajlove u jni folder. To je ono što NDK očekuje od nas. Moramo kreirati folder u MyApplication/app/src/main. To se može uraditi direktno iz Android Studija, i to na dva načina.
Prvo, možete kliknuti desnim tasterom miša na glavnu i jednostavno kreirati fasciklu putem

Novo->Imenik


Drugo, možete koristiti posebnu stavku menija

Novo->Folder->JNI folder

Pokreće čarobnjak za kreiranje foldera




U prvom dijalogu biramo za koji dio modula će se kreirati jni folder, au drugom možemo promijeniti njegovu lokaciju.

6. Dodajte C++ fajlove
Ne postoji čarobnjak za C++ datoteke, tako da za kreiranje fajla kliknemo desnim tasterom miša na fasciklu jni i biraj

Novo->Datoteka


Prvo, kreirajmo datoteku zaglavlja myapp.h:
#pragma jednom #include #ifdef __cplusplus extern "C" ( #endif JNIEXPORT jstring JNICALL Java_com_example_markedone_myapp_FullscreenActivity_stringFromJNI(JNIEnv* env, jclass clazz); #ifdef __cplusplus ) #endif

Opis

  • #pragma jednom - umjesto standardne (#ifndef/#define/#endif) zaštite od ponovnog uključivanja. Sada #pragma jednom razumije većina C++ kompajlera.
  • #include - uključite JNI zaglavlje tako da možete koristiti tipove koji su tamo deklarirani.
  • #ifdef __cplusplus ... #endif - kod unutar će biti preveden samo u C++ (ali ne u C).
  • extern "C" ( ... ) - oslobodite se kvara imena (šta je to i zašto, ).
  • JNIEXPORT jstring JNICALL Java_com_example_markedone_myapp_FullscreenActivity_stringFromJNI(JNIEnv* env, jclass clazz); - deklaracija funkcije koju ćemo implementirati.
    Pogledajmo ovaj oglas detaljnije.
    • JNIEXPORT neophodno za pravilno povezivanje.
    • JNICALL za ispravnu konvenciju pozivanja.
    • jstring- tip povratka funkcije, u ovom slučaju string kompatibilan sa Java stringom.
    • Java_com_example_markedone_myapp_FullscreenActivity_stringFromJNI- naziv funkcije, sastoji se od:
      Java- jezik koji evocira.
      com_example_markedone_myapp- ovo je ID aplikacije ( com.example.markedone.myapp).
      FullscreenActivity je ime Java klase koja sadrži deklaraciju metode koja predstavlja izvornu funkciju.
      stringFromJNI- zapravo, naziv funkcije (ovako će biti u Javi).
    • JNIEnv* env, jclass clazz - potrebni parametri proslijeđeni iz Jave.
      JNIEnv* env je pokazivač na objekat koji predstavlja JNI okruženje.
      jclass clazz je klasa koja posjeduje deklaraciju matične metode u Javi. Ovdje moramo napraviti rezervaciju da je jclass clazz za statički izvorni ( statički native) metoda. Za nestatičku metodu morat ćete napisati jobject obj .

Sada kreirajmo implementacioni fajl, myapp.cpp. U njega ćemo napisati sljedeći kod:
#include #include #include "myapp.h" JNIEXPORT jstring JNICALL Java_com_example_markedone_myapp_FullscreenActivity_stringFromJNI(JNIEnv* env, jclass clazz) ( std::string tag("POZDRAV"); std::string poruka("Hello_LOG message("Hello_LOG_IN_ROID_!"); .c_str(), "%s", message.c_str()); std::string jniMessage("Zdravo iz JNI!"); return env->NewStringUTF(jniMessage.c_str()); )

Opis

  • #include - povežite dnevnik, za koji smo čak dodali i biblioteku ( ldLibs "log")
  • #include - za std::string, koji koristimo za provjeru prisutnosti STL-a.
    #include "myapp.h" - uključujemo našu datoteku zaglavlja.
    JNIEXPORT jstring JNICALL Java_com_example_markedone_myapp_FullscreenActivity_stringFromJNI(JNIEnv* env, jclass clazz) ( ... ) - implementirati funkciju deklariranu u "myapp.h".
    std::string tag("POZDRAV"); std::string message("Zdravo iz C++!"); - kreirati linije za izlaz u dnevnik.
    __android_log_print(ANDROID_LOG_INFO, tag.c_str(), "%s", message.c_str()); - izlaz u dnevnik. Imajte na umu da morate navesti 4 parametra: tip poruke u dnevniku, oznaku, format stringa i, na kraju, samu poruku.
    std::string jniMessage("Zdravo iz JNI!"); - string koji ćemo proslediti Javi.
    return env->NewStringUTF(jniMessage.c_str()); - povratna vrijednost, koristeći JNIEnv kreiramo jstring iz C-stringa. Imajte na umu da nam nije potrebna konstrukcija kao što je (*env)-> pošto pišemo u C++, a ne u C.
Sada ćemo kreirati još jedan fajl: stub.cpp i ostaviti ga praznim. Činjenica je da ako ostavite samo jednu *.cpp datoteku u jni folderu, onda će ndk-build generirati grešku “nema pravila za postavljanje cilja”.
7. Dodajte poziv izvorne funkcije iz Jave
Otvorite fajl MyApplication/app/src/main/java/com.example.markedone.myapp.FullscreenActivity. U stvari, ima java ekstenziju, a com, na primjer, markedone i myapp su folderi, ali Android Studio to skriva.

Sadržaj datoteke

paket com.example.markedone.myapp; import com.example.markedone.myapp.util.SystemUiHider; import android.annotation.TargetApi; import android.app.Activity; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.view.MotionEvent; import android.view.View; /** * Primjer aktivnosti preko cijelog ekrana koja prikazuje i sakriva korisničko sučelje sistema (tj. * statusnu traku i navigacijsku/sistemsku traku) uz interakciju korisnika. * * @see SystemUiHider */ javna klasa FullscreenActivity proširuje aktivnost ( /** * Da li sistemsko korisničko sučelje treba biti automatski skriveno nakon * (@link #AUTO_HIDE_DELAY_MILLIS) milisekundi. */ private static final boolean AUTO_HIDE = true; /* * * Ako je (@link #AUTO_HIDE) postavljen, broj milisekundi koje treba čekati nakon * interakcije korisnika prije sakrivanja korisničkog sučelja. */ private static final int AUTO_HIDE_DELAY_MILLIS = 3000; /** * Ako je postavljeno, prebacit će korisnički interfejs sistema vidljivost nakon interakcije. U suprotnom, * će pokazati vidljivost korisničkog sučelja sistema nakon interakcije. */ private static final boolean TOGGLE_ON_CLICK = true; /** * Zastavice na koje treba proći (@link SystemUiHider#getInstance). */ private static final int HIDER_FLAGS = SystemUiHider.FLAG_HIDE_NAVIGATION; /** * Instanca (@link SystemUiHider) za ovu aktivnost */ private SystemUiHider mSystemUiHider; @Override zaštićena void onCreate(Bundle savedInstanceState) ( super.onCreateS(tasved.Rlay); .activity_fullscreen); final View controlsView = findViewById(R.id.fullscreen_content_controls); final View contentView = findViewById(R.id.fullscreen_content); // Postavite instancu SystemUiHidera za kontrolu korisničkog sučelja sistema za // ovu aktivnost. mSystemUiHider = SystemUiHider.getInstance(ovo, contentView, HIDER_FLAGS); mSystemUiHider.setup(); mSystemUiHider .setOnVisibilityChangeListener(new SystemUiHider.OnVisibilityChangeListener() ( // Keširane vrijednosti. int mControlsHeight; int mShortAnimTime; @Override @TargetApi(Build.VERSION_COMBOid_MR2si) (Build.VERSION_CODES.HONEYboibility) Build.VERSION.SDK_INT > = Build.VERSION_CODES.HONEYCOMB_MR2) ( // Ako je API ViewPropertyAnimator dostupan // (Honeycomb MR2 i noviji), koristite ga za animiranje // kontrola korisničkog sučelja unutar izgleda na dnu // ekrana. if (mControlsHeight == 0) ( mControlsHeight = controlsView.getHeight(); ) if (mShortAnimTime == 0) ( mShortAnimTime = getResources().getInteger(android.R.integer.config_shortAnimTime); ) controlsView.animate() .translationY(visible? 0: mControlsHeight).setDuration(mShortAnimTime); ) else ( // Ako ViewPropertyAnimator API-ji nisu // dostupni, jednostavno pokažite ili sakrijte // kontrole unutarnjeg korisničkog sučelja. controlsView.setVisibility(visible ? View.VISIBLE: View.GONE); ) if (vidljivo && AUTO_HIDE ) ( // Zakažite hide(). delayedHide(AUTO_HIDE_DELAY_MILLIS); ) ) )); // Postavite korisničku interakciju za ručno prikazivanje ili sakrivanje korisničkog sučelja sistema. contentView.setOnClickListener(new View.OnClickListener() ( @Override public void onClick(View view) ( if (TOGGLE_ON_CLICK) ( mSystemUiHider.toggle(); ) else ( mSystemUiHider.show(); ) ) ); // Nakon interakcije s kontrolama korisničkog sučelja, odgodite sve planirane hide() // operacije kako biste spriječili neugodno ponašanje kontrola koje nestaju // dok su u interakciji s korisničkim sučeljem findViewById(R.id.dummy_button).setOnTouchListener(mDelayHideTouchListener); ) @Override protected void onPostCreate(Bundle savedInstanceState) ( super.onPostCreate(Stagger); početno hide() ubrzo nakon // kreiranja aktivnosti, da ukratko nagovijesti korisniku da su kontrole // korisničkog sučelja dostupne. odloženiHide(100); ) /** * Slušatelj dodira za korištenje za kontrole korisničkog sučelja unutar rasporeda za odlaganje sakrivanja * sistemskog korisničkog sučelja. Ovo je da bi se spriječilo neugodno ponašanje kontrola koje nestaju * dok su u interakciji s korisničkim sučeljem aktivnosti. */ View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() ( @Override public boolean onTouch(View view, MotionEvent motionEvent) ( if (AUTO_HIDE) ( delayedHide(AUTO_HIDE_DELAY_MILLIS); ) vrati false; ) ); Rukovalac mHideHandler = novi Handler(); Runnable mHideRunnable = new Runnable() ( @Override public void run() ( mSystemUiHider.hide(); ) ); /** * Zakazuje poziv hide() u milisekundama, otkazujući sve * ranije zakazane pozive. */ private void delayedHide(int delayMillis) ( mHideHandler.removeCallbacks(mHideRunnable); mHideHandler.postDelayed(mHideRunnable, delayMillis); ) )


Dodajmo sljedeći kod u klasu FullscreenActivity:
static ( System.loadLibrary("myapp"); ) privatni statički izvorni String stringFromJNI(); Ovdje se prvo učitava biblioteka, a zatim se deklariše metoda stringFromJNI, što odgovara našoj funkciji u C++. Imajte na umu da je deklarisan kao statički (ovo utiče na ono što će (jclass ili jobject) biti kao drugi parametar funkcije C++) i kao izvorni. Nema potrebe za implementacijom nativne metode, to smo već uradili u C++, a JNI će uraditi ostalo za nas.

Sada, općenito, već možemo pozvati našu funkciju. Ako ste, poput mene, odabrali FullscreenActivity, onda imamo lažno dugme koje u suštini ne radi ništa. Čak već imamo i touch listener, iako ne najbolji (pozvaće se mnogo puta dok je prst na ekranu), ali da ne bismo proizvodili nepotreban kod, koristimo ga.

Prvo, dodajmo na listu uvoza:
import android.widget.Button;
tako da možete normalno raditi sa dugmetom.

Pronađimo sljedeći kod:
View.OnTouchListener mDelayHideTouchListener = novi View.OnTouchListener() ( @Override public boolean onTouch(View view, MotionEvent motionEvent) ( if (AUTO_HIDE) ( delayedHide(AUTO_HIDE_DELAY_MILLIS); ) vrati false; ) );
i dodajte nekoliko redaka prije nego vratite false .
View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() ( @Override public boolean onTouch(View view, MotionEvent motionEvent) ( if (AUTO_HIDE) ( delayedHide(AUTO_HIDE_DELAY_MILLIS); ) final String message( string Button) = finalno dugme String (string); )findViewById(R.id.dummy_button); konačni string stvarniText = button.getText().toString(); if(message.equals(actualText)) ( button.setText("Dummy Button"); ) else ( button.setText (poruka); ) vrati false; ) );

Opis dodanog koda

  • konačna string poruka = ​​stringFromJNI(); - dobijamo string iz C++. Pozivanje native metode je ono zbog čega je sve počelo.
  • finalno dugme dugmeta = (Dugme)findViewById(R.id.dummy_button); - pronađite objekat dugmeta.
  • final String stvarniText = button.getText().toString(); - izvucite tekst trenutnog dugmeta.
  • if(message.equals(actualText)) - uporedi string dobijen iz C++ sa tekstom dugmeta.
    • button.setText("Dummy Button"); - ako su isti, promijenite tekst dugmeta u Dummy Button.
    • button.setText(message); - ako se razlikuju, onda ih mijenjamo u tekst dobiven iz C++-a.

Potpuna lista klasa modificirane klase

paket com.example.markedone.myapp; import com.example.markedone.myapp.util.SystemUiHider; import android.annotation.TargetApi; import android.app.Activity; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.view.MotionEvent; import android.view.View; import android.widget.Button; /** * Primjer aktivnosti preko cijelog ekrana koja prikazuje i sakriva korisničko sučelje sistema (tj. * statusnu traku i navigacijsku/sistemsku traku) uz interakciju korisnika. * * @see SystemUiHider */ javna klasa FullscreenActivity proširuje aktivnost ( statički ( System.loadLibrary("myapp"); ) privatni statički izvorni String stringFromJNI(); /** * Da li sistemsko korisničko sučelje treba biti automatski skriveno nakon * (@link #AUTO_HIDE_DELAY_MILLIS) milisekundi. */ privatni statički konačni boolean AUTO_HIDE = true; /** * Ako je (@link #AUTO_HIDE) postavljen, broj milisekundi koje treba čekati nakon * interakcije korisnika prije skrivanja korisničkog sučelja. */ private static final int AUTO_HIDE_DELAY_MILLIS = 3000; /** * Ako je postavljeno, promijenit će vidljivost korisničkog sučelja sistema nakon interakcije. U suprotnom, * će prikazati vidljivost korisničkog sučelja sistema nakon interakcije. */ private static final boolean TOGGLE_ON_CLICK = true; /** * Zastavice koje treba proći na (@link SystemUiHider#getInstance). */ private static final int HIDER_FLAGS = SystemUiHider.FLAG_HIDE_NAVIGATION; /** * Instanca (@link SystemUiHider) za ovu aktivnost. */ private SystemUiHider mSystemUiHideer; @Overrideer; protected void onCreate(Bundle savedInstanceState) (super.onCreate(savedInstanceState); setContentView(R.layout.activity_fullscreen); final View controlsView = findViewById(R.id.fullscreen_content_controls); final View contentView = findViewById(R.id.fullscreen_content); // Postavite instancu SystemUiHidera za kontrolu korisničkog sučelja sistema za // ovu aktivnost. mSystemUiHider = SystemUiHider.getInstance(ovo, contentView, HIDER_FLAGS); mSystemUiHider.setup(); mSystemUiHider .setOnVisibilityChangeListener(new SystemUiHider.OnVisibilityChangeListener() ( // Keširane vrijednosti. int mControlsHeight; int mShortAnimTime; @Override @TargetApi(Build.VERSION_COMBOid_MR2si) (Build.VERSION_CODES.HONEYboibility) Build.VERSION.SDK_INT > = Build.VERSION_CODES.HONEYCOMB_MR2) ( // Ako je API ViewPropertyAnimator dostupan // (Honeycomb MR2 i noviji), koristite ga za animiranje // kontrola korisničkog sučelja unutar izgleda na dnu // ekrana. if (mControlsHeight == 0) ( mControlsHeight = controlsView.getHeight(); ) if (mShortAnimTime == 0) ( mShortAnimTime = getResources().getInteger(android. R.integer.config_shortAnimTime); ) controlsView.animate() .translationY(visible ? 0: mControlsHeight) .setDuration(mShortAnimTime); ) else ( // Ako ViewPropertyAnimator API-ji nisu // dostupni, jednostavno pokažite ili sakrijte // kontrole unutarnjeg korisničkog sučelja. controlsView.setVisibility(visible ? View.VISIBLE: View.GONE); ) if (vidljivo && AUTO_HIDE ) ( // Zakažite hide(). delayedHide(AUTO_HIDE_DELAY_MILLIS); ) ) )); // Postavite korisničku interakciju za ručno prikazivanje ili sakrivanje korisničkog sučelja sistema. contentView.setOnClickListener(new View.OnClickListener() ( @Override public void onClick(View view) ( if (TOGGLE_ON_CLICK) ( mSystemUiHider.toggle(); ) else ( mSystemUiHider.show(); ) ) ); // Nakon interakcije s kontrolama korisničkog sučelja, odgodite sve planirane hide() // operacije kako biste spriječili neugodno ponašanje kontrola koje nestaju // dok su u interakciji s korisničkim sučeljem findViewById(R.id.dummy_button).setOnTouchListener(mDelayHideTouchListener); ) @Override protected void onPostCreate(Bundle savedInstanceState) ( super.onPostCreate(Stagger); početno hide() ubrzo nakon // kreiranja aktivnosti, da ukratko nagovijesti korisniku da su kontrole // korisničkog sučelja dostupne. odloženiHide(100); ) /** * Slušatelj dodira za korištenje za kontrole korisničkog sučelja unutar rasporeda za odlaganje sakrivanja * sistemskog korisničkog sučelja. Ovo je da bi se spriječilo neugodno ponašanje kontrola koje nestaju * dok su u interakciji s korisničkim sučeljem aktivnosti. */ View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() ( @Override public boolean onTouch(View view, MotionEvent motionEvent) ( if (AUTO_HIDE) ( delayedHide(AUTO_HIDE_DELAY_MILLIS); )F final Button String message( string final String message); (Dugme)findViewById(R.id.dummy_button); konačni string stvarniText = button.getText().toString(); if(message.equals(actualText)) ( button.setText("Dummy Button"); ) else ( dugme .setText(message); ) return false; ) ); Rukovalac mHideHandler = novi Handler(); Runnable mHideRunnable = new Runnable() ( @Override public void run() ( mSystemUiHider.hide(); ) ); /** * Zakazuje poziv hide() u milisekundama, otkazujući sve * ranije zakazane pozive. */ private void delayedHide(int delayMillis) ( mHideHandler.removeCallbacks(mHideRunnable); mHideHandler.postDelayed(mHideRunnable, delayMillis); ) )

17. Sastavljamo i pokrećemo projekat
Prva Build->Make Project. U ovoj fazi, Java dio je sastavljen.
Zatim Pokreni->Pokreni "aplikaciju". I ovdje, prije nego što aplikacija počne, C++ dio će biti sastavljen. Ako ima grešaka u njemu, biće prikazana poruka o tome. Ako nema grešaka, pojavit će se standardni dijalog za odabir uređaja, a nakon klika na OK aplikacija će se pokrenuti.

Rad na pravom uređaju

Izlaz poruke u dnevnik

Zaključak

Sve u svemu, svidio mi se Android Studio. Integracija Android SDK-a je urađena prilično čvrsto, ponekad čak zaboravite da su to odvojeni programi koji se pokreću. Ima raznih zanimljivih dobara, poput Pomozi mi da izaberem. Svidio mi se novi sistem gradnje - Gradle - ali postoji i nedostatak: ima vrlo malo informacija o njemu.

Jasno je i da je podrška NDK-u još vlažna, ali ima pomaka u tom pravcu. Zaista se nadam da će na kraju pružiti punu podršku razvoju C++-a.

P.S. Još nije pronađen nijedan C++ kod za otklanjanje grešaka.

Tagovi:

  • android studio
  • gradle
  • android ndk
  • android
Dodaj oznake

Najbolji članci na ovu temu