Veloz46
29/10/12, 08:34:47
http://www.foro-nexus.com/images/Cabezal-Web-Android.png
Bueno pues aquí os voy a enseñar a los que quieren aprender y a los que les pueda interesar, meter el 4-Way reboot. (Reinicio normal, rápido, bootloader, recovery)
Necesitaremos tiempo, el Notepad++ o en caso de Linux Gedit, Pluma o similat, 7zip y una serie de paquetes que os dejo a continuación.
DESCARGA-1 (Pass: dev-puremod) (http://www.foro-nexus.com/showthread.php?tid=289&pid=2642#pid2642)
Tenemos que localizar el "android.policy.jar" de "system/framework"
Lo descompilamos de la siguiente manera:
1.Descomprimimos el .rar llamado "Herramientas"
2.Metemos el andoid.policy.jar dentro de dicha carpeta.
3.Ejecutamos el "cmd" (Terminal en Linux) del interior.
4.Escribimos lo siguiente:
apktool d android.policy.jar
Esto nos a descompilado el Jar en una careta llamada "android.policy.jar.out"
Ahora nos vamos asta "android.policy.jar.out/smali/com/android/internal/policy/impl"
Una vez hay, copiamos los archivos del rar llamado "Archivos adicionales"
Son 3 archivos que se llaman:
(las extesiones .smali es muy posible que no las veáis)
GlobalActions$10$1.smali
GlobalActions$10$2.smali
GlobalActions$10.smali
Una vez copiados estos archivos vamos en busca de los 2 que tenemos que modificar añadiendo lineas.
Los 2 archivos a modificar son llamados:
(las extesiones .smali es muy posible que no las veáis)
GlobalActions$SinglePressAction.smali
GlobalActions.smali
Vamos a por el primer archivo, en este caso empezamos por el GlobalActions (el mas fácil):
Buscamos la linea:
invoke-direct {v2, v0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$2;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
invoke-virtual {v1, v2}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
.line 228
move-object/from16 v0, p0
La realmente importante es la:
invoke-virtual {v1, v2}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
Por que debajo de esta vamos a poner lo siguente:
new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$10;
const v3, 0x10802c0
const v4, 0x104033a
move-object/from16 v0, p0
invoke-direct {v2, v0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$10;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
invoke-virtual {v1, v2}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
Quedando de la siguiente manera:
invoke-direct {v2, v0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$2;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
invoke-virtual {v1, v2}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$10;
const v3, 0x10802c0
const v4, 0x104033a
move-object/from16 v0, p0
invoke-direct {v2, v0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$10;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
invoke-virtual {v1, v2}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
.line 228
move-object/from16 v0, p0
Ahora echo esto ya puedes guardar y vamos a por el otro archivo, llamado "GlobalActions$SinglePressAction"
Ahora buscamos el siguiente fragmento:
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x40a
name = "SinglePressAction"
.end annotation
# instance fields
.field private final mIconResId:I
.field private final mMessage:Ljava/lang/CharSequence;
.field private final mMessageResId:I
Ahora atentos, entre la linea ".end annotation" y la "# instance fields" vamos a introducir el siguiente texto:
# static fields
.field protected static rebootMode:I
.field protected static final rebootOptions:[Ljava/lang/String;
Quedando así:
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x40a
name = "SinglePressAction"
.end annotation
# static fields
.field protected static rebootMode:I
.field protected static final rebootOptions:[Ljava/lang/String;
# instance fields
.field private final mIconResId:I
.field private final mMessage:Ljava/lang/CharSequence;
.field private final mMessageResId:I
Y ahora después de hacer esto nos interesa justo este ultimo.
Que vendría a ser así:
# instance fields
.field private final mIconResId:I
.field private final mMessage:Ljava/lang/CharSequence;
.field private final mMessageResId:I
# direct methods
.method protected constructor <init>(II)V
.locals 1
.parameter "iconResId"
.parameter "messageResId"
Pues atentos por que dentro de ese fragmento de texto entre la linea "# direct methods" y la linea ".method protected constructor <init>(II)V" va a ir lo siguiente
.method static constructor <clinit>()V
.registers 3
const/4 v0, 0x4
new-array v0, v0, [Ljava/lang/String;
const/4 v1, 0x0
const-string v2, "Reiniciar"
aput-object v2, v0, v1
const/4 v1, 0x1
const-string v2, "R\u00e1pido"
aput-object v2, v0, v1
const/4 v1, 0x2
const-string v2, "Bootloader"
aput-object v2, v0, v1
const/4 v1, 0x3
const-string v2, "Recovery"
aput-object v2, v0, v1
sput-object v0, Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;->rebootOptions:[Ljava/lang/String;
return-void
.end method
Quedando de la siguiente manera:
# instance fields
.field private final mIconResId:I
.field private final mMessage:Ljava/lang/CharSequence;
.field private final mMessageResId:I
# direct methods
.method static constructor <clinit>()V
.registers 3
const/4 v0, 0x4
new-array v0, v0, [Ljava/lang/String;
const/4 v1, 0x0
const-string v2, "Reiniciar"
aput-object v2, v0, v1
const/4 v1, 0x1
const-string v2, "R\u00e1pido"
aput-object v2, v0, v1
const/4 v1, 0x2
const-string v2, "Bootloader"
aput-object v2, v0, v1
const/4 v1, 0x3
const-string v2, "Recovery"
aput-object v2, v0, v1
sput-object v0, Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;->rebootOptions:[Ljava/lang/String;
return-void
.end method
.method protected constructor <init>(II)V
.locals 1
.parameter "iconResId"
.parameter "messageResId"
Y listos ya puedes guardar, volver al "cmd" (terminal en Linux) y escribir lo siguiente:
apktool b android.policy.jar.out android.policy.jar
Esto nos va a compilar un archivo llamado classes.dex dentro de "android.policy.jar.out/build/apk/classes.dex"
Ese classes.dex, tenemos que cambiarlo por el original dentro del "android.policy.jar"
Abrimos el "android.policy.jar" con el 7zip, y arrastramos el nuevo "classes.dex" dentro del "android.policy.jar"
Ahora ya tienes tu archivo preparado para meterlo en la Rom y disfrutar del 4-way reboot. ;)
http://www.foro-nexus.com/showthread.php?tid=289&pid=2642#pid2642
http://www.foro-nexus.com/showthread.php?tid=289&pid=2642#pid2642
Bueno pues aquí os voy a enseñar a los que quieren aprender y a los que les pueda interesar, meter el 4-Way reboot. (Reinicio normal, rápido, bootloader, recovery)
Necesitaremos tiempo, el Notepad++ o en caso de Linux Gedit, Pluma o similat, 7zip y una serie de paquetes que os dejo a continuación.
DESCARGA-1 (Pass: dev-puremod) (http://www.foro-nexus.com/showthread.php?tid=289&pid=2642#pid2642)
Tenemos que localizar el "android.policy.jar" de "system/framework"
Lo descompilamos de la siguiente manera:
1.Descomprimimos el .rar llamado "Herramientas"
2.Metemos el andoid.policy.jar dentro de dicha carpeta.
3.Ejecutamos el "cmd" (Terminal en Linux) del interior.
4.Escribimos lo siguiente:
apktool d android.policy.jar
Esto nos a descompilado el Jar en una careta llamada "android.policy.jar.out"
Ahora nos vamos asta "android.policy.jar.out/smali/com/android/internal/policy/impl"
Una vez hay, copiamos los archivos del rar llamado "Archivos adicionales"
Son 3 archivos que se llaman:
(las extesiones .smali es muy posible que no las veáis)
GlobalActions$10$1.smali
GlobalActions$10$2.smali
GlobalActions$10.smali
Una vez copiados estos archivos vamos en busca de los 2 que tenemos que modificar añadiendo lineas.
Los 2 archivos a modificar son llamados:
(las extesiones .smali es muy posible que no las veáis)
GlobalActions$SinglePressAction.smali
GlobalActions.smali
Vamos a por el primer archivo, en este caso empezamos por el GlobalActions (el mas fácil):
Buscamos la linea:
invoke-direct {v2, v0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$2;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
invoke-virtual {v1, v2}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
.line 228
move-object/from16 v0, p0
La realmente importante es la:
invoke-virtual {v1, v2}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
Por que debajo de esta vamos a poner lo siguente:
new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$10;
const v3, 0x10802c0
const v4, 0x104033a
move-object/from16 v0, p0
invoke-direct {v2, v0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$10;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
invoke-virtual {v1, v2}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
Quedando de la siguiente manera:
invoke-direct {v2, v0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$2;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
invoke-virtual {v1, v2}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$10;
const v3, 0x10802c0
const v4, 0x104033a
move-object/from16 v0, p0
invoke-direct {v2, v0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$10;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
invoke-virtual {v1, v2}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
.line 228
move-object/from16 v0, p0
Ahora echo esto ya puedes guardar y vamos a por el otro archivo, llamado "GlobalActions$SinglePressAction"
Ahora buscamos el siguiente fragmento:
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x40a
name = "SinglePressAction"
.end annotation
# instance fields
.field private final mIconResId:I
.field private final mMessage:Ljava/lang/CharSequence;
.field private final mMessageResId:I
Ahora atentos, entre la linea ".end annotation" y la "# instance fields" vamos a introducir el siguiente texto:
# static fields
.field protected static rebootMode:I
.field protected static final rebootOptions:[Ljava/lang/String;
Quedando así:
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x40a
name = "SinglePressAction"
.end annotation
# static fields
.field protected static rebootMode:I
.field protected static final rebootOptions:[Ljava/lang/String;
# instance fields
.field private final mIconResId:I
.field private final mMessage:Ljava/lang/CharSequence;
.field private final mMessageResId:I
Y ahora después de hacer esto nos interesa justo este ultimo.
Que vendría a ser así:
# instance fields
.field private final mIconResId:I
.field private final mMessage:Ljava/lang/CharSequence;
.field private final mMessageResId:I
# direct methods
.method protected constructor <init>(II)V
.locals 1
.parameter "iconResId"
.parameter "messageResId"
Pues atentos por que dentro de ese fragmento de texto entre la linea "# direct methods" y la linea ".method protected constructor <init>(II)V" va a ir lo siguiente
.method static constructor <clinit>()V
.registers 3
const/4 v0, 0x4
new-array v0, v0, [Ljava/lang/String;
const/4 v1, 0x0
const-string v2, "Reiniciar"
aput-object v2, v0, v1
const/4 v1, 0x1
const-string v2, "R\u00e1pido"
aput-object v2, v0, v1
const/4 v1, 0x2
const-string v2, "Bootloader"
aput-object v2, v0, v1
const/4 v1, 0x3
const-string v2, "Recovery"
aput-object v2, v0, v1
sput-object v0, Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;->rebootOptions:[Ljava/lang/String;
return-void
.end method
Quedando de la siguiente manera:
# instance fields
.field private final mIconResId:I
.field private final mMessage:Ljava/lang/CharSequence;
.field private final mMessageResId:I
# direct methods
.method static constructor <clinit>()V
.registers 3
const/4 v0, 0x4
new-array v0, v0, [Ljava/lang/String;
const/4 v1, 0x0
const-string v2, "Reiniciar"
aput-object v2, v0, v1
const/4 v1, 0x1
const-string v2, "R\u00e1pido"
aput-object v2, v0, v1
const/4 v1, 0x2
const-string v2, "Bootloader"
aput-object v2, v0, v1
const/4 v1, 0x3
const-string v2, "Recovery"
aput-object v2, v0, v1
sput-object v0, Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;->rebootOptions:[Ljava/lang/String;
return-void
.end method
.method protected constructor <init>(II)V
.locals 1
.parameter "iconResId"
.parameter "messageResId"
Y listos ya puedes guardar, volver al "cmd" (terminal en Linux) y escribir lo siguiente:
apktool b android.policy.jar.out android.policy.jar
Esto nos va a compilar un archivo llamado classes.dex dentro de "android.policy.jar.out/build/apk/classes.dex"
Ese classes.dex, tenemos que cambiarlo por el original dentro del "android.policy.jar"
Abrimos el "android.policy.jar" con el 7zip, y arrastramos el nuevo "classes.dex" dentro del "android.policy.jar"
Ahora ya tienes tu archivo preparado para meterlo en la Rom y disfrutar del 4-way reboot. ;)
http://www.foro-nexus.com/showthread.php?tid=289&pid=2642#pid2642
http://www.foro-nexus.com/showthread.php?tid=289&pid=2642#pid2642