Android 12 Fabricated Overlay API atjauno tēmas bez saknēm

Atcerieties, kā operētājsistēmā Android 8 ir viegli iestatīt ierīces motīvu? Atcerieties, cik jautri tas bija? Nu, tas ir atgriezies operētājsistēmā Android 12, ar pagriezienu.

Pilns stallis Android 12 izlaidums ir tepat aiz stūra, un Google ir pat ievietoja avota kodu savam AOSP repo. Tur ir daudz kas jauns operētājsistēmā Android 12, tostarp papildinājums resursu pārklājumiem, ko sauc par izgatavotiem pārklājumiem. Kas bija domāts kā API, lai palīdzētu sistēmai pārvaldīt izmantotās dinamiskās izmaiņas Materiāls Tu un monet var pārvērsties par kaut ko daudz lielāku — vismaz līdz Android 13 izlaišanai.

Fons

Mišāls Rahmans atklāja šo jauno API un pievērsa tam manu uzmanību. Viņš bija izmantojis čaulas komandu, lai pārbaudītu dažādas resursu vērtības operētājsistēmā Android 12 bez tā lai manuāli apkopotu pārklājuma APK failus, un viņš domāja, ka tas varētu radīt interesantu lietotnes ideju ierīcēm ar saknēm. Kad viņš tam pievērsa manu uzmanību, es daudz izmantoju Android 12 avota kodu un pamanīju kaut ko, kas, manuprāt, bija diezgan interesants. Es pārbaudīju to, ko atradu, un tagad mēs esam šeit — kā izrādās, Fabricated Overlay API var izmantot, lai atgrieztu tēmas bez saknēm. Pirms pārāk iedziļināšos šeit notiekošajā, es paskaidrošu, kas patiesībā ir izgatavotie pārklājumi.

Kas ir izgatavoti pārklājumi?

Izgatavotie pārklājumi ir jauna funkcija, kas ieviesta operētājsistēmā Android 12. Tie ir līdzīgi klasiskajiem izpildlaika resursu pārklājumiem (RRO), kas Android ir bijuši jau dažus gadus. Gan RRO, gan izgatavotie pārklājumi var ignorēt dažādus resursus dažādām lietojumprogrammām. Varat mainīt Būla vērtību no nepatiesa uz patiesu (vai otrādi), iestatīt statusa joslas lielumu un tā tālāk.

Tomēr izgatavotajiem pārklājumiem ir dažas ievērojamas atšķirības no RRO. Pirmkārt, jums nav jāģenerē pārklājuma APK un pēc tam tas jāinstalē. Tā vietā jūs vienkārši norādiet Android, kuras vērtības vēlaties mainīt, un tā parūpēsies par jūsu izmaiņu reģistrēšanu kā pārklājumu, kuru varat iespējot.

Tie ir arī nedaudz ierobežotāki nekā RRO. Pirms Android 11 RRO varēja ignorēt gandrīz jebkuru resursu: Būla vērtības, veselus skaitļus, izmērus, atribūtus, izkārtojumus un pat neapstrādātus datu failus. Operētājsistēmā Android 11 tika veiktas dažas izmaiņas RRO darbībā, padarot pārākas izkārtojumus vairs neiespējamus, lai gan tas kopumā padarīja RRO stabilākus.

No otras puses, izgatavotie pārklājumi var ignorēt tikai vērtības, kuras var attēlot kā veselus skaitļus. Tas ietver veselus skaitļus (duh), izmērus, Būla vērtības un krāsas. Jūs nevarat tos izmantot, lai ignorētu neapstrādātu datu resursus, izkārtojumus, virknes vai masīvus — vismaz ne viegli. Tas ir zināmā mērā patvaļīgs API ierobežojums: tas pieņem tikai veselu skaitļu vērtības un resursu kategorijas, kas noteiktas TypedValue klasē. TypedValue to dara atbalsts virknes un citus resursu veidus, bet tikai, lai atsauktos uz to resursiem, nevis glabātu to faktiskos datus.

Tomēr šie ierobežojumi nav pārāk lieli, lai sasniegtu paredzēto mērķi, kas paredzēts Fabricated Overlays: Materiāls jūs un naudas efekti. Izgatavotie pārklājumi ļauj sistēmai viegli ģenerēt un lietot krāsu un izmēru pārklājumus, neveicot atkārtotu palaišanu un negaidot, līdz tiek kompilēts APK.

