Android API verzije. “Srce robota”: Kako koristiti API sustava Android u osobne svrhe. Alati za razvoj aplikacija i otklanjanje pogrešaka

04.11.2020 Zanimljiv

Više informacija o tome kako API razine funkcioniraju dostupno je u Što je API razina?

Komponente aplikacije

Izolirane usluge

Navigacija nizom aplikacija

Android 4.1 znatno olakšava implementaciju odgovarajućih obrazaca dizajna za navigaciju prema gore. Sve što trebate učiniti je dodati android:parentActivityName svakom elementu u datoteci manifesta. Sustav koristi ove informacije za otvaranje odgovarajuće aktivnosti kada korisnik pritisne tipku Gore na akcijskoj traci (dok ujedno završava trenutnu aktivnost). Dakle, ako proglasite android:parentActivityName za svaku aktivnost, ne trebate metodu onOptionsItemSelected() za rukovanje klikovima na ikonu aplikacije na radnoj traci—sustav sada rukuje tim događajem i nastavlja ili stvara odgovarajuću aktivnost.

Ovo je osobito moćno za scenarije u kojima korisnik ulazi u jednu od aktivnosti vaše aplikacije kroz namjeru "dubinskog zaranjanja", kao što je iz obavijesti ili namjere iz druge aplikacije (kao što je opisano u vodiču za dizajn za navigaciju između aplikacija). Kada korisnik unese vašu aktivnost na ovaj način, vaša aplikacija možda neće prirodno imati stražnji niz aktivnosti koje se mogu nastaviti dok se korisnik kreće prema gore. Međutim, kada navedete atribut android:parentActivityName za svoje aktivnosti, sustav prepoznaje jesu li vaši aplikacija već sadrži stražnji skup nadređenih aktivnosti i, ako ne, konstruira sintetički stražnji niz koji sadrži sve nadređene aktivnosti.

Bilješka: Kada korisnik unese duboku aktivnost u vašu aplikaciju i ona stvori novi zadatak za vašu aplikaciju, sustav zapravo umeće hrpu nadređenih aktivnosti u zadatak. Kao takav, pritiskom na gumb Natrag također se krećete natrag kroz hrpu nadređenih aktivnosti.

Kada sustav stvori sintetički back stack za vašu aplikaciju, on gradi osnovnu namjeru za stvaranje nove instance svake nadređene aktivnosti. Dakle, nema spremljenog stanja za nadređene aktivnosti na način na koji biste očekivali da se korisnik prirodno kreće kroz svaku aktivnost. Ako bilo koja nadređena aktivnost obično prikazuje korisničko sučelje koje ovisi o korisnikovom kontekstu, te informacije o kontekstu će nedostajati i trebali biste ih isporučiti kada se korisnik vraća kroz stog. Na primjer, ako korisnik gleda album u glazbenoj aplikaciji, kretanje prema gore može ga dovesti do aktivnosti koja navodi sve albume u odabranom glazbenom žanru. U ovom slučaju, ako se hrpa mora stvoriti, potrebno je obavijestiti nadređenu aktivnost kojem žanru pripada trenutni album kako bi nadređeni mogao prikazati ispravan popis kao da je korisnik stvarno došao iz te aktivnosti. informacija sintetičkoj nadređenoj aktivnosti, morate nadjačati metodu. Ovo vam daje objekt TaskStackBuilder koji je sustav stvorio kako bi sintetizirao nadređene aktivnosti. TaskStackBuilder sadrži objekte namjere koje sustav koristi za stvaranje svake nadređene aktivnosti. U vašoj implementaciji onPrepareNavigateUpTaskStack() , možete modificirati odgovarajuću namjeru za dodavanje dodatnih podataka koje nadređena aktivnost može koristiti za određivanje odgovarajućeg konteksta i prikaz odgovarajućeg korisničkog sučelja.

Ako je struktura vaše aplikacije složenija, dostupno je nekoliko drugih API-ja koji vam omogućuju upravljanje ponašanjem navigacije prema gore i potpunu prilagodbu sintetičkog stražnjeg niza. Neki od API-ja koji vam daju dodatnu kontrolu uključuju:

onNavigateUp() Nadjačaj ovo za izvođenje prilagođene radnje kada korisnik pritisne gumb Gore. navigateUpTo(Intent) Pozovite ovo da biste završili trenutnu aktivnost i otišli na aktivnost označenu isporučenom Intentom. Ako aktivnost postoji u stražnjem stogu, ali nije najbliži roditelj, tada su sve druge aktivnosti između trenutne aktivnosti i aktivnosti navedene s namjerom također završene. getParentActivityIntent() Pozovite ovo da dobijete namjeru koja će pokrenuti logičkog roditelja za trenutnu aktivnost. shouldUpRecreateTask(Intent) Pozovite ovo za upit mora li se stvoriti sintetički stražnji stog kako bi se krenulo prema gore. Vraća true ako se sintetički stog mora stvoriti, false ako odgovarajući stog već postoji. finishAffinity() Pozovite ovo da završite trenutnu aktivnost i sve nadređene aktivnosti s istim afinitetom zadatka koje su lančano povezane s trenutnom aktivnošću. Ako nadjačate zadana ponašanja kao što je onNavigateUp() , trebali biste pozvati ovu metodu kada kreirate sintetički stražnji niz nakon navigacije Gore. onCreateNavigateUpTaskStack Zaobiđite ovo ako trebate u potpunosti kontrolirati način na koji se stvara sintetički stog zadataka. Ako želite jednostavno dodati neke dodatne podatke u namjere za vaš zadnji skup, trebali biste umjesto toga nadjačati onPrepareNavigateUpTaskStack()

