Az Android 12 Fabricated Overlay API-ja visszahozza a gyökér nélküli témákat

Emlékszel, hogy az Android 8 hogyan tette egyszerűvé az eszköz témáját? Emlékszel, milyen szórakoztató volt? Nos, újra az Android 12-ben, egy csavarral.

A teljes istálló Android 12 a kiadás a sarkon van, és a Google is közzétette a forráskódot az AOSP repójához. Van egy sok újdonság az Android 12-ben, beleértve a Fabricated Overlays nevű erőforrás-fedvények kiegészítését. Amit API-nak szántak, hogy segítse a rendszert a használt dinamikus változások kezelésében Anyag Te és a monet valami sokkal nagyobb dologgá válhat – legalábbis az Android 13 megjelenéséig.

Háttér

Mishaal Rahman felfedezte ezt az új API-t, és felhívta a figyelmemet rá. A shell parancsot használta hozzá, hogy anélkül tesztelje a különböző erőforrásértékeket az Android 12-ben átfedő APK-k manuális fordításához, és úgy gondolta, hogy ez érdekes alkalmazásötletet jelenthet rootolt eszközökhöz. Amikor felhívta a figyelmemet rá, sokat foglalkoztam az Android 12 forráskódjával, és észrevettem valamit, amit nagyon érdekesnek tartottam. Kipróbáltam, amit találtam, és most itt tartunk -- mint kiderült, a Fabricated Overlay API segítségével vissza lehet hozni a gyökértelen témákat. Mielőtt túlságosan belemennék az itteni történésekbe, elmagyarázom, mik is valójában a Fabricated Overlays.

Mik azok az előállított fedvények?

A Fabricated Overlays egy új funkció, amelyet az Android 12-ben vezettek be. Hasonlóak a klasszikus Runtime Resource Overlay-ekhez (RRO), amelyekkel az Android már néhány éve rendelkezik. Az RRO-k és a Fabricated Overlay-k is felülírhatják a különböző erőforrásokat a különböző alkalmazásokhoz. Módosíthatja a logikai értéket hamisról igazra (vagy fordítva), beállíthatja, hogy mekkora legyen az állapotsor, és így tovább.

A gyártott lefedések azonban jelentős különbségeket mutatnak az RRO-któl. Egyrészt nem kell átfedő APK-t generálnia, majd telepítenie. Ehelyett csak meg kell mondania az Androidnak, hogy melyik alkalmazáshoz mely értékeket szeretné módosítani, és az gondoskodik a változtatások regisztrálásáról, majd engedélyezhető fedvényként.

Kicsit korlátozottabbak is, mint az RRO-k. Az Android 11 előtt az RRO-k szinte bármilyen erőforrást felülírhattak: logikai értékeket, egész számokat, méreteket, attribútumokat, elrendezéseket és még a nyers adatfájlokat is. Az Android 11 néhány változtatást eszközölt az RRO-k működésében, így az elrendezések felülbírálása már nem igazán kivitelezhető, bár összességében stabilabbá tette az RRO-kat.

A Fabricated Overlays viszont csak olyan értékeket írhat felül, amelyek egész számként ábrázolhatók. Ez magában foglalja az egész számokat (duh), a méreteket, a logikai értékeket és a színeket. Nem használhatja őket nyersadat-erőforrások, elrendezések, karakterláncok vagy tömbök felülbírálására – legalábbis nem könnyen. Ez némileg önkényes korlátozás az API-ban: csak egész értékeket és a TypedValue osztály által meghatározott erőforráskategóriákat fogad el. A TypedValue igen támogatás karakterláncokat és a többi erőforrástípust, de csak az erőforrásukra való hivatkozásra, nem pedig a tényleges adatok tárolására.

Ezek a korlátozások azonban nem túl nagy ügyek a Fabricated Overlays: Material You és a pénzhatások tervezett céljához. Az elkészített lefedések megkönnyítik a rendszer számára a szín- és méretfedvények menet közbeni létrehozását és alkalmazását anélkül, hogy újra kellene indítania vagy meg kellene várnia az APK lefordítására.

