Android 12'nin Fabrikasyon Yer Paylaşımı API'si köksüz temaları geri getiriyor

Android 8'in cihazınıza tema oluşturmayı nasıl kolaylaştırdığını hatırlıyor musunuz? Bunun ne kadar eğlenceli olduğunu hatırlıyor musun? Bir değişiklikle Android 12'ye geri döndü.

Tam kararlı Android 12 sürümün çıkması çok yakında ve Google bile kaynak kodunu yayınladım AOSP deposuna. Orada bir Android 12'deki pek çok yenilikFabrikasyon Kaplamalar adı verilen kaynak kaplamalarına bir ekleme de dahil. Sistemin kullanılan dinamik değişiklikleri yönetmesine yardımcı olacak bir API olarak kastedilen şey Malzeme Siz ve monet çok daha büyük bir şeye dönüşebilir; en azından Android 13 çıkana kadar.

Arka plan

Mishaal Rahman bu yeni API'yi keşfetti ve dikkatimi çekti. Android 12'deki farklı kaynak değerlerini test etmek için kabuk komutunu kullanıyordu. Yer paylaşımlı APK'ları manuel olarak derlemek için bunun root erişimli cihazlar için ilginç bir uygulama fikri oluşturabileceğini düşündü. Dikkatimi çektiğinde, Android 12'nin kaynak kodunu detaylıca inceledim ve oldukça ilginç olduğunu düşündüğüm bir şeyi fark ettim. Bulduklarımı test ettim ve şimdi işte buradayız. Görünen o ki, Fabrikasyon Overlay API'si köksüz temaları geri getirmek için kullanılabilir. Burada olup bitenlere çok fazla girmeden önce, Fabrikasyon Kaplamaların gerçekte ne olduğunu açıklayacağım.

Fabrikasyon Kaplamalar Nelerdir?

