Portál AbcLinuxu, 1. května 2025 01:34
Nedávno mě totálně vypeklo miui, strávil jsem hodiny debugováním html5 kódu kolem geolokace, aby se nakonec ukázalo, že to číňani rozbili tak šikovně, že geolokace fungovala v nativních aplikacích ale nefungovala v čemkoliv co využívá WebView. Redmi2 letěl do koše a vzal jsem mobil, na kterém jsem vědel že rozchodím CyanogenMod. S CM (12.1) zatím spokojenost, vše chodí skvěle, akorát mě vyložene irituje jeden efekt, který google přidal do Android 5. Popravdě, poprvé, když jsem měl v ruce tablet s Android 5, tak jsem 5 minut procházel Developer options a Accessibility settings, než mě došlo, že to není chyba, ale nový cool efekt. Nakonec bylo potřeba trochu poupravit bytecode.
Nebudu si stěžovat na to, jak se všechny firmy snaží Android upravit, ale vždy to dopadne hůř než vanilla Android, za který se pak musí připlácet, ani na to že Android ze systémového a vývojářského pohledu je jeden velký anti-pattern. Rozmazlený z linuxu jsem původně plánoval upravit zdrojáky, překompilovat jeden balíček, nahrát do mobilu a voilà. Ale v Androidu je potřeba překompilovat celý systém (asi 15GB zdrojáků) atd. atd. Proto také úprava bytecodu místo zdrojáků. K věci.
Ripple efekt vypadá takto, je protkán celým UI (více příkladů), ale v tomto případě, je nejen otravný, ale vyloženě hnusný. Pro srovnání - bez ripple efektu. Naštěstí to stejně vidí i v googlu, a v android 6 (c)ripple efekt překopali tak, že už vypadá jako normální efekt a ne jako Developer/Accessibility feature. To ošklivé přepínání tabů ale zatím nevyřešili.
Po dvou dnech hrabání se v Androidu jsem dal dohromady postup jak se tohoto efektu kompletně zbavit v CM 12.1 - je potřeba trochu upravit kód a navíc nainstalovat téma, které vše ještě trochu doladí.
Nebudu se moc rozepisovat o technických detailech - zdrojáky nevypnutelného ripple efektu jsou tady ... zkompilované to pak skončí v /system/framework/framework.jar; můj patch pouze nahradí funkci draw za funkci, která vrací true ale nic nedělá.
adb root
adb pull /system/framework/framework.jar
apktool d framework.jar
cd framework.jar.out; patch -p1 < android5_noripple.patch; cd ..Druhá možnost je použít python skript
python android5_noripple.py framework.jar.out/smali/android/graphics/drawable/Ripple.smali
Patch i skript žijí v tomto repu: https://github.com/luv/android5_noripple.
apktool b framework.jar.out
adb shell mount -o remount,rw /system
adb push framework.jar.out/dist/framework.jar /system/framework/
Mimochodem, protože apktool je java utilitka, tak samozřejmě kašle na dobré mravy, a vytváří si v $HOME neskryté adresáře, po použití je ještě potřeba rm -rf ~/apktool.
Stačí stáhnout a nainstalovat toto APK.
APK je také možno zbuildit ze zdrojáků na https://github.com/luv/android5_noripple_theme - stačí naimportovat do Android studia a kliknout na tlačítko "build".
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.