„Android 12“ sukurtos perdangos API sugrąžina temas be šaknų

Prisiminkite, kaip naudojant „Android 8“ buvo lengva nustatyti įrenginio temą? Prisimeni, kaip tai buvo smagu? Na, tai vėl 12 versijos „Android“ su pasukimu.

Pilna arklidė Android 12 leidimas jau visai šalia, o „Google“ netgi turi paskelbė šaltinio kodą į savo AOSP atpirkimą. Ten yra daug kas naujo „Android 12“., įskaitant priedą prie išteklių perdangų, vadinamų pagamintomis perdangomis. Kas buvo skirta kaip API, padedanti sistemai valdyti naudojamus dinaminius pakeitimus Medžiaga tu ir monetos gali virsti kažkuo daug didesniu – bent jau iki „Android 13“ išleidimo.

Fonas

Mishaalas Rahmanas atrado šią naują API ir atkreipė į ją mano dėmesį. Jis naudojo jai apvalkalo komandą, kad išbandytų skirtingas „Android 12“ išteklių reikšmes rankiniu būdu sudaryti persidengiančius APK, ir jis manė, kad tai gali būti įdomi programos idėja įsišaknintiems įrenginiams. Kai jis atkreipė mano dėmesį į tai, daug ieškojau „Android 12“ šaltinio kodo ir pastebėjau tai, kas, mano manymu, buvo gana įdomu. Išbandžiau tai, ką radau, ir dabar štai – kaip paaiškėjo, „Fabricated Overlay“ API gali būti naudojama norint sugrąžinti be šaknų esančias temas. Prieš pernelyg įsigilindamas į tai, kas čia vyksta, paaiškinsiu, kas iš tikrųjų yra pagamintos perdangos.

Kas yra pagamintos perdangos?

Sukurtos perdangos yra nauja funkcija, pristatyta „Android 12“. Jie panašūs į klasikines vykdymo resursų perdangas (RRO), kurias „Android“ turi jau keletą metų. Tiek RRO, tiek pagamintos perdangos gali nepaisyti skirtingų išteklių skirtingoms programoms. Galite pakeisti loginę reikšmę iš klaidinga į teisingą (arba atvirkščiai), nustatyti, kokio dydžio būsenos juosta turi būti ir pan.

Tačiau pagamintos perdangos turi keletą reikšmingų skirtumų nuo RRO. Pirma, jums nereikia generuoti perdangos APK ir tada jo įdiegti. Vietoj to, jūs tiesiog nurodykite „Android“, kurias reikšmes norite pakeisti kuriai programai, ir ji pasirūpins, kad pakeitimai būtų užregistruoti kaip perdanga, kurią galėsite įjungti.

Jie taip pat yra šiek tiek labiau riboti nei RRO. Prieš naudojant „Android 11“, RRO galėjo nepaisyti beveik bet kokių išteklių: loginių verčių, sveikųjų skaičių, matmenų, atributų, išdėstymo ir net neapdorotų duomenų failų. „Android 11“ padarė keletą RRO veikimo pakeitimų, todėl nebeįmanoma pakeisti išdėstymo, nors dėl to RRO apskritai tapo stabilesni.

Kita vertus, pagamintos perdangos gali nepaisyti tik reikšmių, kurios gali būti pateikiamos kaip sveikieji skaičiai. Tai apima sveikuosius skaičius (duh), matmenis, logines vertes ir spalvas. Negalite jų naudoti neapdorotų duomenų išteklių, išdėstymo, eilučių ar masyvų nepaisymui – bent jau ne taip lengvai. Tai yra šiek tiek savavališkas API apribojimas: jis priima tik sveikųjų skaičių reikšmes ir išteklių kategorijas, apibrėžtas TypedValue klasėje. TypedValue tai daro parama eilutes ir kitus išteklių tipus, bet tik nuorodas į jų išteklius, o ne saugoti tikrus duomenis.

Tačiau šie apribojimai nėra per didelis dalykas, atsižvelgiant į numatytą pagamintų perdangų paskirtį: medžiaga jūs ir piniginiai efektai. Sukurtos perdangos leidžia sistemai lengvai generuoti ir pritaikyti spalvų ir matmenų perdangas, nereikia iš naujo paleisti ar nelaukti, kol bus sukompiliuotas APK.