Međutim, većina aplikacija ne mora koristiti ove API-je ili implementirati onPrepareNavigateUpTaskStack(), ali može postići ispravno ponašanje jednostavnim dodavanjem android:parentActivityName svakom elementu.

Multimedija

Medijski kodovi

Možete rukovati šifriranim medijskim podacima u kodecima pozivom queueSecureInputBuffer() u kombinaciji s MediaCrypto API-jima, umjesto normalnog queueInputBuffer().

Za više informacija o tome kako koristiti kodeke, pogledajte dokumentaciju MediaCodec.

Snimite zvuk na znak

Audio efekti

Bilješka: Nije zajamčeno da svi uređaji podržavaju ove efekte, stoga biste uvijek trebali prvo provjeriti dostupnost pozivanjem isAvailable() na odgovarajućoj klasi audio efekta.

Reprodukcija bez prekida

Sada možete izvoditi reprodukciju bez prekida između dva odvojena objekta MediaPlayera. U bilo kojem trenutku prije nego što vaš prvi MediaPlayer završi, pozovite setNextMediaPlayer() i Android će pokušati pokrenuti drugi player u trenutku kada se prvi zaustavi.

Medijski usmjerivač. Novi API-ji MediaRouter, MediaRouteActionProvider i MediaRouteButton pružaju standardne mehanizme i korisničko sučelje za odabir mjesta reprodukcije medija.

Fotoaparat

Pokret automatskog fokusa

Povezivost

Android Beam

Android Beam™ sada podržava prijenos velikog tereta putem Bluetootha. Kada definirate podatke za prijenos s bilo kojim Novi metodu setBeamPushUris() ili novo sučelje povratnog poziva NfcAdapter.CreateBeamUrisCallback, Android predaje prijenos podataka na Bluetooth ili neki drugi alternativni prijenos kako bi se postigle veće brzine prijenosa. Ovo je posebno korisno za velike količine kao što su slike i audio datoteke i ne zahtijeva vidljivo uparivanje između uređaja. Vaša aplikacija ne zahtijeva nikakav dodatni rad kako bi iskoristila prednosti prijenosa putem Bluetootha.

Kada koristite sučelje povratnog poziva, sustav poziva metodu createBeamUris() sučelja kada korisnik izvrši dijeljenje s Android Beamom tako da možete definirati URI-je za dijeljenje u vrijeme dijeljenja. Ovo je korisno ako se URI-ji za dijeljenje mogu razlikovati ovisno o korisničkom kontekstu unutar aktivnosti, dok je pozivanje setBeamPushUris() korisno kada su URI-ji za dijeljenje nepromjenjivi i možete ih sigurno definirati unaprijed.

Otkrivanje mrežne usluge

Android 4.1 dodaje podršku za multicast otkrivanje usluge temeljeno na DNS-u, što vam omogućuje pronalaženje i povezivanje s uslugama koje nude ravnopravni uređaji putem Wi-Fi mreže, poput mobilnih uređaja, pisača, kamera, medijskih playera i drugih koji su registrirani na lokalnoj mreža.

Prije nego počnete otkrivati ​​usluge na lokalnim uređajima, morate također pozvati addServiceRequest(). Kada WifiP2pManager.ActionListener koji proslijedite ovoj metodi primi uspješan povratni poziv, tada možete početi otkrivati ​​usluge na lokalnim uređajima pozivanjem discoverServices() .

Kada se otkriju lokalne usluge, primit ćete povratni poziv na WifiP2pManager.DnsSdServiceResponseListener ili WifiP2pManager.UpnpServiceResponseListener, ovisno o tome jeste li se registrirali za korištenje Bonjour ili Upnp. Povratni poziv primljen u oba slučaja sadrži objekt WifiP2pDevice koji predstavlja ravnopravni uređaj.

Upotreba mreže

Usluge pristupačnosti također mogu izvoditi radnje u ime korisnika, uključujući klikanje, pomicanje i koračanje kroz tekst koristeći performAction i setMovementGranularities. Metoda performGlobalAction() također omogućuje uslugama izvođenje radnji kao što su Natrag, Početna i otvaranje Nedavnih aplikacija i Obavijesti.

Prilagodljiva navigacija aplikacije

Prilikom izrade Android aplikacije sada možete prilagoditi navigacijske sheme pronalaženjem elemenata koji se mogu fokusirati i widgeta za unos pomoću findFocus() i focusSearch() te postaviti fokus pomoću setAccessibilityFocused() .

Dostupniji widgeti

Nova klasa android.view.accessibility.AccessibilityNodeProvider omogućuje vam da prikažete složene prilagođene prikaze uslugama pristupačnosti kako bi one mogle predstaviti informacije na pristupačniji način. android.view.accessibility.AccessibilityNodeProvider omogućuje korisničkom widgetu s naprednim sadržajem, kao što je mreža kalendara, predstavljanje logičke semantičke strukture za usluge pristupačnosti koja je potpuno odvojena od strukture izgleda widgeta. Ova semantička struktura omogućuje uslugama pristupačnosti da predstave korisniji model interakcije za korisnike oštećena vida.

Kopiranje i lijepljenje

Kopirajte i zalijepite s namjerama

Renderscript

Funkcionalnost izračuna Renderscripta poboljšana je sljedećim značajkama:

  • Podrška za više kernela unutar jedne skripte.
  • Podrška za čitanje iz dodjele s filtriranim uzorcima iz računanja u novom API-ju skripte rsSample.
  • Podrška za različite razine FP preciznosti u #pragmi.
  • Podrška za traženje dodatnih informacija iz RS objekata iz računalne skripte.
  • Brojna poboljšanja performansi.

Dostupne su i nove pragme za definiranje preciznosti pomičnog zareza koju zahtijevaju vaši računalni renderskripti. To vam omogućuje omogućavanje operacija sličnih NEON-u, kao što su brze vektorske matematičke operacije na putu CPU-a koje inače ne bi bile moguće s punim standardom IEEE 754-2008.

