Android 12-ის Fabricated Overlay API აბრუნებს უძირო თემებს

გახსოვთ, როგორ გაუადვილა Android 8-მა თქვენი მოწყობილობის თემატიკა? გახსოვს, რა სახალისო იყო? კარგად, ის დაბრუნდა Android 12-ში, ირონიით.

სრული სტაბილური Android 12 გამოშვება არის ზუსტად გარშემო, და Google აქვს კი გამოაქვეყნა საწყისი კოდი მის AOSP რეპოს. არსებობს ა ბევრი, რაც ახალია Android 12-ში, მათ შორის დანამატი რესურსების გადაფარვისთვის, სახელწოდებით Fabricated Overlays. რა იგულისხმებოდა, როგორც API, რომელიც ეხმარება სისტემას მართოს გამოყენებული დინამიური ცვლილებები მასალა შენ და მონე შეიძლება გადაიქცეს რაღაც ბევრად უფრო დიდად - მინიმუმ Android 13-ის გამოშვებამდე.

ფონი

მიშაალ რაჰმანმა აღმოაჩინა ეს ახალი API და მომიტანა იგი ჩემს ყურადღებას. ის იყენებდა ამისთვის shell ბრძანებას Android 12-ში სხვადასხვა რესურსის მნიშვნელობების შესამოწმებლად გადაფარვის APK-ების ხელით შედგენას და მას ეგონა, რომ ეს შეიძლება გახდეს საინტერესო აპლიკაციის იდეა ძირეული მოწყობილობებისთვის. როდესაც მან ეს ჩემს ყურადღებას მიიპყრო, მე ბევრი ავიღე Android 12-ის წყაროს კოდი და შევამჩნიე რაღაც, რაც ვფიქრობდი საკმაოდ საინტერესო იყო. მე გამოვცადე ის, რაც ვიპოვე და ახლა აქ ვართ -- როგორც ირკვევა, Fabricated Overlay API შეიძლება გამოყენებულ იქნას უძირო თემების დასაბრუნებლად. სანამ ძალიან შორს გავივლი იმას, რაც აქ ხდება, აგიხსნით, რა არის რეალურად Fabricated Overlays.

რა არის ფაბრიკირებული გადახურვები?

Fabricated Overlays არის ახალი ფუნქცია, რომელიც დაინერგა Android 12-ში. ისინი მსგავსია კლასიკური Runtime Resource Overlays (RROs), რომელიც Android-ს რამდენიმე წელია აქვს. როგორც RRO-ს, ასევე Fabricated Overlays-ს შეუძლია გადალახოს სხვადასხვა რესურსი სხვადასხვა აპლიკაციისთვის. თქვენ შეგიძლიათ შეცვალოთ ლოგიკური მნიშვნელობა false-დან true-ზე (ან პირიქით), დააყენოთ რამდენად დიდი გსურთ იყოს სტატუსის ზოლი და ა.შ.

თუმცა, ფაბრიკაციულ გადაფარვებს აქვთ მნიშვნელოვანი განსხვავებები RRO-სგან. ერთი, თქვენ არ გჭირდებათ გადაფარვის APK-ის გენერირება და შემდეგ მისი ინსტალაცია. ამის ნაცვლად, თქვენ უბრალოდ უთხარით Android-ს, რომელი მნიშვნელობების შეცვლა გსურთ რომელი აპლიკაციისთვის და ის ზრუნავს თქვენი ცვლილებების დარეგისტრირებაზე, როგორც გადაფარვის სახით, რომლის ჩართვაც შეგიძლიათ.

ისინი ასევე ცოტა უფრო შეზღუდულია ვიდრე RRO-ები. Android 11-მდე, RRO-ებს შეეძლოთ თითქმის ნებისმიერი რესურსის გადალახვა: ლოგიკები, მთელი რიცხვები, ზომები, ატრიბუტები, განლაგება და თუნდაც ნედლი მონაცემთა ფაილები. Android 11-მა შეიტანა გარკვეული ცვლილებები, თუ როგორ მუშაობს RRO-ები, რითაც უმთავრესი განლაგება აღარ იყო შესაძლებელი, თუმცა მან მთლიანობაში RRO-ები უფრო სტაბილური გახადა.

