1. sessions, 09.09.2013 #1
    sessions

    sessions Threadstarter Android-Experte

    Man liest ja viele Beschwerden oder Ärgernisse über die neu "Double Tap" Funktion, um in die Recent Apps - Liste zu kommen bzw. lange drücken für Gooogle Now.
    Ich habe nach einer Lösung gesucht das zu ändern. Ich habe mir dazu die bestehende Modifikation mit dem Xposed Framework angesehen, mir kommt das aber nicht wirklich elegant vor.

    Ich habe mir das dann im bestehenden System genauer angeschaut, wo diese Funktion verankert ist und habe den entsprechenden Eintrag auch gefunden.

    Hier ist die Anleitung zum Ändern des "Doppelklick / Lange Drücken" Verhaltens der Home- Taste!

    Warnung:
    Das ist nur was für Fortgeschrittene!
    Unbedingt vorher ein nandroid Backup machen.
    Ich übernehme keine Verantwortung für Bootloops oder ähnliches!


    Voraussetzungen:

    • root - so wie immer ;)
    • Deodexed Rom 6.2.B.1.96
    Mit einem odexed ROM (=Stock nach dem Update) könnte es auch funktionieren - hab ich aber nicht probiert! Bitte dazu um Feedback, vielleicht kann es ja jemand einmal probieren!

    • adb(ist beim APKMultiTool dabei, unter \other )
    • Texteditor (vorzugsweise Notepad++)


    So, nun der Ablauf im Detail:

    1) Download aller notwendigen Dateien, einrichten des Framework am PC

    Als erstes müssen wir die Framework- Umgebung im APK Multitool einrichten.

    Das geht über die Setup.bat, Funktion 2 des APK- Multitool.
    Dort die SystemUI.apk und framework-res.apk installieren. Die beiden Dateien werden dabei vom Handy geladen.
    Für Xperia Geräte muss aber noch eine weitere Datei geladen werden, die nicht im APKMultitool voreingestellt ist!

    Dazu eine Kommandozeile im Verzeichnis APK-Multi-Tool\other öffnen, um die Dateien vom Handy zu laden

    Code:
    adb pull /system/framework/SemcGenericUxpRes.apk
    
    Dann die Dateien in das apktool importieren:
    Code:
    java -jar apktool.jar if SemcGenericUxpRes.apk
    
    Zum Schluss müssen wir noch die framework-res.apk in das APK-Multitool Verzeichnis "place-apk-here-for-modding" kopieren, damit das Programm sie als aktuelles Projekt erkennt.
    Code:
    adb pull /system/framework/framework-res.apk  ..\place-apk-here-for-modding
    
    Sie sollte mit dem adb Befehl nun dort sein, bitte nochmal kontrollieren!


    2) Dekompilieren der framework-res.apk

    Das ApkMultiTool über die Script.bat starten und mit Funktion 22 die "Heap Memory Size" auf "1024" einstellen.
    Rechts oben muss die framework-res.apk als aktuelles Projekt angeführt sein, wenn nicht mit Funktion "24" einstellen.

    Danach mit Funktion 9 die Datei dekompilieren
    Das MUSS fehlerfrei durchlaufen
    Es wird dabei unter "\projects" ein neues Verzeichnis "\framework-res.apk" erstellt, in dem die aufgelösten Daten sind.

    Die Datei ist nach Abschluss des Vorganges dekompiliert.


    3) Die Einstellung verändern

    Das APKMultitool minimieren und in den Explorer wechseln.
    Im Unterverzeichnis \projects\framework-res.apk\res\values des APKMultitool gibt es eine Datei namens
    => integers.xml

    Diese mit Notepad++ öffnen und die folgenden Zeilen suchen:

    Code:
      <integer name="config_longPressOnHomeBehavior">3</integer>
      <integer name="config_doubleTapOnHomeBehavior">2</integer>
    
    Es kann sein, dass hier "1" und "3" steht oder andere Zahlen. Da ich ein anderes Framework verwende (Honami :D ), könnten die Zahlen auch anders lauten.
    Diese beiden Zahlen muss man miteinander vertauschen!
    Dann abspeichern.

    4) Die framework-res.apk neu kompilieren

    Im APK Multitool die Funktion 11 "Compile System APK" ausführen. Die Frage nach weiteren APKs dann mit "n" beantworten.
    Die Datei wird kompiliert, es dürfen dabei keine Fehlermeldungen auftauchen.
    --> es entsteht ein unsignedframework-res.apk

    Im APK Multitool die Funktion 13 "Sign apk" ausführen.

    --> es entsteht ein signedframework-res.apk im Verzeichnis "place-apk-here-for-modding" des APKMultiTool

    Die Datei wurde nun erfolgreich kompiliert und signiert.


    5) Die Datei auf das Telefon spielen

    Die signedframework-res.apk auf das Telefon kopieren und in framework-res.apk umbenennen.
    Dort mit einem Filemanager nach /system/framework kopieren, die vorhandene Datei überschreiben.
    Achtung: Das Handy startet danach sofort neu!

    Fertig!
    Die Lange-Drück und die Doppel-Drück Funktion sind nun vertauscht.


    Anmerkung:
    Ich habe bei Punkt 3 ein bißchen mit den Zahlen herumgespielt, also 1/3, 3/2, usw. und bin immer zu verschiedenen Ereignissen bei "DoubleTap" bzw. "Longpress" gekommen. Wenn meine Anleitung mit dem Austausch der Zahlen nicht funktioniert, so müsst ihr bitte einfach ein bißchen mit den Zahlen 1,2,3 herumprobieren. Schlimmstenfalls macht das Handy dann bei langem oder doppeltem Tastendruck gar nichts.

    Ich weiß, dass die meisten User damit nichts anfangen können werden, aber vielleicht hilft's dem einen oder anderen Dev.
     
    Zuletzt bearbeitet: 10.09.2013
    dotartist und Keinbockwurst haben sich bedankt.
  2. brianmolko1981, 09.09.2013 #2
    brianmolko1981

    brianmolko1981 Android-Lexikon

    viel zu viel Aufwand für ein so winziges problem.
    Einfach Doppelklick und gut ist.
     
  3. sessions, 11.09.2013 #3
    sessions

    sessions Threadstarter Android-Experte

    Ok, hier noch eine kurze Fortsetzung...

    Zu den Möglichkeiten die man hat, das Verhalten zu ändern hab ich folgendes festgestellt bzw. in den Sources nachgelesen:

    Der Aktion, mit der der Integer Wert (also 0,1,2,3) verknüpft ist, wird in der android.policy.jar definiert.
    Und zwar in der \smali\com\android\internal\policy\impl\PhoneWindowManager.smali

    Bei der aktuellen .96 FW kann man bei longpress den Wert auf 0 bis 3 setzen, hier mal der smali code:

    Code:
    .field static final LONG_PRESS_HOME_NOTHING:I = 0x0
    .field static final LONG_PRESS_HOME_RECENT_DIALOG:I = 0x1
    .field static final LONG_PRESS_HOME_RECENT_SYSTEM_UI:I = 0x2
    .field static final LONG_PRESS_HOME_ASSIST:I = 0x3
    
    .field static final DOUBLE_TAP_HOME_NOTHING:I = 0x0
    .field static final DOUBLE_TAP_HOME_RECENT_SYSTEM_UI:I = 0x1
    
    Mit "Double Tap" kann man nur 0 = nothing und 1 = "Recent Apps view in SystemUI" wählen, da nur dort im Code auch eine Funktion einprogrammiert ist.

    Mein Ziel war, mit der "Double Tap Home" Funktion einfach eine andere App zu verknüpfen :cool:

    Da es bei double Tap Home nichts gibt, hab ich mir die HOME_ASSIST angesehen. Diese verweist dann auf eine "SearchManager" Aktion, die tief in die android.policy.jar verwurzelt ist.
    Um da also eine Änderung zu realisieren müsste man etliche Zeilen in den Smali Codes der android.policy.jar verändern bzw. einfügen.
    Das übersteigt jedoch meine bescheidenen Kenntnisse.


    @Placebo: Ich denke genau dafür ist aber ein Forum da, bzw. speziell diese Section. Siehe auch mein letzter Satz im Eingangsposting. ;)
     
  4. Marinaxs, 06.02.2014 #4
    Marinaxs

    Marinaxs Android-Hilfe.de Mitglied

    Oder einfach mal "Wanam" ausprobieren
     

Besucher kamen mit folgenden Begriffen auf unsere Seite:

  1. double Home Tab ändern

    ,
  2. add double tap android.policy.jar

Du betrachtest das Thema "Änderung der Long-Press / Double Tap Funktion der Home Taste" im Forum "Root / Hacking / Modding für Sony Xperia S",
  1. Android-Hilfe.de verwendet Cookies um Inhalte zu personalisieren und dir den bestmöglichen Service zu gewährleisten. Wenn du auf der Seite weitersurfst stimmst du der Cookie-Nutzung zu.  Ich stimme zu.