2018. május 24.

Androidos újdonságok a Google I/O 2018-on

10 perc olvasási idő

Androidos újdonságok a Google I/O 2018-on

A Google asszisztens felhívja a fodrászt és lefoglalja a számomra ideális időpontot nála. Talán ez volt az idei I/O leginkább hűha pillanata. Ezen kívül volt viszont Android-ot érintő bejelentés és hasznos előadás. Összeszedtem mik voltak ezek.

Jetpack

Létrehoztak egy olyan csomagot, amelyben fejlesztést segítő eszközök és dokumentációk találhatóak meg. 4 nagy részre oszlik:

  • Foundation (KTX, appcompat, multidex, test)
  • Architechture (databinding, Lifecycles, ViewModel, LiveData, Room, Paging, Navigation, WorkManager)
  • Behavior (Download manager, Media, Notifications, Permissions, Sharing, Slices)
  • UI (Animations, Auto, Emoji, Framgent, Layout, Palette, TV, Wear OS)

AppCompat

A legnagyobb változás, mert átírták a namespace-t. Az android.support.v4 átváltozik androidx-re, ami Android eXtensions-t takar. Ez érinti a többi support névteret használó könyvtárat is és mindegyik az új alatt lesz elérhető.
v4 a 4-es apival való kompatibilis osztályokat rejtette magában. Sok év eltelt és a minimum API 16 már, de a név beragadt.

Külön eszközt írtak az Android Studioba, ami a projektedet átírja az újra. Függőségekben is át kell írni, így egy Jetifier nevű eszköz azokban is átírja. Egyelőre ezek az eszközök tesztelés alatt vannak és az Android Studio 3.2 canary verziójában érhetőek el.

A verziózás is megváltozik és 28.0.0 az utolsó API-hoz kötődő verzió. Semantic versioning-et fognak alkalmazni. Függetlenek lesznek egymástól a komponensek verziói, tehát ha kijavítanak a RecyclerView-ban egy hibát, azt a verziójának növelésével azonnal ki lehet adni.
Mindezekről és a további újdonságokról nézd meg az előadást.

WorkManager

Egy új lib a Jetpackban a WorkManger, ami a háttérben történő munkákat könnyíti meg. Ezzel nem kell vacakolni JobSchedulerrel, Alarmokkal Firebase JobDispatcherrel. Az előadás alapján egész jónak tűnik, a munkákat akár össze is láncolhatjuk és egyik kimenete a másik bemenete lehet. Play Service sem kell hozzá, de egyelőre még alfában van.

iOS oldalon jártas arcoknak Storyboard jellegű lesz ez funkció. Egy navigation editoron dolgoznak, ahol összekötheted a kis nyilacskákkal melyik képernyőből hova megy a felhasználó. Kódban pár sor és működik. Szerencsére itt az XML olvasható és szerkeszthető nem úgy, mint iOS-en. A WorkManagerhez hasonlóan alfa verzióban érhető még csak el.

Paging

Már egy ideje készülőben volt, de végre kijött az 1.0 verzió. Ezzel egy RecycleView-ben lehet nagy listákat lapozással kezelni. Room-mal és Retrofit-tel kompatibilis. A prezentációban nagyszerűen elmagyarázzák hogyan hozták létre és milyen lehetőségek vannak.

Android developer oldal
További Jetpack prezentációk:

Build

Fordítás

Az elmúlt időszakban több fejlesztés is történt. Például 3.0-ás Android Gradle pluginnal (AGP) jött az aapt2, ami a tudja az incremental resource compilationt. Aki még nem állt át erre, az tegye meg, mert az aapt1-nek hamarosan annyi.
D8-at is bevezették egy hónapja és az 3.1-es Android Studio-ban ez az alapértelmezett dexer. A dexer feladata alakítani a Java bytekódot Dalvik bytekóddá, hogy futhasson Androidon. Inkrementális és jobban kezeli a debug információkat, míg a DX-ben azok elveszhettek, amivel biztos találkozott mindenki.
R8 lesz a Proguard-ot leváltó shrinker, ami kiszedi a kódodból a felesleget és optimalizálja. R8 kompatibilis a meglévő Proguard szabályokkal, de gyorsabb, kisebb dex fájlokat eredményez és Kotlin specifikus optimlizálások is kerülnek bele. Tesztelheted az Android Studio 3.1 verziójában is egy Gradle kapcsolóval.

Magyarázat a működésről és a változásokról bővebben az előadásban.

Gradle

A javac és kotlinc támogatják az incremental fordítást, de ha annotation processort használsz ez nincs kihasználva, újra lesz fordítva minden. Az olyan könyvtárak, mint a Butterknife vagy Glide azt használnak, így ez sok fejlesztőt érint.
Szerencsére a Gradle 4.7 már támogatja ezeket, ami egy lépés előre. Üröm az örömben, hogy a könyvtáraknak fejleszteni kell ehhez.