მეორეს მხრივ, შეთხზულ გადაფარვებს შეუძლიათ მხოლოდ მნიშვნელობების გადაფარვა, რომლებიც შეიძლება იყოს წარმოდგენილი მთელი რიცხვებით. ეს მოიცავს მთელ რიცხვებს (duh), ზომებს, ლოგინებს და ფერებს. თქვენ არ შეგიძლიათ მათი გამოყენება ნედლეული მონაცემთა რესურსების, განლაგების, სტრიქონების ან მასივების გადასალახად - ყოველ შემთხვევაში, არც ისე მარტივად. ეს გარკვეულწილად თვითნებური შეზღუდვაა API-ში: ის იღებს მხოლოდ მთელ რიცხვებს და რესურსების კატეგორიებს, როგორც ეს განსაზღვრულია TypedValue კლასის მიერ. TypedValue აკეთებს მხარდაჭერა სტრიქონები და რესურსების სხვა ტიპები, მაგრამ მხოლოდ მათი რესურსის მითითებისთვის და არა მათი რეალური მონაცემების შესანახად.

თუმცა, ეს შეზღუდვები არ არის ძალიან დიდი გარიგება Fabricated Overlays: Material You და ფულის ეფექტების დანიშნულებისამებრ. Fabricated Overlays სისტემას უადვილებს ფერთა და განზომილების გადაფარვების გენერირებას და გამოყენებას, გადატვირთვის ან APK-ის შედგენის მოლოდინის გარეშე.

ახლა, ჩვეულებრივ, ეს იქნება კიდევ ერთი სუფთა API იმ ადამიანებისთვის, რომლებსაც აქვთ root მოწყობილობები, რომ ისარგებლონ. თუ არ არის მწარმოებლის მიერ შექმნილი ხარვეზი (როგორც Synergy იყენებს Samsung-ის მოწყობილობებზე), გადაფარვები შეიძლება დაინსტალირდეს მხოლოდ მესამე მხარის მიერ root წვდომით. თუმცა, ეს საუკეთესო ნაწილია -- Google-მა დაავიწყდა ხვრელის დაყენება Android 12-ში.

შეკერილი გადაფარვები ფესვის გარეშე

Android 8-მა შემოიტანა ახალი Overlay Manager Service (ან OMS) API და ხალხმა საკმაოდ სწრაფად აღმოაჩინეს, რომ გადაფარვის APK შეიძლება დაინსტალირდეს ჩვეულებრივ აპებად და შემდეგ ჩართოთ ADB-ის გამოყენებით. სამწუხაროდ, Google-მა შეასწორა ეს Android 9-ში და მას შემდეგ დინამიურად შეიძლება დაინსტალირდეს მხოლოდ სისტემის იმავე გასაღებით ხელმოწერილი გადაფარვები.

როგორც ირკვევა, Android 12-ის Fabricated Overlay-ებს აქვთ ხვრელი, რომელიც მოგვაგონებს Android 8-ში არსებულს: მათ არ სჭირდებათ root წვდომა ან ხელმოწერის დონის ნებართვები. მათ უბრალოდ სჭირდებათ რაღაც გაშვებული როგორც shell მომხმარებელი (ანუ ADB), რომ დაარეგისტრირონ ისინი.

საკმაოდ ნათელია, რომ Google-მა მიზნად ისახავდა Fabricated Overlays-ს, რათა ხელმისაწვდომი ყოფილიყო მხოლოდ root და სისტემის მომხმარებლებისთვის. არსებობს ADB ბრძანების იმპლემენტაცია მათი შესაქმნელად და ის არ იმუშავებს, თუ შემსრულებელი მომხმარებელი არ არის root. ხარვეზი არის ის, რომ შემოწმება მხოლოდ ბრძანებაშია და არა რეალურ API-ში, რაც ნიშნავს, რომ ჩვენ შეგვიძლია ვისარგებლოთ ამით ცოტა შრომით.

ADB მოწყობილობაზე

უკვე დიდი ხანია, Android-ს აქვს უკაბელო ADB ფუნქცია. ეს საშუალებას აძლევს კომპიუტერს (ან ნებისმიერ რამეს, რომელსაც აქვს ADB ორობითი და ქსელის წვდომა) მოწყობილობას უსადენოდ დაუკავშირდეს. ის ძირითადად განკუთვნილია Android მოწყობილობებისთვის, რომლებსაც არ აქვთ მომხმარებლისთვის ხელმისაწვდომი USB კავშირები, მაგ ჭკვიანი საათები და ტელევიზორები. გარდა ამისა, Android 11-მდე დაგჭირდათ სადენიანი ADB კავშირი გასააქტიურებლად უკაბელო რეჟიმი.