Bilješka: Eksperimentalni grafički mehanizam Renderscript sada je zastario.

Animacija

Animacije pokretanja aktivnosti

Pogledi na daljinu

  • "sans-serif" za regularni Roboto
  • "sans-serif-light" za Roboto Light
  • "sans-serif-condensed" za Roboto Condensed

Vibracija za kontrolere ulaza

Ako povezani ulazni uređaji imaju vlastite mogućnosti vibracije, sada možete kontrolirati vibraciju tih uređaja koristeći postojeće Vibrator API-je jednostavnim pozivanjem getVibrator() na InputDevice.

Dozvole

...

Ova značajka definira "televiziju" kao tipično televizijsko iskustvo u dnevnoj sobi: prikazano na velikom ekranu, gdje korisnik sjedi daleko, a dominantan oblik unosa je nešto poput d-pada, a općenito ne putem dodira ili miš/pokazivač-uređaj.

Svatko tko je pisao više ili manje ozbiljan softver za različite mobilne operativne sustave zna da je Android najotvoreniji OS za programere. Dostupan za aplikacije trećih strana API je ovdje puno širi, sam sustav je fleksibilniji, a pravila za stavljanje aplikacija na tržište vrlo su liberalna. Međutim, Android također ima brojne sistemske API-je koji su skriveni od aplikacija trećih strana i dostupni su samo za dionički softver. U ovom ćemo članku pokušati otkriti kako pristupiti ovim API-jima i koje mogućnosti otvaraju.

Malo teorije

Kao što svi znamo, u Androidu postoji takav koncept - dopuštenja aplikacije(dopuštenja, dopuštenja). Dozvole su zapisane u datoteku Manifest.xml svake aplikacije i određuju kojim API funkcijama aplikacija može pristupiti. Ako želite raditi s kamerom, dodajte redak u Manifest.xml . Potreban vam je pristup memorijskoj kartici - android.permission.READ_EXTERNAL_STORAGE. Sve je jednostavno i logično, a sve ovlasti dostupne aplikacijama dobro su dokumentirane.

Postoji, međutim, jedan vrlo važan detalj u ovoj skladnoj shemi, koju sami tvorci Androida nazivaju razina pristupa(razina zaštite). Da biste razumjeli što je to, pokušajte dodati sljedeći redak u Manifest.xml bilo koje vaše aplikacije:

U teoriji, ova bi moć trebala otvoriti pristup API-ju koji vam omogućuje prebacivanje pametnog telefona u način rada u zrakoplovu, uključivanje/isključivanje GPS-a i druge korisne stvari. Ali IDE ne misli tako i stoga odmah ističe redak kao pogrešku s tekstom "Dopuštenje je dodijeljeno samo sistemskim aplikacijama". Ovo je upozorenje o kršenju te razine pristupa. Čini se da nam IDE govori: da, možete svojoj aplikaciji pokušati dati dozvolu WRITE_SECURE_SETTINGS, ali Android vam i dalje neće dopustiti korištenje API-ja koji mu je dodijeljen dok svoju aplikaciju ne učinite sustavnom. Što u ovom slučaju znači "sustavno"? To znači: potpisujete ga istim digitalnim ključem kojim je potpisan sam firmware (pokušajte nabaviti takav ključ od nekog Samsunga ili LG-a!).

Službeno, Android ima četiri razine pristupa:

  • normalan- “normalne” dozvole, koje aplikaciji daju pristup bezopasnim funkcijama koje se ne mogu koristiti zlonamjerno (primjeri: SET_ALARM, ACCESS_NETWORK_STATE, VIBRATE). Sustav vam čak neće reći da ih aplikacija uopće koristi;
  • opasno- “opasne” ovlasti, korisnik će biti obaviješten o njima prilikom instaliranja aplikacije ili će vidjeti prozor upozorenja u Androidu 6.0 (primjeri: READ_SMS, SEND_SMS, CALL_PHONE, READ_CALL_LOG);
  • potpis- dostupno samo aplikacijama potpisanim firmware ključem (primjeri: GET_TASKS, MANAGE_USERS, WRITE_SETTINGS, MOUNT_UNMOUNT_FILESYSTEMS);
  • privilegiran- dostupno aplikacijama koje se nalaze u direktoriju /system/priv-app.

U većini slučajeva, razina potpisa i povlaštene razine pristupa su jednake. Na primjer, da biste dobili dopuštenje MANAGE_USERS, aplikacija mora biti potpisana ključem firmvera ili se nalazi u direktoriju /system/priv-app. Ali postoje iznimke: na primjer, ovlaštenje MANAGE_DEVICE_ADMIN ima razinu pristupa potpisu, odnosno jedini način da je dobijete je da potpišete aplikaciju ključem firmvera.

Postoji i skup internih razina pristupa uvedenih u Android za rješavanje određenih problema: instalater, razvoj, unaprijed instaliran, appop, prije23. U suštini, ovo su štake iu ovoj fazi možda ne razmišljate o njima, ali vratit ćemo se na razinu pristupa razvoju i to će nam biti vrlo korisno. U međuvremenu, razgovarajmo o tome kako dobiti razine pristupa koje su nam potrebne i što one daju.

povlaštena razina pristupa

Privilegirani nije najviša razina pristupa i ne dopušta vam korištenje cijelog Android API-ja. Međutim, u većini slučajeva to se pokazalo sasvim dovoljnim, budući da vam omogućuje instaliranje i uklanjanje aplikacija i korisnika (INSTALL_PACKAGES, DELETE_PACKAGES, MANAGE_USERS), upravljanje statusnom trakom (STATUS_BAR), upravljanje nekim postavkama napajanja (WRITE_SECURE_SETTINGS), čitanje i promijeniti Wi-Fi postavke(READ_WIFI_CREDENTIAL, OVERRIDE_WIFI_CONFIG), onemogućite aplikacije i njihove komponente (CHANGE_COMPONENT_ENABLED_STATE) i još mnogo toga.