Ami meglepett, hogy az R fájlok generálása meg fog változni. Ebben vannak a resource id-k. Ezek nem lesznek többé final mezők, azaz kódban például nem lehet többé switch-ben használni őket. Lehetséges, hogy nem is R-nek fogják ezeket az osztályokat hívni. Ezt a változást Android Studio 3.3-ban lehet várni, de lesz eszköz, ami segít migrálni.

Új AGP API és több infó az előadásban.
Proguard előadás a működéséről és jobb szabályok írásáról.

Play Console

Verziókezelés

Most már lehet több zárt tesztelési csatorna is. Például minden új funkciónak külön létrehozhatsz egyet. Ezen kívül ugyebár az elmúlt hónapban a perceken belül megjelenő belső tesztelést is bevezették.
Ezt megtámogatják az API oldalról a vázlat (draft) létrehozásának lehetőségével. Tehát első lépésként egy CI szerverrel előkészítheted kiadásra az applikációt, majd pedig te magad manuálisan kiengedheted, ha minden rendben van.
Az előadásban a Google appok kiadásának folyamatát is bemutatják.

Vitals

Be lehet kapcsolni, hogy küldjenek emailt, ha anomáliák, kiugró értékek történnek. Hozzáadtak egy új mutatót is, ami jelzi hányan utasították vissza az engedély kéréseket.
Érdemes nézegetni a vitals opciót Play Console-on, mert olyan crasheket is elkaphat, amikor még egy külső lib be sem töltött. Továbbá a Play Store-ban keresésében elfoglalt helyet is befolyásolja, milyen jól fut az alkalmazás.
Az előadásban megtekintheted, milyen eszközökkel keresheted meg ezeket a hibákat.

Tesztelés

Kibővítik a pre-launch tesztelést deep link, accessibility és demo loop támogatással. A demo loop a játékfejlesztőknek lehet érdekes, ami tulajdonképpen felvett OpenGL parancsok visszajátszása.
Több részletet megtudhatsz a prezentációból.

Fizetés

Egy új központi helyet mutattak be a Play Store alkalmazásban, ahol a felhasználók kezelhetik a feliratkozásaikat. Jön az új billing library és Google Pay-t kiterjesztik majd hamarosan Magyarországra is.
A feliratkozásokról és a Google Pay-ről szóló előadásokat is érdemes megtekinteni.

Kötelező targetSdkVersion

Nem szabad elfelejteni, hogy a 26-os API lesz a kötelező targetSdkVersion új appoknak augusztustól és létezőknek novembertől. A könyebb migráció érdekében erről is tartottak egy előadást.

App Bundle

Minél nagyobb az APK mérete, annál kevesebben töltik le az adatlapot meglátogatók közül. Ez a konverziós ráta körülbelül 6MB-onként 1%-kal csökken. A nagyobb app méretek hatalmas sávszélességet és szerverkapacitást is felemésztenek a Google oldaláról, ezért jött elő az App Bundle formátummal. iOS-ben jártas kollégáknak az App Thinning nevű funkció kell, hogy beugorjon, mert ez hasonló.
A használatához nem kell módosítani a kódot csak ezzel a funkcióval kell elkészíteni az apk-t és feltölteni. A Google szétdarabolja és a megfelelő apk-kat juttatja el a felhasználónak. Ez kiváltja a Gradle-ben használt split apk kódot.

Ide kapcsolódik a Dynamic features. Ennek segítségével csak akkor történik meg egy funkció letöltése, amikor azt el akarja érni a felhasználó az app használata közben. Például ha egy funkciót csak nagyon kevesen használnak, akkor nem kell mindenkinek letöltenie csak annak, aki használni akarja. Ehhez modulárisan szükséges felépíteni az alkalmazást. Egyelőre bétában van ez a lehetőség és jelentkezni kell rá.

A moduláris, instant és dinamikus appokról szóló előadás vár rád.

Android P

Érdemes figyelni a standby buckets-re, ahol gépi tanulás segítségével 4 kategóriába sorolják az appokat, aktívtól kezdve a ritkán használtig. Itt a ritka kategóriára már elég nagy megszorítások várnak, de a töltőn mindenkinek van mindene:

Standby bucket restrictions

Egyelőre kérdéses erre mekkora ráhatásuk lesz a gyártóknak.

Biztonsági javítások is történtek. Le lett tiltva a mikrofon, kamera és a szenzorok közvetlen hozzáférése, ha háttérben van az app. Erről és sok biztonsági újításról, mint a kötelező biztonsági patch-ek gyártók számára, nézd meg az ide vágó előadást.

