Kas mäletate, kuidas Android 8 muutis teie seadme teema muutmise lihtsaks? Mäletad, kui lõbus see oli? Noh, see on tagasi Android 12-s, pöördega.
Täielik tall Android 12 väljalase on kohe nurga taga ja Google on seda isegi teinud postitas lähtekoodi oma AOSP repole. Seal on palju uut Android 12-s, sealhulgas lisa ressursiülekatetele nimega Fabricated Overlays. Mis oli mõeldud API-na, mis aitaks süsteemil hallata kasutatud dünaamilisi muudatusi Materjal Sina ja raha võib muutuda millekski palju suuremaks – vähemalt kuni Android 13 väljalaskmiseni.
Taust
Mishaal Rahman avastas selle uue API ja juhtis sellele minu tähelepanu. Ta oli kasutanud selle jaoks shell-käsku, et testida Android 12-s erinevaid ressursiväärtusi, ilma et oleks seda vaja ülekatte APK-de käsitsi kompileerimiseks ja ta arvas, et see võib olla juurdunud seadmete jaoks huvitav rakenduseidee. Kui ta sellele minu tähelepanu juhtis, uurisin palju Android 12 lähtekoodi ja märkasin midagi, mis minu arvates oli päris huvitav. Testisin leidu ja nüüd oleme siin – nagu selgub, saab Fabricated Overlay API-t kasutada juurteta teemade taastamiseks. Enne kui ma siin toimuvaga liiga kaugele jõuan, selgitan, mis Fabricated Overlays tegelikult on.
Mis on valmistatud ülekatted?
Valmistatud ülekatted on Android 12-s kasutusele võetud uus funktsioon. Need on sarnased klassikaliste käitusajaressursside ülekatetega (RRO), mis Androidil on olnud juba paar aastat. Nii RRO-d kui ka valmistatud ülekatted võivad eri rakenduste jaoks alistada erinevad ressursid. Saate muuta tõeväärtuse valest tõeseks (või vastupidi), määrata olekuriba suuruse ja nii edasi.
Valmistatud ülekatetel on RRO-dest siiski märkimisväärseid erinevusi. Esiteks ei pea te ülekattega APK-d looma ja seejärel installima. Selle asemel ütlete Androidile, milliseid väärtusi soovite millise rakenduse jaoks muuta, ja see registreerib teie muudatused ülekattena, mille saate seejärel lubada.
Need on ka pisut piiratumad kui RRO-d. Enne Android 11 võisid RRO-d alistada peaaegu kõik ressursid: tõeväärtused, täisarvud, mõõtmed, atribuudid, paigutused ja isegi algandmefailid. Android 11 tegi mõned muudatused RRO-de töös, muutes ülekaaluka paigutuse enam võimatuks, kuigi see muutis RRO-d üldiselt stabiilsemaks.
Valmistatud ülekatted seevastu saavad alistada ainult väärtused, mida saab esitada täisarvudena. See hõlmab täisarve (duh), mõõtmeid, tõeväärtusi ja värve. Te ei saa neid kasutada töötlemata andmeressursside, paigutuste, stringide või massiivide alistamiseks – vähemalt mitte lihtsalt. See on API-s mõnevõrra meelevaldne piirang: see aktsepteerib ainult täisarvulisi väärtusi ja ressursikategooriaid, nagu on määratlenud klass TypedValue. TypedValue teeb seda toetus stringid ja muud ressursitüübid, kuid ainult nende ressursile viitamiseks, mitte tegelike andmete hoidmiseks.
Need piirangud ei ole aga liiga suured, kui arvestada Fabricated Overlays: materjal teie ja rahalised efektid. Valmistatud ülekatted muudavad süsteemi jaoks lihtsaks värvide ja mõõtmete ülekatete genereerimise ja rakendamise käigult, ilma et peaksite taaskäivitama või ootama, kuni APK kompileeritakse.
Tavaliselt oleks see lihtsalt veel üks kena API, mida juurdunud seadmetega inimesed saavad ära kasutada. Kui pole tootja loodud lünka (nagu see, mida Synergy kasutab Samsungi seadmetes), saavad ülekatteid installida ainult juurjuurdepääsuga kolmandad osapooled. See on aga parim osa – Google unustas Android 12-s augu paika panna.
Valmistatud ülekatted ilma juureta
Android 8 tutvustas uut Overlay Manager Service'i (või OMS) API-t ja inimesed avastasid üsna kiiresti, et ülekattega APK-sid saab installida tavaliste rakendustena ja seejärel ADB abil lubada. Kahjuks parandas Google selle Android 9-s ja sellest ajast alates saab dünaamiliselt installida ainult süsteemiga sama võtmega allkirjastatud ülekatteid.
Nagu selgub, on Android 12 valmistatud ülekatetel lünk, mis meenutab Android 8-s olevat: nad ei vaja juurjuurdepääsu ega allkirjataseme õigusi. Neil on lihtsalt vaja midagi, mis töötab shelli kasutajana (st ADB), et neid registreerida.
On üsna selge, et Google nägi ette, et valmistatud ülekatted oleksid juurdepääsetavad ainult juur- ja süsteemikasutajatele. Nende loomiseks on ADB-käsu rakendamine ja see ei käivitu, kui täitev kasutaja pole root. Lünk seisneb selles, et kontroll on ainult käsus, mitte tegelikus API-s, mis tähendab, et saame seda vähese tööga ära kasutada.
ADB seadmes
Juba pikka aega on Androidil olnud juhtmevaba ADB funktsioon. See võimaldab arvutil (või mis tahes muul, millel on ADB-binaar- ja võrgujuurdepääs) seadmega juhtmevabalt ühenduse luua. See on enamasti mõeldud Android-seadmetele, millel pole kasutajale juurdepääsetavaid USB-ühendusi, näiteks nutikellad ja telerid. Lisaks oli teil enne Android 11 vaja juhtmega ADB-ühendust, et aktiveerida traadita režiim.
Android 11 tõi ametlikult juhtmevaba ADB telefonidesse ja tahvelarvutitesse. See on veidi keerulisem kui klassikaline traadita ADB koos sidumis- ja autentimiskoodidega, kuid kasutaja saab selle täielikult seadmes aktiveerida. seni, kuni seade on WiFi-ga ühendatud. See tähendab, et seadmega on võimalik ADB kaudu ühendus luua ja kõik, mida vajate, on WiFi ühendus.
Kõrgendatud API-de kasutamine rakenduses
On palju põhjuseid, miks võiksite oma rakenduses kasutada piiratud API-sid. Tavaliselt on põhjuseks see, et need pakuvad teile vajalikke erifunktsioone. Kuni vajalikul API-l on shellikäsu rakendamine, on seda rakendusest üsna lihtne kasutada. Kõik, mida pead tegema, on luua shell-protsess administraatorina (või ADB), käivitada õige käsk ja analüüsida tulemust, kui see on olemas.
Mis saab siis, kui API-l pole shell-rakendust või shell-rakendusel puudub midagi, mida vajate? Kui kasutate juurdunud seadet, saate kasutada midagi sarnast libRootJava. libRootJava võimaldab teil Androidi raamistiku API-dega suhelda nii, nagu töötaks teie rakendus juurkasutajana. See on nii mugavam kui ka palju kiirem kui shellikäskude käivitamine, kuna see kõik on samas keeles ja te ei pea muretsema stringide käsitsi sõelumise pärast. Sellel on mõned piirangud, kuid enamasti töötab see suurepäraselt.
LibRootJava API on üsna paindlik. Saate selle kohandada nii, et see töötaks juurkasutaja asemel shell-kasutajana. Õnneks ei pea te seda tegema, sest keegi on selle juba teinud ja seda nimetatakse Shizuku. Shizuku on peaaegu nagu Magisk Manageri ja libRootJava kombinatsioon.
Rakendus Shizuku Manager juhendab teid protsessi seadistamisel, mis töötab shelli kasutajana, millele Shizuku pääseb juurde. Shizuku API teeki saab juurutada rakendustesse, et võimaldada neil süsteemi API-dele juurde pääseda nii, nagu oleks nad kesta kasutajad. See on palju tsentraliseeritud protsess kui libRootJava, kuna Shizuku tuleb seadistada vaid üks kord, enne kui iga Shizuku API teeki rakendav rakendus saab seda kasutada. Kui olete huvitatud sellest, kuidas Shizuku töötab ja kuidas saate selle oma rakendusse integreerida, Mul on siin selle jaoks juhend.
Shizuku ja valmistatud ülekatted
Nüüdseks on ilmselt näha, kuhu see läheb. Saame kasutada sellist teenust nagu Shizuku, et pääseda juurde Fabricated Overlays API-le kui kestakasutaja, ja me saame kasutada Android 11 juhtmevaba ADB funktsiooni, et saada kesta tasemel juurdepääs, kõike seda seadmes. Kuna juurkasutaja piirang on olemas ainult fabricated Overlays shell-käskluses, mitte tegelikus API-s, piisab selle otse kasutamiseks kesta kasutajana töötamisest.
Rakendamine: raamatukogu ja näidisrakendus
Aga rakendamise üksikasjad? Noh, ma olen teile ka selle eest kaitstud.
Selleks valmistudes tegin nii a raamatukogu ja täielikult toimiv näidisrakendus kasutades seda raamatukogu.
Raamatukogu ise on enamasti mugavuse huvides. See hõlmab mõningaid peidetud süsteemi API-sid ja annab teile mõned mugavad meetodid Shizuku lubade haldamiseks. See on ka paindlik, nii et saate pakkuda oma IOverlayManageri API eksemplari, kui teil on selle hankimiseks mõni muu viis.
Näidisrakendus näitab, kuidas saaksite Shizuku abil raamatukogu juurutada. See on ka täielikult funktsionaalne ja kasulik rakendus. Avalehel kuvatakse sihtrakenduse järgi rühmitatud hetkel registreeritud valmistatud ülekatted, mis selle kaudu loodi. Saate neid ka sealt lubada, keelata ja kustutada.
Kui puudutate allosas nuppu "Lisa ülekate", avaneb kõigi ülekattega rakenduste loend. Otsige või kerige vajaliku leidmiseks ja puudutage seda. Seejärel saate vajutada ekraani allosas nuppu "Lisa", et vaadata ressursside loendit, mida selles rakenduses saab tühistada. Valige ressurss, määrake selle väärtus ja korrake nii palju väärtusi, kui soovite muuta. Vajutage nuppu "Salvesta", sisestage nimi, kinnitage ja teid suunatakse tagasi põhiekraanile, kus kuvatakse nüüd uus ülekate, mis on lubamiseks valmis.
Siin on mõned rakenduse ekraanipildid tänu Mishaal Rahmanile.
Vahemärkusena on mul ka üldine ülekattehalduri rakendus nimega... Ülekattehaldur. Eelkompileeritud rakendus ise on saadaval ainult minu Patreonis, kuid lähtekood on vabalt saadaval kõigile, kes soovivad seda kompileerida või muuta.
Järeldus
Android 12 uus Fabricated Overlays API on päris suurepärane, peamiselt seetõttu, et see ei vaja juurfaili. See ei pruugi olla nii keerukas kui täississelülitatud RRO APK, kuid see annab teile palju rohkem paindlikkust ilma juurjuurdepääsuta.
Vaadake GitHubi rakendust Fabricate Overlay
Kui teil on seade, milles töötab Android 12 ja soovite seda proovida, vaadake ülaltoodud GitHubi hoidlat. Jaotises Versioonid on allalaadimiseks ja kasutamiseks APK. Teeki peaks olema JitPacki abil lihtne oma rakendusse lisada.
Muidugi ei tohiks te eeldada, et see funktsioon kaua püsib. Google'ile tõesti ei meeldi kolmanda osapoole ülekatted, nii et see parandatakse peaaegu kindlasti, kui Android 13 välja tuleb. Seniks aga nautige seda kuni jätkub!