Android 11 არის ის, რაც ოფიციალურად მოუტანა უკაბელო ADB ტელეფონებსა და ტაბლეტებს. ეს ცოტა უფრო რთულია, ვიდრე კლასიკური უკაბელო ADB, დაწყვილებისა და ავთენტიფიკაციის კოდებით, მაგრამ ის შეიძლება გააქტიურდეს მომხმარებლის მიერ მთლიანად მოწყობილობაზე, სანამ მოწყობილობა დაკავშირებულია WiFi-თან. ეს ნიშნავს, რომ შესაძლებელია თქვენს მოწყობილობასთან დაკავშირება თქვენი მოწყობილობიდან ADB-ის მეშვეობით და ყველაფერი რაც თქვენ გჭირდებათ არის WiFi კავშირი.

ამაღლებული API-ების გამოყენება აპში

არსებობს უამრავი მიზეზი, რის გამოც შეიძლება გინდოდეთ გამოიყენოთ შეზღუდული API-ები თქვენს აპლიკაციაში. ჩვეულებრივ, ეს იმიტომ ხდება, რომ ისინი უზრუნველყოფენ თქვენთვის საჭირო სპეციალურ ფუნქციონირებას. სანამ თქვენთვის საჭირო API-ს აქვს shell ბრძანების განხორციელება, მისი გამოყენება საკმაოდ მარტივია აპიდან. ყველაფერი რაც თქვენ გჭირდებათ არის შექმნათ shell პროცესი, როგორც root (ან ADB), გაუშვათ სწორი ბრძანება და გააანალიზოთ შედეგი, ასეთის არსებობის შემთხვევაში.

რა მოხდება, თუ API-ს არ აქვს ჭურვის დანერგვა, ან ჭურვის განხორციელებას აკლია ის, რაც გჭირდებათ? თუ თქვენ დაყენებულ მოწყობილობაზე ხართ, შეგიძლიათ გამოიყენოთ მსგავსი რამ libRootJava. libRootJava გაძლევთ საშუალებას დაუკავშირდეთ Android Framework API-ებს, თითქოს თქვენი აპლიკაცია მუშაობს როგორც root მომხმარებელი. ეს არის უფრო მოსახერხებელი და ბევრად უფრო სწრაფი, ვიდრე ჭურვის ბრძანებების გაშვება, რადგან ეს ყველაფერი ერთსა და იმავე ენაზეა და თქვენ არ უნდა ინერვიულოთ სტრიქონების ხელით გარჩევაზე. მას აქვს გარკვეული შეზღუდვები, მაგრამ უმეტესწილად ის მშვენივრად მუშაობს.

libRootJava API საკმაოდ მოქნილია. თქვენ შეგეძლოთ მისი ადაპტირება, რათა გაუშვათ როგორც shell მომხმარებელი, ნაცვლად root. საბედნიეროდ, თქვენ არ გჭირდებათ, რადგან ვიღაცამ უკვე გააკეთა ეს და მას ე.წ შიზუკუ. Shizuku თითქმის ჰგავს Magisk Manager-ისა და libRootJava-ს კომბინაციას.

Shizuku Manager აპი დაგეხმარებათ დაყენების პროცესი, რომელიც მუშაობს როგორც shell მომხმარებელი, რომელზეც Shizuku-ს შეუძლია წვდომა. Shizuku API ბიბლიოთეკა შეიძლება განხორციელდეს აპებში, რათა მათ მიეცეთ წვდომა სისტემის API-ებზე, თითქოს ისინი იყვნენ ჭურვის მომხმარებელი. ეს ბევრად უფრო ცენტრალიზებული პროცესია, ვიდრე libRootJava, რადგან Shizuku-ს მხოლოდ ერთხელ სჭირდება დაყენება, სანამ Shizuku API ბიბლიოთეკის ყველა აპლიკაცია გამოიყენებს მას. თუ გაინტერესებთ როგორ მუშაობს Shizuku და როგორ შეგიძლიათ მისი ინტეგრირება თქვენს აპლიკაციაში, მე მაქვს ამისთვის აქ სახელმძღვანელო.

შიზუკუ და შეკერილი გადახურვები

ახლა თქვენ ალბათ ხედავთ, სად მიდის ეს. ჩვენ შეგვიძლია გამოვიყენოთ სერვისი, როგორიცაა Shizuku Fabricated Overlays API-ზე წვდომისთვის, როგორც shell მომხმარებლის, და შეგვიძლია გამოვიყენოთ Android 11-ის უკაბელო ADB ფუნქცია, რათა მივიღოთ ჭურვის დონის წვდომა, ყველაფერი მოწყობილობაზე. ვინაიდან root მომხმარებლის შეზღუდვა მხოლოდ Fabricated Overlays shell-ის ბრძანებაშია და არა ფაქტობრივ API-ში, ჭურვის მომხმარებლის სახით გაშვება საკმარისია მის პირდაპირ გამოსაყენებლად.