Kako bi aplikacija dobila povlaštenu razinu pristupa, mora biti instalirana u direktoriju /system/priv-app, što znači da mora biti unaprijed instalirana kao dio firmvera. Međutim, uz root, našu aplikaciju možemo smjestiti u ovaj direktorij koristeći dvije funkcije:

// Pomoćna funkcija koja jednostavno izvršava naredbu ljuske static public boolean runCommandWait(String cmd, boolean needsu) ( try ( String su = "sh"; if (needsu) ( su = "su"; ) Proces procesa= Runtime.getRuntime().exec(novi niz(su, "-c", cmd)); int rezultat = proces.waitFor(); povratak (rezultat == 0); ) catch (IOException e) ( throw new RuntimeException(e); ) catch (InterruptedException e) ( throw new RuntimeException(e); ) ) // Funkcija čini navedenu aplikaciju sistemskom i šalje pametni telefon na statično meko ponovno pokretanje public void makeAppSystem(String appName ) ( String systemPrivAppDir = "/system/priv-app/"; String systemAppDir = "/system/app/"; String appPath = "/data/app/" + appName; // Connect /system u načinu čitanja i pisanja if (!runCommandWait("mount -o remount,rw /system", true)) ( Log.e(TAG, "makeAppSystem: Can"t mount /system"); return; ) int api = Build .VERSION.SDK_INT; String appDir = systemPrivAppDir; // Kopiraj aplikaciju u /system/priv-app ili /system/app ovisno o verziji Androida if (api >= 21) ( runCommandWait("cp -R " + appPath + "* " + appDir, true); runCommandWait("chown -R 0:0 " + appDir + appName + "*", true); runCommandWait("rm -Rf " + appPath + "*", true); ) else ( ako (api< 20) { appDir = systemAppDir; } runCommandWait("cp " + appPath + "* " + appDir, true); runCommandWait("chown 0:0 " + appDir + appName + "*", true); runCommandWait("rm -f " + appPath + "*", true); } // Отправляем смартфон в мягкую перезагрузку Shell.runCommand("am restart", true); }

Neću opisivati ​​funkciju runCommandWait; ona jednostavno izvršava naredbu ljuske i čeka da se završi (pročitajte više u mom članku o pisanju aplikacija s root pravima). Funkcija makeAppSystem pak preuzima puni naziv aplikacije (ovo je isti com.example.app koji navedete prilikom izrade novog projekta u Android Studiju) i prenosi ga u /system/priv-app ili /system/ aplikaciju, ovisno o verziji Androida koju koristite. Kod vam se može činiti malo čudnim, ali zapravo je apsolutno točan i uzima u obzir dva faktora:

  • prije Androida 4.4 (API razina: 20) direktorij /system/priv-app nije postojao i to je to aplikacije sustava nalazi se u /system/app ;
  • počevši od Androida 5.0 (razina API-ja: 21), paketi aplikacija nisu jednostavno pohranjeni u /data/app i /system/priv-app, već su smješteni unutar vlastitih zasebnih poddirektorija.

Kako koristiti ovaj kod? Vrlo je jednostavno: u Manifest.xml svojoj aplikaciji definirate sve privilegirane ovlasti koje su joj potrebne, bez obzira na IDE pogreške. Zatim, na samom početku koda aplikacije, umetnete poziv za makeAppSystem s imenom same aplikacije kao argumentom, prevedete i pokrenete. Nakon pokretanja, aplikacija se premješta u /system/priv-app, ponovno pokreće pametni telefon i otvaraju joj se svi privilegirani API-ji.

Popis privilegiranih ovlasti može se pronaći u Android izvorima. Samo potražite riječ privilegiran. Više o tome kako ih koristiti malo kasnije.

Razina pristupa potpisom

Potpisivanje firmware ključem omogućuje dobivanje najviše razine pristupa API-ju – potpis. Aplikacija s takvim pristupom može učiniti gotovo sve: manipulirati bilo kojim Android postavkama (WRITE_SETTINGS, WRITE_SECURE_SETTINGS), dodijeliti aplikacijama administratorska prava (MANAGE_DEVICE_ADMINS), programski pritisnuti gumbe i unijeti podatke u bilo koji prozor (INJECT_EVENTS) i još mnogo toga.

Ostvarite ovu razinu pristupa dionički firmware skoro nemoguće. Nijedan proizvođač pametnih telefona neće vam dati ključ za potpisivanje njihovog firmvera. Ali ako govorimo o prilagođeni firmware, tada stvari postaju malo lakše. Na primjer, noćne verzije istog CyanogenModa (i dopustite mi da vas podsjetim da ima više korisnika nego korisnika svih verzija Windows Phone, zajedno) potpisani su testnim ključem, a posebnost mu je što je javno dostupan.

Ali to nije sve, CyanogenMod ima sigurnosni mehanizam koji, za razliku od čistog Androida, ne dopušta apsolutno svim aplikacijama potpisanim firmware ključem da dobiju razinu pristupa potpisom, već samo onima koje se nalaze u /system/priv-app. Stoga, da biste dobili razinu pristupa potpisu u CyanogenMod-u (ne u Cyanogen OS-u, naglašavam), trebate:

  1. Dodajte potrebna dopuštenja u Manifest.xml aplikacije.
  2. Dodajte aplikaciji poziv funkcije makeAppSystem() opisane u prethodnom odjeljku.
  3. Potpišite izdaju verziju aplikacije ključem platforme iz repozitorija CyanogenMod.