Normális esetben ez csak egy újabb ügyes API a rootolt eszközökkel rendelkezők számára, amelyeket kihasználhatnak. Hacsak nincs a gyártó által létrehozott kiskapu (mint amilyet a Synergy kihasznál a Samsung készülékeken), a fedvényeket csak root hozzáféréssel rendelkező harmadik felek telepíthetik. Ez azonban a legjobb rész – a Google elfelejtett befoltozni egy lyukat az Android 12-ben.

Gyökér nélkül gyártott fedések

Az Android 8 bevezette az új Overlay Manager Service (vagy OMS) API-t, és az emberek gyorsan rájöttek, hogy az overlay APK-kat normál alkalmazásokként lehet telepíteni, majd az ADB segítségével engedélyezni. Sajnos a Google ezt javította az Android 9-ben, és azóta csak a rendszerrel azonos kulccsal aláírt átfedések telepíthetők dinamikusan.

Mint kiderült, az Android 12 Fabricated Overlay-inek van egy kiskaputja, amely az Android 8-ra emlékeztet: nincs szükségük root hozzáférésre vagy aláírási szintű engedélyekre. Csak szükségük van valamire, amely shell felhasználóként fut (azaz ADB-re), hogy regisztrálja őket.

Elég egyértelmű, hogy a Google úgy tervezte, hogy a Fabricated Overlays csak a gyökér- és rendszerfelhasználók számára legyen elérhető. Létrehozásukhoz létezik egy ADB-parancsmegvalósítás, amely nem fog futni, ha a végrehajtó felhasználó nem root. A kiskapu az, hogy az ellenőrzés csak a parancsban van, a tényleges API-ban nem, ami azt jelenti, hogy egy kis munkával kihasználhatjuk.

ADB On-Device

Az Android már régóta rendelkezik vezeték nélküli ADB funkcióval. Ez lehetővé teszi, hogy a számítógép (vagy bármi, ami ADB bináris és hálózati hozzáféréssel rendelkezik) vezeték nélkül csatlakozzon egy eszközhöz. Leginkább olyan Android-eszközökhöz készült, amelyek nem rendelkeznek a felhasználó által elérhető USB-csatlakozással, mint pl okosórák és tévék. Ezenkívül az Android 11 előtt vezetékes ADB-kapcsolatra volt szüksége az aktiváláshoz vezetéknélküli mód.

Az Android 11 hivatalosan is elhozta a vezeték nélküli ADB-t a telefonokhoz és táblagépekhez. Kicsit bonyolultabb, mint a klasszikus vezeték nélküli ADB, párosítási és hitelesítési kódokkal, de a felhasználó teljesen az eszközön aktiválhatja, mindaddig, amíg az eszköz csatlakozik a WiFi-hez. Ez azt jelenti, hogy eszközéről ADB-n keresztül csatlakozhat az eszközéhez, és csak WiFi-re van szüksége kapcsolat.

Emelt API-k használata egy alkalmazásban

Számos oka lehet annak, hogy érdemes korlátozott API-kat használni az alkalmazásban. Általában azért, mert biztosítanak néhány speciális funkciót, amire szüksége van. Mindaddig, amíg a szükséges API-nak van shell-parancs-megvalósítása, meglehetősen könnyű használni egy alkalmazásból. Mindössze annyit kell tennie, hogy létrehoz egy shell-folyamatot rootként (vagy ADB-ként), futtassa a megfelelő parancsot, és elemzi az eredményt, ha van ilyen.

Mi a teendő, ha az API-nak nincs shell implementációja, vagy a shell implementációból hiányzik valami, amire szüksége van? Ha rootolt eszközt használ, használhat valami hasonlót libRootJava. A libRootJava segítségével úgy kommunikálhat az Android keretrendszer API-kkal, mintha az alkalmazás root felhasználóként futna. Ez kényelmesebb és sokkal gyorsabb is, mint a shell-parancsok futtatása, mivel mindez ugyanazon a nyelven van, és nem kell aggódnia a karakterláncok kézi elemzése miatt. Vannak bizonyos korlátai, de a legtöbb esetben nagyszerűen működik.

A libRootJava API meglehetősen rugalmas. Átalakíthatja úgy, hogy a root helyett shell felhasználóként fusson. Szerencsére nem kell, mert valaki már elkészítette, és hívják Shizuku. A Shizuku szinte olyan, mint a Magisk Manager és a libRootJava kombinációja.