განხორციელება: ბიბლიოთეკა და ნიმუშის აპლიკაცია

რაც შეეხება განხორციელების დეტალებს? კარგი, მე შენც დაგიფარე ამისთვის.

ამისთვის მომზადებისას გავაკეთე ორივე ა ბიბლიოთეკა და სრულად ფუნქციონალური ნიმუშის აპლიკაცია ამ ბიბლიოთეკის გამოყენებით.

თავად ბიბლიოთეკა ძირითადად მოხერხებულობისთვისაა. ის ახვევს ზოგიერთი ფარული სისტემის API-ს და გაძლევთ რამდენიმე მოსახერხებელ მეთოდს Shizuku-ს ნებართვების დასამუშავებლად. ის ასევე მოქნილია, ასე რომ თქვენ შეგიძლიათ მოგვაწოდოთ IOverlayManager API-ის საკუთარი ეგზემპლარი, თუ გაქვთ მისი აღდგენის სხვა გზა.

ნიმუშის აპლიკაცია აჩვენებს, თუ როგორ შეგიძლიათ ბიბლიოთეკის დანერგვა Shizuku-ს გამოყენებით. ის ასევე სრულად ფუნქციონალური და სასარგებლო აპლიკაციაა. მთავარ გვერდზე ნაჩვენებია ამჟამად რეგისტრირებული შეთხზული გადაფარვები, რომლებიც შეიქმნა მის მეშვეობით, დაჯგუფებული სამიზნე აპის მიხედვით. თქვენ შეგიძლიათ ჩართოთ, გამორთოთ და წაშალოთ ისინი იქიდანაც.

ბოლოში ღილაკზე „დაამატე გადაფარვის“ დაჭერით მიგიყვანთ ყველა გადაფარვადი აპის სიაში. მოძებნეთ ან გადაახვიეთ, რომ იპოვოთ თქვენთვის სასურველი და შეეხეთ მას. შემდეგ თქვენ შეგიძლიათ დააჭიროთ ღილაკს „დამატება“ ეკრანის ბოლოში, რათა ნახოთ იმ რესურსების სია, რომლებიც შეიძლება გადაიდო ამ აპლიკაციაში. აირჩიეთ რესურსი, დააყენეთ მისი მნიშვნელობა და გაიმეორეთ იმდენი მნიშვნელობისთვის, რამდენის შეცვლაც გსურთ. დააჭირეთ ღილაკს "შენახვა", შეიყვანეთ სახელი, დაადასტურეთ და თქვენ დაბრუნდებით მთავარ ეკრანზე, ახლა აჩვენებს ახალ გადაფარვას, რომელიც მზად არის ჩართვისთვის.

აქ მოცემულია რამდენიმე ეკრანის სურათი აპიდან, მიშაალ რაჰმანის წყალობით.

როგორც გვერდითი შენიშვნა, მე ასევე მაქვს ზოგადი გადაფარვის მენეჯერის აპლიკაცია, სახელწოდებით... გადაფარვის მენეჯერი. თავად წინასწარ კომპილირებული აპლიკაციაა ხელმისაწვდომია მხოლოდ ჩემს Patreon-ზე, მაგრამ წყაროს კოდი თავისუფლად არის ხელმისაწვდომი ყველას, ვისაც მისი შედგენა ან შეცვლა სურს.

დასკვნა

ახალი Fabricated Overlays API Android 12-ში საკმაოდ კარგია, ძირითადად იმიტომ, რომ მას არ სჭირდება root. ის შეიძლება არ იყოს ისეთი დახვეწილი, როგორც სრული RRO APK, მაგრამ ის გაძლევთ ბევრად მეტ მოქნილობას root წვდომის გარეშე.

შეამოწმეთ Fabricate Overlay აპი GitHub-ზე

თუ თქვენ გაქვთ მოწყობილობა, რომელიც მუშაობს Android 12-ზე და გსურთ სცადოთ ეს, შეამოწმეთ GitHub საცავი, რომელიც ზემოთ არის მიბმული. რელიზების განყოფილებას ექნება APK ჩამოსატვირთად და გამოსაყენებლად. ბიბლიოთეკა მარტივი უნდა იყოს თქვენს აპლიკაციაში JitPack-ის გამოყენებით.

რა თქმა უნდა, არ უნდა ელოდოთ, რომ ეს ფუნქცია დიდხანს დარჩება. Google-ს ნამდვილად არ მოსწონს მესამე მხარის გადაფარვები, ასე რომ ეს თითქმის აუცილებლად გამოსწორდება Android 13-ის გამოშვებისას. თუმცა, ამასობაში ისიამოვნეთ, სანამ ის გრძელდება!