Razvoj razine pristupa

Android ima posebnu razvojnu razinu pristupa, a razlika je u tome što je aplikacije ne primaju stavljanjem u /system/priv-app ili korištenjem digitalnog potpisa firmvera, već dinamički. To jest, sustav može dati ovu razinu pristupa bilo kojoj aplikaciji ili je može opozvati natrag. Ali najvažnije je to, imati root prava, aplikacija si može samostalno dodijeliti ovu razinu pristupa.

Da biste to učinili, samo upotrijebite kod poput ovog:

RunCommandWait("pm grant " + appName + " android.permission.WRITE_SECURE_SETTINGS", true);

U ovom slučaju, appName će dobiti dozvolu WRITE_SECURE_SETTINGS, bez obzira na to gdje je hostirana ili kojim ključem je potpisana. Cool? Nema sumnje, ali WRITE_SECURE_SETTINGS je zapravo jedina korisna dozvola s razvojnom razinom pristupa. Preostalih četrnaest su ovlasti za otklanjanje pogrešaka i testiranje (čitanje dnevnika, ispisivanja memorije i tako dalje).

Kako koristiti API sustava?

Glavni problem na koji ćete naići pri radu s API-jem sustava je potpuni (uz nekoliko iznimaka) nedostatak dokumentacije. O tome se gotovo uopće ne spominje ni u službenim ni u neslužbenim priručnicima. Informacije će se morati prikupljati malo po malo, pretražujući stotine stranica foruma i čitajući tisuće stranica izvornog koda Androida. Ipak, početnu točku, iako malu, dat ćemo vam u obliku par korisnih primjera.

WRITE_SECURE_SETTINGS

Dopuštenje WRITE_SECURE_SETTINGS uvedeno je u Androidu 4.2 radi zaštite nekih kritičnih postavki Androida. Ove postavke uključuju: uključivanje/isključivanje načina rada u zrakoplovu, upravljanje lokacijom i postavkama prijenosa podataka. Zaštićen je s tri razine pristupa: potpisom, privilegiranom i razvojnom. To jest, možete koristiti bilo koju od gore navedenih metoda za dobivanje razine pristupa kako biste svojoj aplikaciji dali dopuštenje WRITE_SECURE_SETTINGS.

Kako iskoristiti nove mogućnosti? Na primjer, ovako:

// Čitanje trenutne vrijednosti postavke boolean isEnabled = Settings.System.getInt(getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) == 1; // Prebacivanje postavki Settings.System.putInt(getContentResolver(), Settings.System.AIRPLANE_MODE_ON, isEnabled ? 0: 1); // Pošalji namjeru za promjenu Namjera namjere = nova namjera(Namjera.ACTION_AIRPLANE_MODE_CHANGED); intent.putExtra("stanje", !isEnabled); sendBroadcast(namjera);

Ovo je vrlo jednostavan kod koji glupo prebacuje pametni telefon na način rada u zrakoplovu ili obrnuto ovisno o trenutnom stanju. Sve je jednostavno i sažeto.

INSTALL_PACKAGES

Kao što naziv implicira, dopuštenje INSTALL_PACKAGES omogućuje vam "tiho" instaliranje APK paketa na sustav. Ovu značajku mogu koristiti ili aplikacije potpisane ključem firmvera (potpis) ili instalirane u /system/priv-app. U ovom slučaju čak nije potrebno koristiti Java API, samo pozovite naredbu pm (Package Manager) s konzole s potrebnim parametrima:

RunCommandWait("pm install " + apkPath, false);

Nakon što se naredba obradi, paket apkPath bit će instaliran na sustav. Mogli biste tvrditi da se isto može učiniti s root pravima i bili biste u pravu: u ovom slučaju dovoljno je promijeniti posljednji argument funkcije runCommandWait() u true. Međutim, vrijedi imati na umu da aplikacije s root pravima, prvo, dovode do pojave prozora koji od korisnika traži odgovarajuća dopuštenja, a drugo, bilježi ih isti SuperSU. Inače, dovoljno je jednom registrirati svoj softver u /system/priv-app, i on će moći bez pitanja instalirati onoliko softvera koliko želite.

Umjesto zaključaka

To je sve. Pristup privatnom API-ju u Androidu nije tako teško postići. S druge strane, s legitimnim softverom u većini slučajeva nema smisla koristiti ga; lakše je dobiti root prava i nazvati odgovarajući naredbe konzole: postavke za promjenu postavki, popodne za instaliranje/deinstaliranje aplikacija, setprop za promjenu postavki niske razine i tako dalje. No, ako govorimo o ne sasvim običnom softveru...

Android SDK uključuje razne biblioteke, dokumentaciju i alate koji pomažu u razvoju mobilnih aplikacija za Android platformu.

  • API Android SDK - Android API biblioteke predviđene za razvoj aplikacija.
  • SDK dokumentacija - uključuje opsežne referentne informacije s pojedinostima o tome što je uključeno u svaki paket i klasu i kako to koristiti pri razvoju aplikacija.
  • AVD (Android Virtual Device) - interaktivni mobilni emulator Android uređaji. Pomoću emulatora možete pokretati i testirati aplikacije bez korištenja pravog Android uređaja.
  • Razvojni alati - SDK uključuje nekoliko razvojnih alata koji vam omogućuju kompajliranje i uklanjanje pogrešaka u aplikacijama koje izradite.
  • Uzorak koda - Android SDK pruža uzorke aplikacija koje pokazuju neke od Android mogućnosti, I jednostavni programi, koji vam pokazuju kako koristiti određene API značajke u vašem kodu.

Verzije razine SDK-a i Android API-ja