Tagad parasti šī būtu vēl viena glīta API, ko izmantot cilvēkiem ar iesakņotām ierīcēm. Ja vien nav ražotāja radītu nepilnību (piemēram, to, ko Synergy izmanto Samsung ierīcēs), pārklājumus var instalēt tikai trešās puses ar root piekļuvi. Tomēr tā ir labākā daļa — Google aizmirsa aizlāpīt caurumu operētājsistēmā Android 12.

Izgatavoti pārklājumi bez saknes

Android 8 ieviesa jauno Overlay Manager Service (vai OMS) API, un cilvēki diezgan ātri atklāja, ka pārklājuma APK var instalēt kā parastās lietotnes un pēc tam iespējot, izmantojot ADB. Diemžēl Google to laboja operētājsistēmā Android 9, un kopš tā laika dinamiski var instalēt tikai pārklājumus, kas parakstīti ar to pašu atslēgu kā sistēmai.

Kā izrādās, Android 12 izgatavotajiem pārklājumiem ir nepilnība, kas atgādina to, kas ir operētājsistēmā Android 8: tiem nav nepieciešama root piekļuve vai paraksta līmeņa atļaujas. Viņiem vienkārši nepieciešams kaut kas, kas darbojas kā čaulas lietotājs (t.i., ADB), lai tos reģistrētu.

Ir diezgan skaidrs, ka Google ir paredzējis, ka izgatavotie pārklājumi būtu pieejami tikai saknes un sistēmas lietotājiem. To izveidei ir ADB komandu ieviešana, un tā nedarbosies, ja izpildošais lietotājs nav root. Nepilnība ir tāda, ka pārbaude ir tikai komandā, nevis faktiskajā API, kas nozīmē, ka mēs varam to izmantot, nedaudz strādājot.

ADB ierīcē

Jau ilgu laiku Android ir pieejama bezvadu ADB funkcija. Tas ļauj datoram (vai jebkam ar ADB bināro un tīkla piekļuvi) izveidot bezvadu savienojumu ar ierīci. Tas galvenokārt ir paredzēts Android ierīcēm, kurām nav lietotājam pieejamu USB savienojumu, piemēram viedpulksteņi un televizori. Turklāt, pirms operētājsistēmas Android 11, jums bija nepieciešams vadu ADB savienojums, lai aktivizētu bezvadu režīms.

Android 11 ir tas, kas oficiāli ieviesa bezvadu ADB tālruņos un planšetdatoros. Tas ir nedaudz sarežģītāks nekā klasiskais bezvadu ADB ar savienošanas pārī un autentifikācijas kodiem, taču lietotājs to var aktivizēt pilnībā ierīcē, kamēr ierīce ir savienota ar WiFi. Tas nozīmē, ka no ierīces ir iespējams izveidot savienojumu ar ierīci, izmantojot ADB, un viss, kas jums nepieciešams, ir WiFi savienojums.

Paaugstinātu API izmantošana lietotnē

Ir daudz iemeslu, kāpēc jūs varētu vēlēties savā lietotnē izmantot ierobežotas API. Parasti tas ir tāpēc, ka tie nodrošina kādu īpašu funkcionalitāti, kas jums nepieciešama. Kamēr nepieciešamajai API ir čaulas komandas ieviešana, to ir diezgan viegli izmantot no lietotnes. Viss, kas jums jādara, ir izveidot čaulas procesu kā root (vai ADB), palaist pareizo komandu un parsēt rezultātu, ja tāds ir.

Ko darīt, ja API nav čaulas ieviešanas vai čaulas ieviešanai trūkst kaut kas jums nepieciešams? Ja izmantojat saknes ierīci, varat izmantot kaut ko līdzīgu libRootJava. libRootJava ļauj mijiedarboties ar Android ietvara API tā, it kā jūsu lietotne darbotos kā saknes lietotājs. Tas ir gan ērtāk, gan daudz ātrāk nekā čaulas komandu palaišana, jo tas viss ir vienā valodā, un jums nav jāuztraucas par virkņu manuālu parsēšanu. Tam ir daži ierobežojumi, taču lielākoties tas darbojas lieliski.

LibRootJava API ir diezgan elastīga. Varat to pielāgot, lai tas darbotos kā čaulas lietotājs, nevis root. Par laimi, jums tas nav jādara, jo kāds to jau ir izdarījis, un to sauc Šizuku. Shizuku ir gandrīz kā Magisk Manager un libRootJava kombinācija.