A Shizuku Manager alkalmazás végigvezeti Önt a Shizuku által elérhető shell-felhasználóként futó folyamat beállításán. A Shizuku API könyvtár implementálható alkalmazásokba, hogy lehetővé tegye számukra a rendszer API-khoz való hozzáférését, mintha ők lennének a shell-felhasználók. Ez egy sokkal központosabb folyamat, mint a libRootJava, mivel a Shizuku-t csak egyszer kell beállítani, mielőtt a Shizuku API-könyvtárat megvalósító összes alkalmazás használhatná. Ha érdekli, hogyan működik a Shizuku, és hogyan integrálhatja az alkalmazásába, Itt van egy útmutatóm ehhez.

Shizuku és Fabricated Overlays

Mostanra valószínűleg láthatja, hogy ez hova tart. Egy olyan szolgáltatással, mint a Shizuku, hozzáférhetünk a Fabricated Overlays API-hoz shell-felhasználóként, az Android 11 vezeték nélküli ADB funkciójával pedig shell szintű hozzáférést kaphatunk, mindezt az eszközön. Mivel a root felhasználói korlátozás csak a Fabricated Overlays shell parancsban van jelen, és nem a tényleges API-ban, a parancsértelmező felhasználóként való futtatása elegendő a közvetlen használathoz.

Megvalósítás: Library and Sample App

Mi a helyzet a megvalósítás részleteivel? Nos, erre is biztosítalak.

Erre készülve elkészítettem mind a könyvtár és egy teljesen működőképes példaalkalmazás használja azt a könyvtárat.

Maga a könyvtár leginkább a kényelmi szempontokat szolgálja. Becsomagol néhány rejtett rendszer API-t, és néhány kényelmes módszert kínál a Shizuku engedélyek kezelésére. Rugalmas is, így megadhatja saját példányát az IOverlayManager API-ból, ha más módon is lekérheti.

A példaalkalmazás bemutatja, hogyan lehet megvalósítani a könyvtárat a Shizuku használatával. Ez is egy teljesen működőképes és hasznos alkalmazás. A főoldal megjeleníti a jelenleg regisztrált, ezen keresztül létrehozott lefedettségeket, célalkalmazások szerint csoportosítva. Innen is engedélyezheti, letilthatja és törölheti őket.

Az alján található „Fedvény hozzáadása” gomb megérintésével megjelenik az összes átfedhető alkalmazás listája. Keressen vagy görgessen, hogy megtalálja a kívántat, és koppintson rá. Ezután nyomja meg a „Hozzáadás” gombot a képernyő alján, hogy megtekinthesse az adott alkalmazásban felülbírálható erőforrások listáját. Válasszon ki egy erőforrást, állítsa be az értékét, és ismételje meg annyi értéknél, amennyit módosítani szeretne. Nyomja meg a „Mentés” gombot, írjon be egy nevet, erősítse meg, és visszakerül a főképernyőre, amelyen az új átfedés látható, és készen áll az engedélyezésre.

Íme néhány képernyőkép az alkalmazásból, köszönhetően Mishaal Rahmannak.

Mellékesen megjegyzem, van egy általános fedvénykezelő alkalmazásom is... Overlay Manager. Maga az előre lefordított alkalmazás csak a Patreonon érhető el, de a forráskódja szabadon elérhető mindenkinek, aki le akarja fordítani vagy módosítani szeretné.

Következtetés

Az új Fabricated Overlays API az Android 12-ben nagyon nagyszerű, főleg azért, mert nincs szüksége root alkalmazásra. Lehet, hogy nem olyan kifinomult, mint egy teljes körű RRO APK, de sokkal nagyobb rugalmasságot biztosít root hozzáférés nélkül.

Tekintse meg a Fabricate Overlay alkalmazást a GitHubon

Ha Android 12-t futtató eszközzel rendelkezik, és szeretné kipróbálni, nézze meg a fent hivatkozott GitHub-tárat. A Kiadások szakaszban lesz egy letölthető és használható APK. A könyvtárnak könnyen beilleszthetőnek kell lennie a saját alkalmazásába a JitPack használatával.

Természetesen nem szabad arra számítani, hogy ez a funkció sokáig megmarad. A Google nagyon nem szereti a harmadik féltől származó fedvényeket, így ezt szinte biztosan kijavítják, amikor az Android 13 megjelenik. Addig azonban élvezd, amíg tart!