Prije početka Razvoj Android aplikacija Korisno je razumjeti cjelokupni pristup platforme upravljanju promjenama API-ja. Također je važno razumjeti Android API razina (API Layer Identifier) ​​​​i njegovu ulogu u tome da vaša aplikacija bude kompatibilna s uređajima na kojima će biti instalirana.

API razina- cjelobrojna vrijednost koja jedinstveno identificira verziju API-ja platforme Android. Platforma pruža API strukture koje aplikacije mogu koristiti za interakciju Android sustav. Svaka sljedeća verzija platforme Android može uključivati ​​ažuriranja API-ja.

Ažuriranja strukture API-ja osmišljena su kako bi se osiguralo da novi API ostane kompatibilan s ranijim verzijama API-ja. Stoga je većina promjena API-ja kumulativna i uvode nove funkcionalnost ili ispravlja prethodne. Budući da se neki od API-ja stalno ažuriraju, zastarjeli API-ji se ne preporučuju za korištenje, ali se ne uklanjaju zbog kompatibilnosti s postojećim aplikacijama.

Razina API-ja koju Android aplikacija koristi određena je identifikatorom cijelog broja koji je naveden u konfiguracijskoj datoteci svake Android aplikacije.

Tablica određuje korespondenciju između API razine i verzije Android platforme.

Sukladnost s verzijom platforme i API razinom

Alati za razvoj aplikacija i otklanjanje pogrešaka

Uz emulator, SDK također uključuje mnoge druge alate za uklanjanje pogrešaka i instaliranje aplikacija koje izradite. Ako razvijate Android aplikacije koristeći Eclipse IDE, mnogi alati naredbeni redak, uključeni u SDK, već se koriste prilikom izgradnje i kompajliranja projekta. Međutim, osim njih, SDK sadrži niz korisnih alata za razvoj i uklanjanje pogrešaka u aplikacijama:

  • android- važan razvojni alat koji se pokreće iz naredbenog retka koji vam omogućuje stvaranje, brisanje i konfiguriranje virtualnih uređaja, stvaranje i ažuriranje Android projekata (kada radite izvan Eclipse okruženja) i ažuriranje Android SDK-a novim platformama, dodacima i dokumentacijom;
  • Dalvik Debug Monitor Service (DDMS)- integriran s Dalvik Virtual Machine, standard virtualni stroj Android platforma, ovaj alat vam omogućuje upravljanje procesima i na emulatoru i na uređaju, a također pomaže u otklanjanju pogrešaka u aplikacijama. Ovu uslugu možete koristiti za prekid procesa, odabir određenog procesa za otklanjanje pogrešaka, generiranje podataka praćenja, pregled informacija o hrpi ili niti, snimanje zaslona emulatora ili uređaja i još mnogo toga;
  • Preglednik hijerarhije- vizualni alat koji vam omogućuje uklanjanje pogrešaka i optimizaciju korisničkog sučelja aplikacije koja se razvija. Prikazuje vizualno stablo hijerarhije prikaza, analizira izvedbu ponovnog crtanja grafičke slike na zaslonu i može obavljati mnoge druge funkcije za analizu grafičkog sučelja aplikacija;
  • Layoutopt je alat naredbenog retka koji pomaže optimizirati sheme označavanja i hijerarhije označavanja u aplikaciji koju stvarate. Neophodno za rješavanje problema pri izradi složenih grafičkih sučelja koja mogu utjecati na performanse aplikacije;
  • Izvući 9-patc h- grafički urednik, koji vam omogućuje jednostavno stvaranje NinePath grafike za grafičko sučelje razvijenih aplikacija;
  • sqlite3- alat za pristup SQLite podatkovnim datotekama koje kreiraju i koriste Android aplikacije;
  • Traceview- ovaj alat pruža grafičku analizu zapisa praćenja koji se mogu generirati iz aplikacija;
  • mksdcard- alat za slike diska koji možete koristiti u emulatoru za simulaciju posjedovanja vanjska kartica memorija (npr. SD kartica).
  • Najvažniji od njih je emulator mobilni uređaj međutim, SDK također uključuje druge alate za otklanjanje pogrešaka, pakiranje i instaliranje vaših aplikacija na emulator.

Android virtualni uređaj

Android virtualni uređaj (Android virtualni uređaj) je emulator koji radi na redovno računalo. Emulator se koristi za dizajniranje, uklanjanje pogrešaka i testiranje aplikacija u stvarnom okruženju za izvođenje.

Prije nego što možete pokrenuti emulator Android uređaja, morate stvoriti Android virtualni uređaj (AVD) . AVD Definira sliku sustava i postavke uređaja koje koristi emulator.

Postoje dva načina za stvaranje emulatora uređaja:

  1. U naredbenom retku pomoću uslužnog programa za android, dostupnog u direktoriju u koji ste instalirali Android SDK, u mapi s alatima.
  2. Vizualno S koristeći Android SDK i AVD Manager u Eclipse IDE odabirom stavke izbornika Prozor | Android SDK i AVD Manager. Pojavit će se prozor Android SDK i AVD Manager s kojim možete kreirati i konfigurirati emulatore mobilnih uređaja, kao i preuzeti ažuriranja Android SDK-a.

Prozor Android SDK i AVD Manager također će se pojaviti ako pozovete android.exe bez parametara u naredbenom retku.

iAndroid SDK i AVD Manager

Prozor Android SDK i AVD Manager

Na desnoj strani ploče Popis postojećih Android virtualnih uređaja kliknite gumb Novo, koji će otvoriti prozor Stvori novi AVD.

