Portál AbcLinuxu, 10. května 2024 08:47

Android 5 bez ripple efektu

22.1.2016 14:59 | Přečteno: 2097× | Výběrový blog | poslední úprava: 22.1.2016 14:59

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á.

Zrušení ripple efektu na CM 12.1

Tento postup vyžaduje nainstalované adb, apktool a roota na mobilu/tabletu.

Přepsání funkce Ripple.draw

  1. V "Developer options" zapneme "Android debugging" a "Root access" (For ADB)
  2. Přepneme adb do root módu
    adb root
  3. Z mobilu vycucneme /system/framework/framework.jar
    adb pull /system/framework/framework.jar
  4. Na framework.jar pustíme disassembler
    apktool d framework.jar
  5. Přepíšeme funkci draw ve třídě Ripple
    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.

  6. Zbuildujeme upravený framework.jar
    apktool b framework.jar.out
  7. Potřebujeme write přístup na /system
    adb shell
    mount -o remount,rw /system
    
  8. Nahrajeme zpět upravený framework.jar
    adb push framework.jar.out/dist/framework.jar /system/framework/
  9. Reboot

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.

Instalace tématu "NoRipple Theme"

Toto téma dále mění vzhled systémových aplikací, aby vypadali ješte trochu čistěji.

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".

       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

22.1.2016 17:04 tom
Rozbalit Rozbalit vše Re: Android 5 bez ripple efektu
Odpovědět | Sbalit | Link | Blokovat | Admin
Ja se toho zbavil nastavenim delky vsech animaci na 0.
23.1.2016 01:02 smazáno | skóre: 18 | blog: smazáno
Rozbalit Rozbalit vše Re: Android 5 bez ripple efektu
Odpovědět | Sbalit | Link | Blokovat | Admin
Dobre vedet, ze chyba neni v mych ocich, kdyz z 500 precteni ten stejny "efekt" stval alespon jednoho dalsiho cloveka tak, ze si kvuli tomu vypnul vsechnny animace.

Btw. nastavenim animaci na 0x (jak nekdo radi na stackoverflow) se toho efektu uplne nezbavis (jak nekdo na tu radu na stackoverflow odpovida). Porad to treba skarade problikava pri kliknuti na sipku zpatky v "settings", jak se chova zrovna prepinani tabu pri delce animaci "0x" si nepomatuju.
23.1.2016 09:23 tom
Rozbalit Rozbalit vše Re: Android 5 bez ripple efektu
Ja vypinal animace vzdycky, nechapu, k cemu v systemu je tolik animaci, ktere nemaji zadnou vysvetlujici ulohu, napriklad animace pri prepnuti aplikace - kdyz prepinam aplikace, je to proto, abych pracoval s tou druhou, ne proto, abych koukal, jak se vymenujou. Smysl ma napriklad animace pri dosazeni konce seznamu, kdy mi ukazuje, ze se dal nemuzu posunout a ja to tak odlisim od pripadu, kdy je aplikace zaneprazdnena.

Je to uplne stejne, jako kdyby nekdo vyrobil vrtacku, ktera po stisknuti spouste bude nejdriv par sekund blikat, zahraje melodii a az pak zacne vrtat.

Je mi lito, jak CM skoncil - pridavaji blbosti a pritom je v systemu tolik bugu, ze je obcas otravne ho pouzivat, napr. layout homescreenu se rozbije pri otoceni na sirku, protoze plocha je zarovnana na stred, bez ohledu na to, ze napravo je "spodni" lista, ktera pak s plochou koliduje. Integrovanej ssh klient funguje jen pod rootem a jen s IPckem, protoze jmeno si neresolvne atd. :(
Pavel Stárek avatar 9.2.2016 12:11 Pavel Stárek | skóre: 44 | blog: Tady bloguju já :-) | Kolín
Rozbalit Rozbalit vše Re: Android 5 bez ripple efektu
Blbé ovšem je, že po vypnutí animací zase nefungují díky nějakým bugům jiné věci. Například na Tesco mobilu Op3n Dott který ma relativně čistý Android mi nevyjížděl číselník. Tehdy jsem skončil u nastavení animací alespoň na hodnotu 0.5.
Kdo chce, hledá způsob; kdo nechce, hledá důvod.
23.1.2016 01:09 smazáno | skóre: 18 | blog: smazáno
Rozbalit Rozbalit vše Re: Android 5 bez ripple efektu
Odpovědět | Sbalit | Link | Blokovat | Admin
stackoverflow vlakno

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.