Programma Shizuku Manager palīdz jums iestatīt procesu, kas darbojas kā čaulas lietotājs, kuram Shizuku var piekļūt. Shizuku API bibliotēku var ieviest lietotnēs, lai tās varētu piekļūt sistēmas API tā, it kā tās būtu čaulas lietotājs. Tas ir daudz centralizētāks process nekā libRootJava, jo Shizuku ir jāiestata tikai vienu reizi, lai to varētu izmantot katra lietotne, kas ievieš Shizuku API bibliotēku. Ja jūs interesē, kā darbojas Shizuku un kā jūs varat to integrēt savā lietotnē, Man šeit ir rokasgrāmata par to.

Shizuku un izgatavoti pārklājumi

Tagad jūs droši vien varat redzēt, kur tas notiek. Mēs varam izmantot tādu pakalpojumu kā Shizuku, lai piekļūtu Fabricated Overlays API kā čaulas lietotājs, un mēs varam izmantot Android 11 bezvadu ADB funkciju, lai iegūtu čaulas līmeņa piekļuvi ierīcē. Tā kā saknes lietotāja ierobežojums ir pieejams tikai čaulas komandā Fabricated Overlays, nevis faktiskajā API, pietiek ar palaišanu kā čaulas lietotājam, lai to izmantotu tieši.

Īstenošana: bibliotēka un lietotnes paraugs

Kā ar ieviešanas detaļām? Nu, es jums arī par to esmu nodrošinājis.

Gatavojoties tam, izgatavoju gan a bibliotēka un pilnībā funkcionāla parauga lietotne izmantojot šo bibliotēku.

Pati bibliotēka pārsvarā paredzēta ērtībām. Tas aptver dažas slēptās sistēmas API un sniedz jums dažas ērtas metodes Shizuku atļauju apstrādei. Tas ir arī elastīgs, tāpēc varat nodrošināt savu IOverlayManager API gadījumu, ja jums ir cits veids, kā to izgūt.

Lietotnes paraugs parāda, kā jūs varētu ieviest bibliotēku, izmantojot Shizuku. Tā ir arī pilnībā funkcionāla un noderīga lietotne. Galvenajā lapā tiek rādīti pašlaik reģistrētie izgatavotie pārklājumi, kas tika izveidoti, izmantojot to, sagrupēti pēc mērķa lietotnes. Varat arī tos iespējot, atspējot un dzēst no turienes.

Pieskaroties pogai “Pievienot pārklājumu”, kas atrodas apakšā, tiek atvērts visu pārklājamo programmu saraksts. Meklējiet vai ritiniet, lai atrastu vajadzīgo, un pieskarieties tai. Pēc tam varat nospiest pogu “Pievienot” ekrāna apakšā, lai skatītu to resursu sarakstu, kurus šajā lietotnē var ignorēt. Atlasiet resursu, iestatiet tā vērtību un atkārtojiet tik daudz vērtību, cik vēlaties mainīt. Nospiediet pogu "Saglabāt", ievadiet nosaukumu, apstipriniet, un jūs tiksit atgriezts galvenajā ekrānā, kurā tagad tiek rādīts jaunais pārklājums, kas ir gatavs iespējot.

Šeit ir daži ekrānuzņēmumi no lietotnes, pateicoties Mishaal Rahman.

Piezīme: man ir arī vispārēja pārklājuma pārvaldnieka lietotne ar nosaukumu... Pārklājuma pārvaldnieks. Pati iepriekš kompilētā lietotne ir pieejams tikai manā Patreon, bet pirmkods ir brīvi pieejams ikvienam, kas vēlas to apkopot vai modificēt.

Secinājums

Jaunā Fabricated Overlays API operētājsistēmā Android 12 ir diezgan lieliska, galvenokārt tāpēc, ka tai nav nepieciešama sakne. Tas var nebūt tik izsmalcināts kā pilna RRO APK, taču tas sniedz jums daudz lielāku elastību bez root piekļuves.

Apskatiet GitHub lietotni Fabricate Overlay

Ja jums ir ierīce, kurā darbojas operētājsistēma Android 12, un vēlaties to izmēģināt, skatiet iepriekš norādīto GitHub krātuvi. Sadaļā Izlaidumi būs APK, ko lejupielādēt un izmantot. Bibliotēku vajadzētu viegli iekļaut savā lietojumprogrammā, izmantojot JitPack.

Protams, jums nevajadzētu gaidīt, ka šī funkcija saglabāsies ilgu laiku. Google ļoti nepatīk trešo pušu pārklājumi, tāpēc tas gandrīz noteikti tiks novērsts, kad tiks izlaista Android 13. Tomēr tikmēr izbaudiet to, kamēr tas ilgst!