U ovom prozoru postavite željenu konfiguraciju za emulator uređaja koji se stvara:

  • Ime- naziv uređaja koji se stvara;
  • Cilj- Android verzija SDK koji podržava uređaj. Uređaj je kompatibilan sa starijim verzijama SDK-a, tj. ako je odabran Android 2.0, emulator će podržavati verzije SDK-a 1.6, 1.5, 1.1;
  • SD kartica- instalira virtualnu SD karticu;
  • Koža- vrsta zaslona uređaja. Platforma koja se može preuzeti uključuje niz maski emulatora koji se mogu koristiti za simulaciju performansi aplikacije na uređajima različitih veličina zaslona i razlučivosti. Skup skinova za emulator ovisno o instalirana verzija SDK naveden u polju Cilj sadrži različite vrste i veličine zaslona, ​​na primjer:
  • HVGA(Pola veličine VGA video Grafički niz), veličina 320x480, srednja gustoća, normalan zaslon;
  • WVGA800 (Širok videografički niz), veličina 480x800, visoka gustoća, normalan ekran;
  • WVGA854 (Širok videografički niz), 480x854, visoka gustoća, normalan zaslon;
  • QVGA (Quarter Video Graphics Array), veličina 240x320, niska gustoća, mali ekran;
  • WQVGA (Wide Quarter Video Graphics Array), veličina 240x400, niska gustoća, normalni zaslon;

  • Hardver- imitacija opreme instalirane na uređaju. Ako je potrebno, klikom na gumb Novo možete otvoriti prozor za dodavanje dodatne virtualne opreme.

Prozor za dodavanje dodatnog virtualnog hardvera

Nakon postavljanja konfiguracije i klika na gumb Create AVD, upravitelj će kreirati novi virtualni uređaj čiji će se naziv i verzija API-ja pojaviti na popisu Popis postojećih Android virtualnih uređaja.

Za više finih podešavanja, bolje je koristiti alat naredbenog retka andnoid.exe. Ima više mogućnosti od Map9er-ovog vizualnog AVD-a i pogodan je za konfiguriranje mreže, portova i virtualnog hardvera emulatora. Nažalost, zbog ograničenog prostora knjige, nije moguće detaljnije razmotriti ovaj alat.

Ovisno o podržanom API verzijeizgled virtualni uređaj bit će drugačije.

Prozor emulatora dizajniran je u obliku telefona s dodatnom tipkovnicom. Nakon što se sustav pokrene, pojavljuje se Početni zaslon - Android radna površina. Za pristup upotrijebite gumb s ikonom kuće. Emulator također simulira ekran na dodir pravog mobilnog uređaja - u emulatoru pritisnite lijevu tipku miša na ekranu.

Emulator ima dvije virtualne radne površine, kojima se može kretati pomoću tipki sa strelicama na navigacijska traka uređaju ili pomicanjem pokazivača dok držite pritisnutu lijevu tipku miša (u stvarnom uređaju pomicanjem prsta po zaslonu). Osim programskih prečaca, na radnu površinu možete postaviti widgete.

Izgled AVD verzije 1.5

Izgled AVD verzije 2.0

Za testiranje izgleda aplikacija koja se stvara na različitim položajima na zaslonu pomoću kombinacije tipki +Možete promijeniti raspored zaslona iz okomitog u vodoravni i obrnuto.

Traka na vrhu zaslona je Statusna traka. Sadrži ikone obavijesti sustava: jačina signala postaje mobilne komunikacije, punjenje baterije i Trenutno vrijeme. Ploča Statusna traka također je dizajniran za prikaz (u obliku ikona koje se pojavljuju na lijevoj strani ploče) korisničkih obavijesti o propuštenim pozivima, nepročitanim tekstualnim i multimedijskim porukama, primljenoj pošti i obavijestima sustava od usluga koje rade u pozadini. Ako u Statusna traka odaberite ikonu obavijesti i povucite prema dolje oznaku koja se pojavi, otvara se proširena ploča obavijesti s detaljnijim informacijama i gumbom za zatvaranje obavijesti.

Oznaka na dnu zaslona omogućuje vam otvaranje prozora za pokretanje aplikacija instaliranih na sustavu - Pokretač aplikacija. Prozor se produžuje kada kliknete na oznaku.

Međutim, emulator ne podržava neke funkcije dostupne na stvarnim uređajima:

  • dolazne i odlazne poruke. Međutim, možete simulirati telefonske pozive putem sučelja emulatora;

Launchpad instalirane aplikacijePokretač aplikacija

  • USB priključak;
  • video kamera (međutim, postoji simulator video kamere);
  • povezivanje slušalica;
  • određivanje statusa veze;
  • određivanje razine napunjenosti baterija; D otkrivanje umetanja ili uklanjanja SD kartice;
  • Bluetooth veza.

Sigurno, pravi telefoni malo drugačiji od emulatora, ali općenito AVD dizajniran vrlo kvalitetno i funkcionalno blizak stvarnom uređaju.

SADRŽANO U: OPIS:

Omogućuje vam da odredite kompatibilnost aplikacije s jednom ili više verzija platforme pomoću API razina. Unatoč nazivu, ovaj se element koristi za označavanje broja razine API-ja, a ne broja verzije SDK-a ili verzije Android platforme. API razina je jedan cijeli broj i uvijek je povezana s odgovarajućim brojem Android platforme.

ATRIBUTI: android:minSdkVersion

Cijeli broj koji označava minimalnu razinu API-ja koju aplikacija zahtijeva za rad. Sustav sprječava instalaciju aplikacije ako je API razina na uređaju niža od one navedene u ovom atributu. Ovaj se atribut uvijek mora koristiti.