Dabar paprastai tai būtų dar viena tvarkinga API, kuria galėtų pasinaudoti žmonės, turintys įsišaknijusius įrenginius. Jei nėra gamintojo sukurtų spragų (pvz., „Synergy“ naudojasi „Samsung“ įrenginiuose), perdangas gali įdiegti tik trečiosios šalys, turinčios pagrindinę prieigą. Tačiau tai geriausia dalis – „Google“ pamiršo užtaisyti „Android 12“ spragą.

Pagamintos perdangos be šaknų

„Android 8“ pristatė naują „Overlay Manager Service“ (arba OMS) API, ir žmonės gana greitai atrado, kad perdangos APK gali būti įdiegtos kaip įprastas programas ir įgalinti naudojant ADB. Deja, „Google“ tai pataisė „Android 9“ versijoje ir nuo to laiko dinamiškai galima įdiegti tik perdangas, pasirašytas tuo pačiu raktu kaip ir sistema.

Kaip paaiškėjo, „Android 12“ pagamintose perdangose ​​yra spraga, primenanti „Android 8“ esančią: joms nereikia root prieigos ar parašo lygio leidimų. Norint juos užregistruoti, jiems tereikia kažko veikiančio kaip apvalkalo naudotojas (ty ADB).

Gana aišku, kad „Google“ numatė, kad pagamintos perdangos būtų prieinamos tik šakniniams ir sistemos vartotojams. Jiems sukurti yra įdiegta ADB komanda ir ji nebus paleista, jei vykdantis vartotojas nėra root. Spraga yra ta, kad patikrinimas yra tik komandoje, o ne tikrojoje API, o tai reiškia, kad galime ja pasinaudoti šiek tiek padirbėję.

ADB įrenginyje

Jau seniai „Android“ turi belaidę ADB funkciją. Tai leidžia kompiuteriui (arba bet kam, turinčiam dvejetainę ADB ir tinklo prieigą) prisijungti prie įrenginio belaidžiu būdu. Jis daugiausia skirtas „Android“ įrenginiams, kuriuose nėra vartotojo pasiekiamų USB jungčių, pvz išmanieji laikrodžiai ir televizoriai. Be to, prieš naudojant „Android 11“, jums reikėjo laidinio ADB ryšio, kad suaktyvintumėte bevielis režimas.

„Android 11“ oficialiai pristatė belaidį ADB telefonams ir planšetiniams kompiuteriams. Tai šiek tiek sudėtingesnis nei klasikinis belaidis ADB su susiejimo ir autentifikavimo kodais, tačiau jį gali suaktyvinti vartotojas visiškai įrenginyje, tol, kol įrenginys prijungtas prie WiFi. Tai reiškia, kad iš įrenginio galima prisijungti prie įrenginio per ADB, o viskas, ko jums reikia, yra „WiFi“. ryšį.

Padidintos API naudojimas programoje

Yra daug priežasčių, kodėl galbūt norėsite programoje naudoti apribotas API. Paprastai taip yra todėl, kad jie suteikia tam tikrų jums reikalingų funkcijų. Tol, kol jums reikalinga API turi apvalkalo komandą, ją gana lengva naudoti programoje. Viskas, ką jums reikia padaryti, tai sukurti apvalkalo procesą kaip root (arba ADB), paleisti tinkamą komandą ir išanalizuoti rezultatą, jei toks yra.

Ką daryti, jei API nėra apvalkalo diegimo arba apvalkalo diegimui trūksta kažko, ko jums reikia? Jei naudojate įsišaknijusį įrenginį, galite naudoti kažką panašaus libRootJava. „libRootJava“ leidžia sąveikauti su „Android“ sistemos API taip, lyg jūsų programa veiktų kaip pagrindinis vartotojas. Tai ir patogiau, ir daug greičiau nei vykdyti apvalkalo komandas, nes visa tai ta pačia kalba ir jums nereikia jaudintis dėl eilučių analizavimo rankiniu būdu. Jis turi tam tikrų apribojimų, tačiau dažniausiai jis veikia puikiai.

„LibRootJava“ API yra gana lanksti. Galite pritaikyti jį veikti kaip apvalkalo vartotoją, o ne root. Laimei, jums to nereikia, nes kažkas jau tai padarė, ir tai vadinama Šizuku. „Shizuku“ yra beveik kaip „Magisk Manager“ ir „libRootJava“ derinys.