Épületen belüli navigáció egy érdekes képesség, ami a megfelelő hardveres támogatással elérhető lesz. A prezentációban dual frequency GPS telefonokról és működésükről is szó volt. Érdemes megnézni.

Android Runtime(ART)-ban is történtek igen érdekes fejlesztések. Appok futtatásakor a profil készül róluk, ami alapján optimalizálva van később a háttérben. Ezt feltöltik a felhőbe, majd amikor letöltöd az alkalmazást letöltöd vele a profilt is. Így lett a Google Maps első futtatása például 25%-kal gyorsabb. Kerültek be Kotlin specifikus optimalizációk is. A profilozás működéséről és egyéb új optimalizálásokról nézd meg az előadást.

Tesztelés

Egységes API-t készítenek a teszteléshez, amivel mind készüléken és anélkül tesztelheted az appodat.
Továbbá AS 3.2-ben profiling részt is tovább erősítették egy új résszel, ahol látni mekkora hatással lesz az appod az akkumulátorra. Lehet már kódból vezérelni felvételt és már az app indulását is lehet teljes mértékben mérni.
Tesztelés és profiling további újdonságairól az előadások.

Egyéb témák

Modern Android Development

Végre elkezdtek több javaslatot adni, hogyan kell fejleszteni Androidra. Sajnos a hivatalos dokumentációjuk ehhez képest el van maradva. Pár érdekes pont az előadásból:

  • A Hierarchy Viewer-t és TraceView-t felváltotta a Studióba beépített Profiler, Layout Inspector
  • Dalvikot felváltotta az ART
  • Kotlin a javasolt nyelv
  • Layoutok közül LinearLayout, FrameLayout oké, ha egyszerű és nincs egymásba ágyazva akkor oké, amúgy ContstraintLayout-ot javasolt használni
  • ListView, GridView és Gallery nem javasolt, hanem RecyclerView
  • Enum oké, de még mindig mobil készülékekre programozunk
  • Support lib Fragmenteket javasolt használni a platformba épített az deprecated
  • Single Activity app a javasolt forma
  • Lifecycle, ViewModel és LiveData komponenst javasolt használni a képernyőforgatások, életciklusok és adatváltozások kezeléséhez

Material

Az appok kezdtek megkülönbözhetetlenek lenni, ezért témázható lett. A material.io honlap is megváltozott, ahol új eszközök és leírások segítik az implementálást. Nagyobb erőfeszítést tesznek arra, hogy meglegyen minden lehetőség a platformokon és ez dokumentálva is legyen megfelelően.

Android Things

Internet of Things készülékekre is elérhető az Android és ez elérte az 1.0 verziót. Azokra a készülékekre érdemes elsődlegesen választani, ahol gépi intelligencia szükséges a készülékre. Elég sok prezentáció volt róla:

Android GO

1GB vagy kevesebb memóriával rendelkező készülékek. Ez a 2017-ban szállított készülékek 25%-a volt. Elsődleges piac India, de ami meglepő lehet, hogy a második Amerika. Másik érdekes statisztika, hogy a felhasználók a kisebb méretű appot választják akkor is, ha rosszabb az értékelése. A prezentáció arról szólt hogyan optimalizáljunk rá.

Slices, App Actions és Assistant támogatás

A Slice egy dinamikus felület, ami megjelenhet például a keresőben. Ha a „wifi” szóra keresel, akkor így meg tud jelenni egy wifi kapcsoló. Template-elhető, tehát nem lehet akárhogyan megjeleníteni, de a te appod is megjelenítheti más alkalmazások Slice-ait.

Az App Action egy deep link az alkalmazásodba. Egy fájlban meg kell mondani, milyen akciókat lehet végrehajtani az alkalmazással. Ennek segítségévvel például, ha kijelöli a felhasználó a Tankcsapda szöveget akkor a felugró kontextus menüben előjöhet a lejátszás opció.
Assistant támogatást is lehet építeni, ahol hanggal is végre lehet ezt hajtani.
Ezeket a nyáron érkeznek majd valamikor dokumentációval együtt.
A Slice és az App Actions prezentációban mindezt megtekintheted.

ConstraintLayout

Nemrég kijött az 1.1 verzió, amiben például rádiusz és szög megadásával is be lehet pozícionálni egy másik elemet. Az előadásban a 2.0 verzióba lehetett beletekinteni, amiben mint valami grafikus a visual editorban keyframe animációkat hozhatunk majd létre.

További érdekes előadások

Vaszil Ádám

Már sok-sok éve szeretne programozó lenni, de mivel ennyi nyelvet nehéz megtanulni, ezért inkább csak a Javara koncentrál.

Vaszil Ádám

Hozzászólások