Fabrikasyon Kaplamalar, Android 12'de sunulan yeni bir özelliktir. Bunlar, Android'in birkaç yıldır sahip olduğu klasik Çalışma Zamanı Kaynak Katmanlarına (RRO'lar) benzer. Hem RRO'lar hem de Fabrikasyon Kaplamalar, farklı uygulamalar için farklı kaynakları geçersiz kılabilir. Bir boole değerini yanlıştan doğruya (veya tam tersi) değiştirebilir, durum çubuğunun ne kadar büyük olmasını istediğinizi vb. ayarlayabilirsiniz.

Bununla birlikte, Fabrikasyon Kaplamaların RRO'lardan bazı önemli farklılıkları vardır. Birincisi, bir yer paylaşımlı APK oluşturup ardından yüklemenize gerek yok. Bunun yerine, Android'e hangi uygulama için hangi değerleri değiştirmek istediğinizi söylersiniz ve o, değişikliklerinizi daha sonra etkinleştirebileceğiniz bir katman olarak kaydetmeyle ilgilenir.

Ayrıca RRO'lardan biraz daha sınırlıdırlar. Android 11'den önce RRO'lar hemen hemen her türlü kaynağı geçersiz kılabiliyordu: boolean'lar, tamsayılar, boyutlar, nitelikler, düzenler ve hatta ham veri dosyaları. Android 11, RRO'ların çalışma biçiminde bazı değişiklikler yaparak, RRO'ları genel olarak daha kararlı hale getirse de, geçersiz kılma düzenlerini artık pek mümkün hale getirmedi.

Öte yandan, Fabrikasyon Kaplamalar yalnızca tamsayı olarak temsil edilebilecek değerleri geçersiz kılabilir. Buna tam sayılar (hah), boyutlar, boole değerleri ve renkler dahildir. Ham veri kaynaklarını, düzenleri, dizeleri veya dizileri geçersiz kılmak için bunları kullanamazsınız - en azından kolayca. Bu, API'de biraz keyfi bir sınırlamadır: yalnızca TypedValue sınıfı tarafından tanımlandığı şekilde tamsayı değerleri ve kaynak kategorilerini kabul eder. TypedValue şunu yapar: Destek dizeleri ve diğer kaynak türlerini kullanır, ancak yalnızca kaynaklarına referans vermek için kullanır, gerçek verilerini tutmaz.

Bununla birlikte, bu sınırlamalar, Fabrikasyon Kaplamalar: Maddi Siz ve para efektlerinin amaçlanan amacı açısından çok büyük bir mesele değildir. Fabrikasyon Kaplamalar, sistemin yeniden başlatmaya veya APK'nın derlenmesini beklemeye gerek kalmadan anında renk ve boyut kaplamaları oluşturmasını ve uygulamasını kolaylaştırır.

Normalde bu, root erişimli cihazlara sahip kişilerin faydalanabileceği başka bir güzel API olacaktır. Üretici tarafından oluşturulan bir boşluk olmadığı sürece (Synergy'nin Samsung cihazlarında faydalandığı gibi), kaplamalar yalnızca root erişimi olan üçüncü taraflarca kurulabilir. İşin en iyi kısmı da bu; Google, Android 12'de bir delik kapatmayı unuttu.

Köksüz Fabrikasyon Kaplamalar

Android 8, yeni Yer Paylaşımı Yöneticisi Hizmeti (veya OMS) API'sini tanıttı ve insanlar, yer paylaşımlı APK'ların normal uygulamalar olarak yüklenebileceğini ve ardından ADB kullanılarak etkinleştirilebileceğini oldukça hızlı bir şekilde keşfetti. Ne yazık ki Google bunu Android 9'da yamaladı ve o zamandan beri yalnızca sistemle aynı anahtarla imzalanan kaplamalar dinamik olarak yüklenebiliyor.

Görünen o ki, Android 12'nin Fabrikasyon Kaplamaları, Android 8'dekini hatırlatan bir boşluk içeriyor: Kök erişimine veya imza düzeyinde izinlere ihtiyaç duymuyorlar. Onları kaydetmek için sadece kabuk kullanıcısı (yani ADB) olarak çalışan bir şeye ihtiyaçları var.

Google'ın, Fabrikasyon Kaplamaların yalnızca kök ve sistem kullanıcıları tarafından erişilebilir olmasını amaçladığı oldukça açıktır. Bunları oluşturmak için bir ADB komut uygulaması vardır ve yürüten kullanıcı root değilse çalışmaz. Buradaki boşluk, kontrolün gerçek API'de değil, yalnızca komutta olmasıdır, bu da biraz çalışmayla bundan yararlanabileceğimiz anlamına gelir.

Cihaz Üzerindeki ADB

Uzun bir süredir Android'in kablosuz bir ADB özelliği var. Bu, bir bilgisayarın (veya ADB ikili programı ve ağ erişimi olan herhangi bir şeyin) bir cihaza kablosuz olarak bağlanmasını sağlar. Çoğunlukla kullanıcı tarafından erişilebilen USB bağlantılarına sahip olmayan Android cihazlar için tasarlanmıştır. akıllı saatler ve televizyonlar. Ayrıca Android 11'den önce, etkinleştirmek için kablolu bir ADB bağlantısına ihtiyacınız vardı. kablosuz modu.

Android 11, kablosuz ADB'yi resmi olarak telefonlara ve tabletlere getiren şeydir. Eşleştirme ve kimlik doğrulama kodlarıyla klasik kablosuz ADB'den biraz daha karmaşıktır ancak kullanıcı tarafından tamamen cihaz üzerinden etkinleştirilebilir. cihaz WiFi'ye bağlı olduğu sürece. Bu, cihazınızdan ADB aracılığıyla cihazınıza bağlanmanın mümkün olduğu ve ihtiyacınız olan tek şeyin bir WiFi olduğu anlamına gelir bağlantı.

Bir Uygulamada Yükseltilmiş API'leri Kullanma

Uygulamanızda kısıtlanmış API'leri kullanmak isteyebileceğiniz birçok neden vardır. Bunun nedeni genellikle ihtiyacınız olan bazı özel işlevleri sağlamalarıdır. İhtiyacınız olan API'nin bir kabuk komut uygulaması olduğu sürece, onu bir uygulamadan kullanmak oldukça kolaydır. Tek yapmanız gereken root (veya ADB) olarak bir kabuk işlemi oluşturmak, doğru komutu çalıştırmak ve varsa sonucu ayrıştırmaktır.

API'nin bir kabuk uygulaması yoksa veya kabuk uygulamasında ihtiyacınız olan bir şey eksikse ne olur? Köklü bir cihaz kullanıyorsanız, şunun gibi bir şey kullanabilirsiniz: libRootJava. libRootJava, uygulamanız kök kullanıcı olarak çalışıyormuş gibi Android çerçeve API'leriyle etkileşim kurmanıza olanak tanır. Bu, kabuk komutlarını çalıştırmaktan hem daha kullanışlı hem de çok daha hızlıdır çünkü hepsi aynı dildedir ve dizeleri manuel olarak ayrıştırma konusunda endişelenmenize gerek yoktur. Bazı sınırlamaları var, ancak çoğunlukla harika çalışıyor.

LibRootJava API'si oldukça esnektir. Kök yerine kabuk kullanıcısı olarak çalışacak şekilde uyarlayabilirsiniz. Neyse ki buna gerek yok çünkü birisi bunu zaten yaptı ve buna denir Şizuku. Shizuku neredeyse Magisk Manager ve libRootJava'nın birleşimi gibidir.

Shizuku Manager uygulaması, Shizuku'nun erişebileceği kabuk kullanıcısı olarak çalışan bir işlemin ayarlanmasında size yol gösterir. Shizuku API kitaplığı, uygulamaların sistem API'lerine sanki kabuk kullanıcısıymış gibi erişmelerini sağlamak için uygulamalara uygulanabilir. Shizuku API kitaplığını uygulayan her uygulamanın kullanabilmesi için Shizuku'nun yalnızca bir kez kurulması gerektiğinden, libRootJava'dan çok daha merkezi bir işlemdir. Shizuku'nun nasıl çalıştığı ve onu uygulamanıza nasıl entegre edebileceğinizle ilgileniyorsanız, Bunun için burada bir rehberim var.

Shizuku ve Fabrikasyon Kaplamalar

Şimdiye kadar muhtemelen bunun nereye gittiğini görebilirsiniz. Shell kullanıcısı olarak Fabricated Overlays API'ye erişmek için Shizuku gibi bir hizmeti kullanabiliriz ve tamamen cihaz üzerinden kabuk düzeyinde erişim elde etmek için Android 11'in kablosuz ADB özelliğini kullanabiliriz. Kök kullanıcı kısıtlaması gerçek API'de değil, yalnızca Fabrikasyon Kaplamalar kabuk komutunda mevcut olduğundan, kabuk kullanıcısı olarak çalıştırmak onu doğrudan kullanmak için yeterlidir.

Uygulama: Kütüphane ve Örnek Uygulama

Peki uygulama detayları? Bu konuda da seni korudum.

Buna hazırlık olarak her ikisini de yaptım. kütüphane ve tamamen işlevsel bir örnek uygulama bu kütüphaneyi kullanarak.

Kütüphanenin kendisi çoğunlukla kolaylık sağlamak içindir. Bazı gizli sistem API'lerini kapsar ve Shizuku izinlerini yönetmek için size birkaç kullanışlı yöntem sunar. Aynı zamanda esnektir, dolayısıyla başka bir alma yönteminiz varsa, IOverlayManager API'sinin kendi örneğini sağlayabilirsiniz.

Örnek uygulama, Shizuku'yu kullanarak kitaplığı uygulamaya nasıl geçebileceğinizi gösterir. Aynı zamanda tamamen işlevsel ve kullanışlı bir uygulamadır. Ana sayfa, kendisi aracılığıyla oluşturulan, hedef uygulamaya göre gruplandırılmış, halihazırda kayıtlı Fabrikasyon Kaplamaları görüntüler. Bunları buradan da etkinleştirebilir, devre dışı bırakabilir ve silebilirsiniz.

Alt kısımdaki "Yer Paylaşımı Ekle" düğmesine dokunduğunuzda, yerleştirilebilir tüm uygulamaların bir listesine yönlendirilirsiniz. İhtiyacınız olanı bulmak için arayın veya kaydırın ve ona dokunun. Ardından, o uygulamada geçersiz kılınabilecek kaynakların listesini görüntülemek için ekranın altındaki "Ekle" düğmesine basabilirsiniz. Bir kaynak seçin, değerini ayarlayın ve değiştirmek istediğiniz sayıda değer için işlemi tekrarlayın. "Kaydet" düğmesine basın, bir ad girin, onaylayın; artık etkinleştirilmeye hazır yeni arayüzü gösteren ana ekrana yönlendirileceksiniz.

Mishaal Rahman sayesinde uygulamadan bazı ekran görüntüleri burada.

Bir ek not olarak, aynı zamanda adında genel bir katman yöneticisi uygulamam da var... Yer Paylaşımı Yöneticisi. Önceden derlenmiş uygulamanın kendisi sadece Patreon'umda mevcut, ama kaynak kodu serbestçe kullanılabilir derlemek veya değiştirmek isteyen herkese.

Çözüm

Android 12'deki yeni Fabrikasyon Kaplamalar API'si oldukça harika, çünkü çoğunlukla root gerektirmiyor. Tam kapsamlı bir RRO APK kadar karmaşık olmayabilir, ancak root erişimi olmadan size çok daha fazla esneklik sağlar.

GitHub'daki Fabricate Overlay uygulamasına göz atın

Android 12 çalıştıran bir cihazınız varsa ve bunu denemek istiyorsanız yukarıda bağlantısı verilen GitHub deposuna göz atın. Sürümler bölümünde indirilip kullanılacak bir APK bulunacaktır. Kütüphanenin JitPack kullanarak kendi uygulamanıza dahil edilmesi kolay olmalıdır.

Elbette bu özelliğin uzun süre ortalıkta kalmasını beklememelisiniz. Google, üçüncü taraf kaplamalardan gerçekten hoşlanmıyor, bu nedenle Android 13 yayınlandığında bu durum neredeyse kesinlikle çözülecek. Bu arada, sürdüğü sürece tadını çıkarın!