API на Fabricated Overlay на Android 12 връща теми без root

Помните ли как Android 8 улесни тематизирането на вашето устройство? Помниш ли колко забавно беше това? Е, той се завърна в Android 12, с обрат.

Пълната конюшня Android 12 изданието е точно зад ъгъла и Google дори го направи публикува изходния код към неговото AOSP репо. Има много нови неща в Android 12, включително допълнение към наслагванията на ресурси, наречени Изработени наслагвания. Това, което беше предназначено като API, за да помогне на системата да управлява динамичните промени, използвани в Материални Вие и monet може да се превърне в нещо много по-голямо - поне до пускането на Android 13.

Заден план

Mishaal Rahman откри този нов API и го насочи към вниманието ми. Той е използвал командата на обвивката за него, за да тества различни стойности на ресурсите в Android 12, без да е имал за ръчно компилиране на насложени APK файлове и той смята, че това може да създаде интересна идея за приложение за руутнати устройства. Когато той го обърна на вниманието ми, разгледах много изходния код за Android 12 и забелязах нещо, което ми се стори доста интересно. Тествах това, което открих, и сега сме тук - както се оказа, API на Fabricated Overlay може да се използва за връщане на теми без root. Преди да навляза твърде далеч в случващото се тук, ще обясня какво всъщност представляват Изработените наслагвания.

Какво представляват произведените наслагвания?

Изработените наслагвания са нова функция, въведена в Android 12. Те са подобни на класическите наслагвания на ресурси за изпълнение (RRO), които Android има от няколко години. Както RRO, така и изработените наслагвания могат да заменят различни ресурси за различни приложения. Можете да промените булева стойност от false на true (или обратно), да зададете колко голяма искате да бъде лентата на състоянието и т.н.

Изработените наслагвания обаче имат някои забележителни разлики от RRO. Първо, не е необходимо да генерирате насложен APK и след това да го инсталирате. Вместо това просто казвате на Android кои стойности искате да промените за кое приложение и той ще се погрижи да регистрира вашите промени като наслагване, което след това можете да активирате.

Те също са малко по-ограничени от RRO. Преди Android 11 RRO можеха да заменят почти всеки ресурс: булеви стойности, цели числа, измерения, атрибути, оформления и дори файлове с необработени данни. Android 11 направи някои промени в начина на работа на RRO, правейки заместващите оформления вече невъзможни, въпреки че направи RRO по-стабилни като цяло.

Изработените наслагвания, от друга страна, могат да заменят само стойности, които могат да бъдат представени като цели числа. Това включва цели числа (дух), размери, булеви стойности и цветове. Не можете да ги използвате, за да замените ресурси с необработени данни, оформления, низове или масиви - поне не лесно. Това донякъде е произволно ограничение в API: той приема само цели числа и категории ресурси, както е дефинирано от класа TypedValue. TypedValue го прави поддържа низове и другите типове ресурси, но само за препратка към техния ресурс, а не за съхраняване на действителните им данни.

Въпреки това, тези ограничения не са твърде големи за предвидената цел на Fabricated Overlays: Material You и monet ефекти. Изработените наслагвания улесняват системата да генерира и прилага цветови и размерни наслагвания в движение, без да се налага да рестартирате или да чакате APK да бъде компилиран.

Сега, обикновено, това би било просто още един чист API, от който хората с руутнати устройства да се възползват. Освен ако няма вратичка, създадена от производителя (като тази, от която Synergy се възползва на устройства на Samsung), наслагванията могат да се инсталират само от трети страни с root достъп. Това обаче е най-добрата част – Google забрави да закърпи дупка в Android 12.

Изработени наслагвания без корен

Android 8 представи новия API на Overlay Manager Service (или OMS) и хората доста бързо откриха, че APK файловете за наслагване могат да бъдат инсталирани като нормални приложения и след това да бъдат активирани с помощта на ADB. За съжаление Google коригира това в Android 9 и оттогава само наслагвания, подписани със същия ключ като системата, могат да се инсталират динамично.

Както се оказа, произведените наслагвания на Android 12 имат вратичка, напомняща тази в Android 8: те не се нуждаят от root достъп или разрешения на ниво подпис. Те просто се нуждаят от нещо, работещо като потребител на shell (т.е. ADB), за да ги регистрират.

Съвсем ясно е, че Google възнамерява Изработените наслагвания да бъдат достъпни само за root и системни потребители. Има реализация на ADB команда за създаването им и тя няма да се изпълнява, ако изпълняващият потребител не е root. Пропускът е, че проверката е само в командата, а не в действителния API, което означава, че можем да се възползваме от нея с малко работа.

ADB на устройството

От дълго време Android има безжична ADB функция. Това позволява на компютър (или нещо друго с ADB двоичен и мрежов достъп) да се свърже с устройство безжично. Предназначен е най-вече за устройства с Android, които нямат достъпни за потребителя USB връзки, като например смарт часовници и телевизори. Освен това преди Android 11 се нуждаехте от кабелна ADB връзка, за да активирате безжичен режим.