Pažnja: ako ne navedete ovaj atribut, sustav će koristiti zadanu vrijednost od 1 , što znači da je aplikacija kompatibilna sa svim verzijama Androida. Ako aplikacija ne podržava sve verzije (na primjer, koristi API 3) i ne navedete vrijednost minSdkVersion, kada instalirate aplikaciju na sustav s API-jem nižim od 3, srušit će se ako pokuša koristiti nedostupne funkcije uzvodnog API-ja. Stoga uvijek navedite odgovarajuću vrijednost API razine za ovaj atribut.

Android:targetSdkVersion

Cijeli broj koji označava verziju API-ja koju aplikacija cilja. Ako atribut nije naveden, koristi se vrijednost ekvivalentna minSdkVersion.

Atribut govori sustavu da ste testirali aplikaciju u navedenoj verziji i da sustav ne bi trebao dopustiti aplikaciji da radi u načinu rada kompatibilnosti. Izlaskom novih verzija mijenja se ponašanje i izgled sustava. Međutim, ako je API razina platforme viša od verzije navedene u ovom atributu, sustav dopušta korištenje načina kompatibilnosti tako da aplikacija radi kako očekujete. Ovo ponašanje možete onemogućiti postavljanjem targetSdkVersion na verziju platforme na kojoj se aplikacija izvodi. Na primjer, postavljanje vrijednosti 11 i više omogućit će sustavu da primijeni Xono temu kada radi na Androidu 3.0 i novijim, a također onemogućuje način rada kompatibilnosti zaslona kada radi na većim ekranima (jer API 11 implicitno podržava veće ekrane).

Da biste podržali aplikaciju sa svakom verzijom Androida, morate povećati vrijednost ovog atributa prema posljednjoj dostupnoj API razini, a zatim temeljito testirati aplikaciju na odgovarajućoj platformi.

Dodano u API 4.

Android: maxSdkVersion

Označavanje cijelog broja maksimalna razina API u kojem se aplikacija može izvoditi.

U Androidu 1.5, 1.6 i 2.0.1 sustav je provjeravao vrijednost atributa prilikom instalacije i provjere valjanosti aplikacije nakon ažuriranja sustava. U svakom slučaju, ako je vrijednost atributa niža od API razine sustava, sustav neće dopustiti instalaciju aplikacije. Ako se aplikacija provjeri nakon ažuriranja sustava i verzije se ne podudaraju, aplikacija se uklanja s uređaja.

Da biste pokazali kako atribut utječe na aplikaciju nakon ažuriranja sustava, razmotrite sljedeći primjer:

Za aplikaciju, vrijednost atributa je maxSdkVersion=5. Korisnik uređaja s Androidom 1.6 (API 4) preuzeo je i instalirao aplikaciju. Nekoliko tjedana kasnije, korisnik je ažurirao verziju Androida na 2.0 (API 5). Nakon ažuriranja, sustav ponovno provjerava atribut i ostavlja aplikaciju na uređaju. Aplikacija radi dobro. Međutim, nakon nekog vremena uređaj se ažurira na Android verziju 2.0.1 (API 6). Nakon ažuriranja, sustav ne može potvrditi da je aplikacija pokrenuta jer je API razina sustava (6) viša od maksimalne postavljene za aplikaciju (5). Sustav briše aplikaciju.

Upozorenje: navođenje ovog atributa se ne preporučuje! Prvo, nema potrebe za postavljanjem atributa za sprječavanje instalacije na nove verzije Androida čim budu objavljene, budući da su nove verzije potpuno kompatibilne sa starijim verzijama. Aplikacija bi trebala ispravno raditi s novim verzijama, pod uvjetom da se koristi standardni API. Drugo, imajte na umu da u nekim slučajevima navođenje atributa može dovesti do deinstaliranja aplikacije nakon sljedećeg ažuriranja sustava do više visoka razina API. Većina uređaja povremeno bežično ažurira verziju platforme, pa biste trebali uzeti u obzir ovu činjenicu prije navođenja ovog atributa.

Dodano u API 4.

Android nakon verzije 2.0.1 više ne provjerava atribut maxSdkVersion tijekom instalacije aplikacije ili nakon ažuriranja sustava. Google Play koristit će atribut za filtriranje aplikacija kako bi spriječio instalaciju na neprikladne uređaje.

DODANO: API razina 1

Što je API razina?

Razina API-ja je cijeli broj koji identificira jedinstvenu reviziju API-ja platforme Android.

Platforma Android pruža API koji aplikacije mogu koristiti za interakciju s temeljnim sustavom i uključuje:

  • skup kernel paketa i klasa.
  • skup XML elemenata i atributa za datoteku manifesta.
  • skup XML elemenata i atributa za deklariranje resursa.
  • skup namjera.
  • skup dozvola koje aplikacije zahtijevaju i uključene su u sustave.

Svaka sljedeća verzija Androida može uključivati ​​ažuriranja aplikacija sustava.

Ažuriranja okvira dizajnirana su da ostanu kompatibilna s ranijim verzijama. Odnosno, većina promjena API-ja dodaje nove mogućnosti. Kada ažurirate dio API-ja, stari dio je označen kao zastario, ali nije uklonjen, tako da ga postojeće aplikacije i dalje mogu koristiti. Funkcije se vrlo rijetko uklanjaju iz API-ja, a to je uglavnom zbog sigurnosnih razloga. Svi ostali dijelovi ranijih verzija prenose se bez promjena.

Okvir koji koristi Android platforma specificira se korištenjem cijelog broja koji se naziva API razina. Svaka verzija Androida podržava točno jednu API razinu, iako uključuje i više rane verzije(do API 1). Prvo izdanje Androida u skladu je s API-jem 1.

Verzija platformeAPI razinaVERSION_CODEBilješke
Android 5.0 LIZALICA Istaknute karakteristike platforme
Android 4,4 W KITKAT_SAT KitKat samo za nosive uređaje
Android 4.4 KIT KAT Istaknute karakteristike platforme
Android 4.3