„Shizuku Manager“ programa padės nustatyti procesą, kuris veikia kaip apvalkalo vartotojas, kurį gali pasiekti „Shizuku“. „Shizuku“ API biblioteka gali būti įdiegta į programas, kad jos galėtų pasiekti sistemos API taip, lyg jos būtų apvalkalo naudotojas. Tai daug labiau centralizuotas procesas nei „libRootJava“, nes „Shizuku“ reikia nustatyti tik vieną kartą, kad kiekviena „Shizuku“ API biblioteką įgyvendinanti programa galėtų ją naudoti. Jei domitės, kaip veikia Shizuku ir kaip galite tai integruoti į savo programą, Čia turiu tam vadovą.

Shizuku ir pagamintos perdangos

Iki šiol tikriausiai matote, kur tai vyksta. Galime naudoti tokią paslaugą kaip „Shizuku“, kad pasiektume „Fabricated Overlays“ API kaip apvalkalo vartotojas, ir galime naudoti „Android 11“ belaidę ADB funkciją, kad gautume prieigą prie apvalkalo lygio – visa tai įrenginyje. Kadangi šakninio vartotojo apribojimas yra tik apvalkalo komandoje Fabricated Overlays, o ne faktinėje API, pakanka paleisti kaip apvalkalo vartotoją, kad jį būtų galima naudoti tiesiogiai.

Diegimas: biblioteka ir programos pavyzdys

O kaip su įgyvendinimo detalėmis? Na, aš tau taip pat už tai apsaugojau.

Tam ruošdamasis padariau tiek a biblioteka ir visiškai veikianti pavyzdinė programėlė naudojantis ta biblioteka.

Pati biblioteka dažniausiai skirta patogumui. Tai apima kai kurias paslėptas sistemos API ir pateikia keletą patogių Shizuku leidimų tvarkymo būdų. Tai taip pat lanksti, todėl galite pateikti savo „IOverlayManager“ API egzempliorių, jei turite kitą būdą jį gauti.

Programos pavyzdyje parodyta, kaip galite įdiegti biblioteką naudodami „Shizuku“. Tai taip pat visiškai funkcionali ir naudinga programa. Pagrindiniame puslapyje rodomos šiuo metu registruotos pagamintos perdangos, sukurtos naudojant jį, sugrupuotos pagal tikslinę programą. Taip pat galite juos įjungti, išjungti ir ištrinti iš ten.

Paspaudę apačioje esantį mygtuką „Pridėti perdangą“, pateksite į visų perdengiamų programų sąrašą. Ieškokite arba slinkite, kad rastumėte reikiamą, ir bakstelėkite jį. Tada galite paspausti mygtuką „Pridėti“ ekrano apačioje, kad peržiūrėtumėte išteklių, kuriuos galima nepaisyti toje programoje, sąrašą. Pasirinkite išteklius, nustatykite jo vertę ir pakartokite tiek verčių, kiek norite pakeisti. Paspauskite mygtuką „Išsaugoti“, įveskite pavadinimą, patvirtinkite ir būsite grąžinti į pagrindinį ekraną, kuriame dabar rodoma nauja perdanga, paruošta įjungti.

Štai keletas ekrano kopijų iš programos, dėka Mishaalo Rahmano.

Pastaba: aš taip pat turiu bendrą perdangos tvarkyklės programą, vadinamą... Perdangos tvarkyklė. Pati iš anksto sudaryta programa yra galima tik mano Patreon, bet šaltinio kodas yra laisvai prieinamas visiems, kurie nori jį kompiliuoti ar modifikuoti.

Išvada

Naujoji „Fabricated Overlays“ API „Android 12“ yra gana puiki, daugiausia todėl, kad jai nereikia root. Jis gali būti ne toks sudėtingas kaip visiškai įjungtas RRO APK, tačiau suteikia daug daugiau lankstumo be root prieigos.

Peržiūrėkite „GitHub“ programą „Fabricate Overlay“.

Jei turite įrenginį, kuriame veikia „Android 12“, ir norite tai išbandyti, peržiūrėkite aukščiau pateiktą „GitHub“ saugyklą. Skiltyje „Leidimai“ bus APK, kurį galėsite atsisiųsti ir naudoti. Biblioteką turėtų būti lengva įtraukti į savo programą naudojant JitPack.

Žinoma, neturėtumėte tikėtis, kad ši funkcija išliks ilgai. „Google“ tikrai nemėgsta trečiųjų šalių perdangų, todėl tai beveik neabejotinai bus ištaisyta, kai bus išleista „Android 13“. Tačiau kol kas mėgaukitės, kol tęsis!