Android 11 е това, което официално донесе безжичния ADB на телефони и таблети. Той е малко по-сложен от класическия безжичен ADB, с кодове за сдвояване и удостоверяване, но може да се активира от потребителя изцяло на устройството, докато устройството е свързано към WiFi. Това означава, че е възможно да се свържете с вашето устройство чрез ADB от вашето устройство и всичко, от което се нуждаете, е WiFi Връзка.

Използване на API с повишени права в приложение

Има много причини, поради които може да искате да използвате ограничени API в приложението си. Обикновено това е, защото те предоставят някаква специална функционалност, от която се нуждаете. Докато приложният програмен интерфейс (API), от който се нуждаете, има имплементирана командна обвивка, е доста лесно да го използвате от приложение. Всичко, което трябва да направите, е да създадете shell процес като root (или ADB), да изпълните правилната команда и да анализирате резултата, ако има такъв.

Какво става, ако приложният програмен интерфейс (API) няма имплементация на обвивка или в имплементацията на обвивката липсва нещо, от което се нуждаете? Ако сте на руутнато устройство, можете да използвате нещо подобно libRootJava. libRootJava ви позволява да взаимодействате с API на рамката на Android, сякаш приложението ви работи като root потребител. Това е както по-удобно, така и много по-бързо от изпълняването на команди на обвивката, тъй като всичко е на един и същ език и не е нужно да се притеснявате за ръчния анализ на низове. Той наистина има някои ограничения, но в по-голямата си част работи чудесно.

API на libRootJava е доста гъвкав. Можете да го адаптирате да работи като потребител на shell вместо root. За щастие, не е нужно, защото някой вече го е направил и се нарича Шизуку. Shizuku е почти като комбинация от Magisk Manager и libRootJava.

Приложението Shizuku Manager ви води през настройването на процес, работещ като потребител на обвивката, до който Shizuku има достъп. Библиотеката на Shizuku API може да бъде внедрена в приложения, за да им позволи достъп до API на системата, сякаш са потребител на обвивката. Това е много по-централизиран процес от libRootJava, тъй като Shizuku трябва да бъде настроен само веднъж, преди всяко приложение, внедряващо API библиотеката на Shizuku, да може да го използва. Ако се интересувате как работи Shizuku и как можете да го интегрирате в приложението си, Имам ръководство за това тук.

Шизуку и изработени наслагвания

Досега вероятно виждате накъде отива това. Можем да използваме услуга като Shizuku за достъп до API на Fabricated Overlays като потребител на обвивката и можем да използваме безжичната ADB функция на Android 11, за да получим достъп на ниво обвивка, всичко на устройството. Тъй като ограничението за root потребител присъства само в командата на обвивката на Fabricated Overlays, а не в действителния API, стартирането като потребител на обвивката е достатъчно, за да се използва директно.

Внедряване: Библиотека и Примерно приложение

Какво ще кажете за подробностите за изпълнението? Е, покрих ви и за това.

Подготвяйки се за това, направих и двете a библиотека и напълно функционално примерно приложение използвайки тази библиотека.

Самата библиотека е най-вече за удобство. Той обгръща някои от скритите системни API и ви дава няколко удобни метода за работа с разрешения на Shizuku. Освен това е гъвкав, така че можете да предоставите свой собствен екземпляр на IOverlayManager API, ако имате друг начин да го извлечете.

Примерното приложение показва как можете да приложите библиотеката с помощта на Shizuku. Освен това е напълно функционално и полезно приложение. Главната страница показва текущо регистрираните произведени наслагвания, които са създадени чрез нея, групирани по целево приложение. Можете също да ги активирате, деактивирате и изтриете оттам.

Докосването на бутона „Добавяне на наслагване“ в долната част ви води до списък с всички наслагвани приложения. Търсете или превъртете, за да намерите този, от който се нуждаете, и го докоснете. След това можете да натиснете бутона „Добавяне“ в долната част на екрана, за да видите списъка с ресурси, които могат да бъдат заменени в това приложение. Изберете ресурс, задайте стойността му и повторете за толкова стойности, колкото искате да промените. Натиснете бутона „Запазване“, въведете име, потвърдете и ще бъдете върнати на главния екран, показващ новото наслагване, готово за активиране.

Ето няколко екранни снимки от приложението, благодарение на Mishaal Rahman.

Като странична бележка, имам и общо приложение за управление на наслагвания, наречено... Мениджър на наслагване. Самото предварително компилирано приложение е достъпно само в моя Patreon, но на изходният код е свободно достъпен за всеки, който иска да го компилира или модифицира.

Заключение

Новият API на Fabricated Overlays в Android 12 е доста страхотен, най-вече защото не се нуждае от root. Може да не е толкова сложен като пълен RRO APK, но ви дава много повече гъвкавост без root достъп.

Вижте приложението Fabricate Overlay в GitHub

Ако имате устройство с Android 12 и искате да опитате това, разгледайте хранилището на GitHub, свързано по-горе. В раздела Издания ще има APK за изтегляне и използване. Библиотеката трябва да е лесна за включване във вашето собствено приложение с помощта на JitPack.

Разбира се, не трябва да очаквате тази функция да остане за дълго. Google наистина не харесва наслагвания от трети страни, така че това почти определено ще бъде коригирано, когато Android 13 бъде пуснат. Междувременно обаче му се насладете, докато трае!