scarface1991
Stamm-User
- 480
Wie ihr alle wisst hat das S3 (wie auch die meisten anderen Samsung Smartphones) das Problem, dass man fast immer auf den Bildschirm warten muss, nachdem man die Powertaste gedrückt hat. Dies kann bis zu 2 Sekunden dauern und kann, wenn man z.B. ganz kurz nur auf die Uhr schauen will, ziemlich nervig werden.
Mit dieser Anleitung habt ihr keine Verzögerung mehr, sodass der Bildschirm sofort angeht, nachdem ihr die Powertaste gedrückt habt. Dies wird mit dem Einbau eines Wakelocks erreicht, der das Smartphone wachhält, sodass das Handy nicht in den Deep Sleep modus verfallen kann, was im normalfall schon nach etwa einer Sekunde passiert, nachdem der Bildschirm aus ist.
Dies kann man natürlich negativ sehen, aber der Entwickler der Mod erklärt, dass das Smartphone sowieso bis zu über hundert mal pro Stunde aufwacht aufgrund von z.B. Navigations-Apps (Google Maps), Push-Notifications usw., sodass diese Mod sogar für manche einen positiven Effekt auf den Akku hat, weil das Handy nicht erst aus dem Deep Sleep Modus kommen muss für diese Services. Es sei aber gesagt, dass es für jeden anders sein kann.
So nun aber zu der Mod selber und wie man diese einbaut.
Wir brauchen die android.policy.jar Datei, die ihr in eurem /system/framework Ordner findet. Diese datei müsst ihr dekompilieren.
Wie dekompiliert man eine jar oder apk Datei?
1. Zuerst downloaded das Tool was ich unten als Anhang beigefügt habe. Als zweites natürlich entpacken und dann die android.policy.jar datei dort einfügen wo ihr das tool entpackt habt.
2. Jetzt drückt ihr "Shift + Rechte Maustaste" in einem freien feld dort wo ihr das Tool entpackt habt und dann geht ihr auf "Eingabeaufforderung hier öffnen".
3. Hier tippt ihr ein: apktool d android.policy.jar
Danach kurz warten, bis das Apktool die Datei dekompiliert und danach solltet ihr im selben Verzeichnis einen neuen Ordner vorfinden namens "android.policy.jar.out". Hier befinden sich nun alle dateien im dekompilierten Zustand der android.policy.jar
Nachdem die datei dekompiliert ist, sucht ihr die datei KeyguardViewMediator.smali , die sich in dem android.policy.jar.out\smali\com\android\internal\policy\impl Ordner befindet.
Diese Datei mit z.B. Notepad++ öffnen und folgende Veränderungen in Blau einfügen:
1. Damit man später den "ZeroWakeLag" Wakelock identifizieren kann und damit man sehen kann, was das Handy wachhält, folgendes suchen und das in blau einfügen:
2. Wakelock initialisieren:
3. Dieser Schritt fügt einen permanenten Wakelock ein, wenn der Bildschirm ausgeht.
4. Der vierte und letzte Schritt entfernt den Wakelock, wenn der Bildschirm wieder angeht:
Das wars, jetzt müssen wir den veränderten android.policy.jar.out Ordner wieder in die android.policy.jar kompilieren. Dazu löscht ihr eure originale android.policy.jar Datei aus dem Apktool Ordner, da dies ja noch die alte datei ist, die ihr ersetzen wollt. Danach wieder wie oben beschrieben, die Eingabeaufforderung in dem Pfad des Apktools öffnen und folgendes eintippen: apktool b android.policy.jar.out android.policy.jar
Nun wieder ein wenig warten und dann erscheint schon eure modifizierte android.policy.jar Datei, die ihr mit der alten im /system/framework Ordner ersetzen könnt. Hier ist es am besten aus der Datei eine flashbare zip zu machen, die sich dann mit CWM Recovery flashen lässt. Ob ihr die Datei einfach im laufenden Betrieb ersetzen könnt, habe ich nicht ausprobiert.
Ich habe den Code nicht geschrieben, sondern habe lediglich die Anleitung ins deutsche übersetzt. Danke an mikeyxda aus dem XDA Developers Forum. Die Anleitung ist ursprünglich für das Note 2 geschrieben worden (siehe Quelle), aber funktioniert auch auf dem S3. Ich habe es mit der UltimaROM v.11 ausgetestet. Ob es mit AOSP sprich CyanogenMod funktioniert, weiß ich nicht.
Quelle: [GUIDE] Eliminate Screen Wake Lag - xda-developers
Mit dieser Anleitung habt ihr keine Verzögerung mehr, sodass der Bildschirm sofort angeht, nachdem ihr die Powertaste gedrückt habt. Dies wird mit dem Einbau eines Wakelocks erreicht, der das Smartphone wachhält, sodass das Handy nicht in den Deep Sleep modus verfallen kann, was im normalfall schon nach etwa einer Sekunde passiert, nachdem der Bildschirm aus ist.
Dies kann man natürlich negativ sehen, aber der Entwickler der Mod erklärt, dass das Smartphone sowieso bis zu über hundert mal pro Stunde aufwacht aufgrund von z.B. Navigations-Apps (Google Maps), Push-Notifications usw., sodass diese Mod sogar für manche einen positiven Effekt auf den Akku hat, weil das Handy nicht erst aus dem Deep Sleep Modus kommen muss für diese Services. Es sei aber gesagt, dass es für jeden anders sein kann.
So nun aber zu der Mod selber und wie man diese einbaut.
Wir brauchen die android.policy.jar Datei, die ihr in eurem /system/framework Ordner findet. Diese datei müsst ihr dekompilieren.
Wie dekompiliert man eine jar oder apk Datei?
1. Zuerst downloaded das Tool was ich unten als Anhang beigefügt habe. Als zweites natürlich entpacken und dann die android.policy.jar datei dort einfügen wo ihr das tool entpackt habt.
2. Jetzt drückt ihr "Shift + Rechte Maustaste" in einem freien feld dort wo ihr das Tool entpackt habt und dann geht ihr auf "Eingabeaufforderung hier öffnen".
3. Hier tippt ihr ein: apktool d android.policy.jar
Danach kurz warten, bis das Apktool die Datei dekompiliert und danach solltet ihr im selben Verzeichnis einen neuen Ordner vorfinden namens "android.policy.jar.out". Hier befinden sich nun alle dateien im dekompilierten Zustand der android.policy.jar
Nachdem die datei dekompiliert ist, sucht ihr die datei KeyguardViewMediator.smali , die sich in dem android.policy.jar.out\smali\com\android\internal\policy\impl Ordner befindet.
Diese Datei mit z.B. Notepad++ öffnen und folgende Veränderungen in Blau einfügen:
1. Damit man später den "ZeroWakeLag" Wakelock identifizieren kann und damit man sehen kann, was das Handy wachhält, folgendes suchen und das in blau einfügen:
Code:
.field private mWakeLock:Landroid/os/PowerManager$WakeLock;
[COLOR="Blue"].field private mZeroWakeLag:Landroid/os/PowerManager$WakeLock;[/COLOR]
.field private mWakelockSequence:I
2. Wakelock initialisieren:
Code:
const-string v2, "keyguardWakeAndHandOff"
invoke-virtual {v0, v1, v2}, Landroid/os/PowerManager;->newWakeLock(ILjava/lang/String;)Landroid/os/PowerManager$WakeLock;
move-result-object v0
iput-object v0, p0, Lcom/android/internal/policy/impl/KeyguardViewMediator;->mWakeAndHandOff:Landroid/os/PowerManager$WakeLock;
.line 314
iget-object v0, p0, Lcom/android/internal/policy/impl/KeyguardViewMediator;->mWakeAndHandOff:Landroid/os/PowerManager$WakeLock;
const/4 v1, 0x0
invoke-virtual {v0, v1}, Landroid/os/PowerManager$WakeLock;->setReferenceCounted(Z)V
[COLOR="Blue"]iget-object v0, p0, Lcom/android/internal/policy/impl/KeyguardViewMediator;->mPM:Landroid/os/PowerManager;
const/4 v1, 0x1
const-string v2, "ZeroWakeLag"
invoke-virtual {v0, v1, v2}, Landroid/os/PowerManager;->newWakeLock(ILjava/lang/String;)Landroid/os/PowerManager$WakeLock;
move-result-object v0
iput-object v0, p0, Lcom/android/internal/policy/impl/KeyguardViewMediator;->mZeroWakeLag:Landroid/os/PowerManager$WakeLock;
iget-object v0, p0, Lcom/android/internal/policy/impl/KeyguardViewMediator;->mZeroWakeLag:Landroid/os/PowerManager$WakeLock;
const/4 v1, 0x0
invoke-virtual {v0, v1}, Landroid/os/PowerManager$WakeLock;->setReferenceCounted(Z)V[/COLOR]
.line 316
new-instance v7, Landroid/content/IntentFilter;
3. Dieser Schritt fügt einen permanenten Wakelock ein, wenn der Bildschirm ausgeht.
Code:
.method public onScreenTurnedOff(I)V
.locals 30
.parameter "why"
.prologue
.line 400
[COLOR="Blue"]move-object/from16 v0, p0
iget-object v1, v0, Lcom/android/internal/policy/impl/KeyguardViewMediator;->mZeroWakeLag:Landroid/os/PowerManager$WakeLock;
invoke-virtual {v1}, Landroid/os/PowerManager$WakeLock;->acquire()V[/COLOR]
monitor-enter p0
.line 401
const/16 v26, 0x0
:try_start_0
move/from16 v0, v26
move-object/from16 v1, p0
iput-boolean v0, v1, Lcom/android/internal/policy/impl/KeyguardViewMediator;->mScreenOn:Z
4. Der vierte und letzte Schritt entfernt den Wakelock, wenn der Bildschirm wieder angeht:
Code:
.method public onScreenTurnedOn(Lcom/android/internal/policy/impl/KeyguardViewManager$ShowListener;)V
.locals 3
.parameter "showListener"
.prologue
.line 545
monitor-enter p0
.line 546
[COLOR="Blue"]iget-object v1, p0, Lcom/android/internal/policy/impl/KeyguardViewMediator;->mZeroWakeLag:Landroid/os/PowerManager$WakeLock;
invoke-virtual {v1}, Landroid/os/PowerManager$WakeLock;->release()V[/COLOR]
const/4 v0, 0x1
:try_start_0
iput-boolean v0, p0, Lcom/android/internal/policy/impl/KeyguardViewMediator;->mScreenOn:Z
Das wars, jetzt müssen wir den veränderten android.policy.jar.out Ordner wieder in die android.policy.jar kompilieren. Dazu löscht ihr eure originale android.policy.jar Datei aus dem Apktool Ordner, da dies ja noch die alte datei ist, die ihr ersetzen wollt. Danach wieder wie oben beschrieben, die Eingabeaufforderung in dem Pfad des Apktools öffnen und folgendes eintippen: apktool b android.policy.jar.out android.policy.jar
Nun wieder ein wenig warten und dann erscheint schon eure modifizierte android.policy.jar Datei, die ihr mit der alten im /system/framework Ordner ersetzen könnt. Hier ist es am besten aus der Datei eine flashbare zip zu machen, die sich dann mit CWM Recovery flashen lässt. Ob ihr die Datei einfach im laufenden Betrieb ersetzen könnt, habe ich nicht ausprobiert.
Ich habe den Code nicht geschrieben, sondern habe lediglich die Anleitung ins deutsche übersetzt. Danke an mikeyxda aus dem XDA Developers Forum. Die Anleitung ist ursprünglich für das Note 2 geschrieben worden (siehe Quelle), aber funktioniert auch auf dem S3. Ich habe es mit der UltimaROM v.11 ausgetestet. Ob es mit AOSP sprich CyanogenMod funktioniert, weiß ich nicht.
Quelle: [GUIDE] Eliminate Screen Wake Lag - xda-developers
Anhänge
Zuletzt bearbeitet: