[HOW-TO][MOD][MIUI 4] 3-way Reboot Options - Android Software/Hacking General [Developers Only]

{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
This is a mod that will add three options to the reboot menu of MIUI 4. It is based on the 4-way reboot mod for MIUI 2.x by roenano with my modifications. In summary, this is what you'll get after following the how-to:
- a deodexed MIUI 4 ROM
- basic knowledge of how to use smali/baksmali tools
- basic knowledge of how smali code works is a plus
- a good text editor e.g. Notepad++ or Sublime Text 2
- some "ROM modder" intuition and ability to adapt when things do not go exactly like what the how-to says
We're going to add and modify some smali files in android.policy.jar to redirect the original "Reboot" menu to a custom class that will display the reboot options and perform the action according to what the user has selected.
We'll have to extract the smali from android.policy.jar. I'm going to assume that you already know how to use smali/baksmali. The only suggestion is you should specify the output directory when using baksmali to prevent some confusion -- especially when you're doing many things in the same working directory. The command I normally use when decompiling classes.dex extracted from android.policy.jar is as follows:
Code:
baksmali -o android.policy classes.dex
All smali files will be put in android.policy directory. After you finished editing you can issue the following command to recompile it back to classes.dex:
Code:
smali -o classes.dex android.policy
Let's assume we're working in android.policy directory from now on.
We'll start with the easy part by adding some smali files (custom classes) to the package. You can download the files here. The zip contains essentially three files as follows:
Code:
[FONT="Courier New"]MiuiGlobalActions$9.smali[/FONT]
[FONT="Courier New"]MiuiGlobalActions$9$1.smali[/FONT]
[FONT="Courier New"]MiuiGlobalActions$9$2.smali[/FONT]
First, take a look in com/android/internal/policy/impl/ directory and see if there is already a file named MiuiGlobalActions$9.smali or not. If there is no such file then you're lucky, just copy over the three files into the mentioned directory.
But if the file already exists then we'll have to change our file names so it won't override what's already there. We can do it by renaming the three above files and change $9 to the next available number e.g. $10 (actually any unused number will work, just make sure you use the same number in all three files) Then open each renamed file and replace every occurrences of MiuiGlobalActions$9 with MiuiGlobalActions$10 (or the number you used). A simple "search/replace all" in the text editor should do the trick. After that, copy over the three files into the mentioned directory.
Next we'll have to edit two smali files in order to get it working.
com/android/internal/policy/impl/MiuiGlobalActions$SinglePressAction.smali
Add the highlighted code just after .end annotation and before # instance fields
Code:
.end annotation
[COLOR="Red"]# static fields
.field protected static rebootMode:I
.field protected static final rebootOptions:[Ljava/lang/String;[/COLOR]
# instance fields
.field private mIconResId:I
Then add another highlighted code after # direct methods and before .method protected constructor <init>(II)V
Code:
# direct methods
[COLOR="Red"].method static constructor <clinit>()V
.registers 3
const/4 v0, 0x3
new-array v0, v0, [Ljava/lang/String;
const/4 v1, 0x0
const-string v2, "Normal"
aput-object v2, v0, v1
const/4 v1, 0x1
const-string v2, "Recovery"
aput-object v2, v0, v1
const/4 v1, 0x2
const-string v2, "Bootloader"
aput-object v2, v0, v1
sput-object v0, Lcom/android/internal/policy/impl/MiuiGlobalActions$SinglePressAction;->rebootOptions:[Ljava/lang/String;
return-void
.end method[/COLOR]
.method protected constructor <init>(II)V
.registers 3
.parameter "iconResId"
Then save the file. The above modifications will populate the options array used by the three files we copied earlier. Next we'll redirect the original "Reboot" menu to our custom class, this can be done by editing:
com/android/internal/policy/impl/MiuiGlobalActions.smali
In order to know which line of code to change, we'll have to find which smali is being called when the user select the original "Reboot" menu.
If you're using Linux or Cygwin, open the terminal, go to com/android/internal/policy/impl/ directory and use the following command:
Code:
grep -l reboot *.smali
If you're using Command Prompt, open it, go to the same directory and use the following command instead:
Code:
findstr /M reboot *.smali
The output should be similar to the following. There will be a file named MiuiGlobalActions$#.smali where # is some number different from the files we added earlier. In my case this number is 3.
Code:
[B]MiuiGlobalActions$3.smali[/B]
MiuiGlobalActions$9$1.smali
MiuiGlobalActions$9$2.smali
MiuiGlobalActions$9.smali
MiuiGlobalActions$SinglePressAction.smali
To make sure it's the right file that handle the reboot command, open MiuiGlobalActions$3.smali and you'll see a line similar to this:
Code:
invoke-static {v0, v1, v2}, Lcom/android/internal/app/[B]ShutdownThread;->reboot[/B](Landroid/content/Context;Ljava/lang/String;Z)V
Once we know the file name, the modification is super easy. Just search and replace MiuiGlobalActions$3 with MiuiGlobalActions$9 in com/android/internal/policy/impl/MiuiGlobalActions.smali. Remember to change $9 to the number you used if you changed the three files' names. Note that there should be only two instances to be replaced. After you finish, save the file.
That's it. Now you'll have to recompile the smali code to classes.dex, put it back into android.policy.jar, push the jar onto the phone and reboot

Reserved just in case

Thanks you, kong :-D

kong
Thank any way/
Is it possible make zip file to install this menu through recovery? Be cause I do not have idea how to work with smali files, I think I am not alone how to operate with it/ =)

toqpuk said:
kong
Thank any way/
Is it possible make zip file to install this menu through recovery? Be cause I do not have idea how to work with smali files, I think I am not alone how to operate with it/ =)
Click to expand...
Click to collapse
It's possible to provide a flashable zip for a specific version of MIUI for a specific device, but not a generic one that can be used by all devices since android.policy.jar keeps changing in each MIUI releases.
That's why I wrote a "guide" so anyone who has those "prerequisites" can apply it to the appropriate android.policy.jar

I tried this on my miui v4 rom port, but it dint work, when ever i long press my power button miui reboots. here's my edited android.policy.jar.
http://www.mediafire.com/?lw7y57yk25drdy4

If someone would like to add Quick Reboot to the menu:
Create a new file, for example: GlobalActions$12.smali:
Code:
.class Lcom/android/internal/policy/impl/GlobalActions$12;
.super Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;
.source "GlobalActions.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingMethod;
value = Lcom/android/internal/policy/impl/GlobalActions;->createDialog()Landroid/app/AlertDialog;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x0
name = null
.end annotation
# instance fields
.field final synthetic this$0:Lcom/android/internal/policy/impl/GlobalActions;
# direct methods
.method constructor <init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
.registers 4
.parameter
.parameter "x0"
.parameter "x1"
.prologue
.line 267
iput-object p1, p0, Lcom/android/internal/policy/impl/GlobalActions$12;->this$0:Lcom/android/internal/policy/impl/GlobalActions;
invoke-direct {p0, p2, p3}, Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;-><init>(II)V
return-void
.end method
# virtual methods
.method public onPress()V
.locals 6
.prologue
.line 142
invoke-static {}, Ljava/lang/Runtime;->getRuntime()Ljava/lang/Runtime;
move-result-object v3
.line 143
.local v3, localRuntime:Ljava/lang/Runtime;
const/4 v4, 0x4
new-array v0, v4, [Ljava/lang/String;
.line 144
.local v0, arrayOfString2:[Ljava/lang/String;
const/4 v4, 0x0
const-string v5, "pkill"
aput-object v5, v0, v4
.line 145
const/4 v4, 0x1
const-string v5, "-TERM"
aput-object v5, v0, v4
.line 146
const/4 v4, 0x2
const-string v5, "-f"
aput-object v5, v0, v4
.line 147
const/4 v4, 0x3
const-string v5, "system_server"
aput-object v5, v0, v4
.line 151
:try_start_0
invoke-virtual {v3, v0}, Ljava/lang/Runtime;->exec([Ljava/lang/String;)Ljava/lang/Process;
:try_end_0
.catch Ljava/io/IOException; {:try_start_0 .. :try_end_0} :catch_0
move-result-object v2
.line 158
:goto_0
return-void
.line 153
:catch_0
move-exception v1
.line 156
.local v1, e:Ljava/io/IOException;
invoke-virtual {v1}, Ljava/io/IOException;->printStackTrace()V
goto :goto_0
.end method
.method public showBeforeProvisioning()Z
.locals 1
.prologue
.line 162
const/4 v0, 0x1
return v0
.end method
.method public showDuringKeyguard()Z
.locals 1
.prologue
.line 167
const/4 v0, 0x1
return v0
.end method
called like this:
Code:
const/4 v1, 0x4
new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$12;
const v3, 0x1080410
const v4, 0x1040523
invoke-direct {v2, p0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$12;->(Lcom/android/internal/policy/impl/GlobalActions;II)V
aput-object v2, v0, v1
It requires a new busybox installation to succeed

siulmagic said:
I tried this on my miui v4 rom port, but it dint work, when ever i long press my power button miui reboots. here's my edited android.policy.jar.
http://www.mediafire.com/?lw7y57yk25drdy4
Click to expand...
Click to collapse
I believe you forgot to modify this line in MiuiGlobalActions.smali
Code:
invoke-direct {v1, p0, v2, v3}, Lcom/android/internal/policy/impl/[B]MiuiGlobalActions$3[/B];-><init>(Lcom/android/internal/policy/impl/MiuiGlobalActions;II)V

kong said:
I believe you forgot to modify this line in MiuiGlobalActions.smali
Code:
invoke-direct {v1, p0, v2, v3}, Lcom/android/internal/policy/impl/[B]MiuiGlobalActions$3[/B];-><init>(Lcom/android/internal/policy/impl/MiuiGlobalActions;II)V
Click to expand...
Click to collapse
Thanks for the tutorial.... It's work great.... lucky me there is no file use $9.... so I just copy the file and edit some smali.... thanks sir
Sent from my GT-S5670 using Tapatalk 2

AldoSebastian said:
Thanks for the tutorial.... It's work great.... lucky me there is no file use $9.... so I just copy the file and edit some smali.... thanks sir
Click to expand...
Click to collapse
Thanks for confirming that it works

can you guys check if this works on miui 2.6.22, i just tried it and the 3 way reboot menu does not come up, it just reboots the device. i dont think this is compatible anymore.
---------- Post added at 02:01 PM ---------- Previous post was at 01:58 PM ----------
disregard i edited the wrong globalpressaction smali

siulmagic said:
can you guys check if this works on miui 2.6.22, i just tried it and the 3 way reboot menu does not come up, it just reboots the device. i dont think this is compatible anymore.
---------- Post added at 02:01 PM ---------- Previous post was at 01:58 PM ----------
disregard i edited the wrong globalpressaction smali
Click to expand...
Click to collapse
I can confirm that 3way reboot mod works on my Sensation on MIUI ICS 2.6.22. It has been made from scratches using kong's how-to.

thanks for this guide.
I wanted to port this to my device but the download with the three smali files is dead (not reachable for me).
Can someone re-upload the files?
Edit: Ok, I've found an older build with those files included. Works fine. Expect the missing hot boot option

For me, the boot to RECOVERY won't work.. Can you help me to do this?

Can someone reupload files as aosp.in is off

Alberto96 said:
Can someone reupload files as aosp.in is off
Click to expand...
Click to collapse
I've found another release which included these files
zip file attached
Anyone an idea how to include Hot reboot?

I was going to ask the same thing: is it possible to include a Hot Boot option back? I compared an older android.policy.jar which included the Hot Boot option, so I could add it back by copying the same lines but I haven't tried because I saw you recently switched to 3-way instead of 4-way. I thought that newer MIUI versions just don't allow hot reboot anymore, but if it's possibile to add it back, I would love to try.

thunderteaser said:
I was going to ask the same thing: is it possible to include a Hot Boot option back? I compared an older android.policy.jar which included the Hot Boot option, so I could add it back by copying the same lines but I haven't tried because I saw you recently switched to 3-way instead of 4-way. I thought that newer MIUI versions just don't allow hot reboot anymore, but if it's possibile to add it back, I would love to try.
Click to expand...
Click to collapse
I saw some ROMs using the 4way-reboot. So I think it's still possible. But I don't know how to do it

Mod doesn't work for me, phone gets unstable and keeps rebooting (that actually happens everytime i modify a jar file, maybe doing something wrong when recompiling?)
I got the 3 way reboot menu option but it doesn't work (meaning it just reboots the phone normally)
Xperia st17i

Qns: Do u still keep the GlobalActions$3.smali?

Related

[ACS][HOW-TO][EB13]Reboot Mode

How-To Reboot Mod
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
Brought To You By MysteryEmotionz​
I would like to say thank you to all my supporters and the people that have donated.
If you would like to donate don’t hesitate and buy me a beer by clicking any of my donation links or buy me a beer in my sig.
(Donation Link)
DISCLAIMER:
We at ACSyndicate are in no way, shape, or form responsible for bricking your device. You're flashing this product at your own risk. Always back up your device. If you point your finger and try to blame us we will laugh and enjoy our beer.
Credits:
untermensch for his reference thread.
Raiderep for bring this to DI18.
Mammon for DK28.
What You'll Need:
Android SDK
Apkmanager 4.9
Smali / Basmali
Image Editor
Notepad++
7Zip
Framework-res.apk
Android.policy.jar
Instructions:
1. Decompile Framework-res.apk using apk manager
2. Navigate to framework-res.apk/res/values
3. Open up public.xml using Notepad++
4. Add this line at the end of the strings section
Code:
<public type="string" name="reboot" id="0x010404cf" />
5. Add this line at the end of the drawable section
Code:
<public type="drawable" name="reboot" id="0x01080422" />
6. Save the xml
7. Still in framework-res.apk/res/values open up strings.xml and add this at the end
Code:
<string name="reboot">Reboot</string>
8. Create a reboot icons and save it has reboot.png
9. Drag that image into framework-res.apk/res/drawable
10. Compile the framework-res.apk
Thats if for framework-res.apk no to smali
1. Open up Android.policy.jar using 7Zip and pull out classes.dex and place it where you have smali and basmali
2. run this in your command prompt (where you have adb)
Code:
java -jar baksmali.jar -o out/classes/ classes.dex
3. Navigate to out/dex/com/android/internal/policy/impl
4. Copy GlobalActions$3.smali
5. Paste the copy of GlobalAction$3.smali and rename to GlobalAction$8.smali
6. Delete Everything in side and add using Notepad++
Code:
.class Lcom/android/internal/policy/impl/GlobalActions$8;
.super Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;
.source "GlobalActions.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingMethod;
value = Lcom/android/internal/policy/impl/GlobalActions;->createDialog()Landroid/app/AlertDialog;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x0
name = null
.end annotation
# instance fields
.field final synthetic this$0:Lcom/android/internal/policy/impl/GlobalActions;
# direct methods
.method constructor <init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
.registers 4
.parameter
.parameter "x0"
.parameter "x1"
.prologue
.line 243
iput-object p1, p0, Lcom/android/internal/policy/impl/GlobalActions$8;->this$0:Lcom/android/internal/policy/impl/GlobalActions;
invoke-direct {p0, p2, p3}, Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;-><init>(II)V
return-void
.end method
# virtual methods
.method public onPress()V
.registers 3
const-string v0, "Reboot Now"
invoke-static {v0}, Landroid/os/Power;->reboot(Ljava/lang/String;)V
return-void
.end method
.method public showBeforeProvisioning()Z
.registers 2
.prologue
.line 244
const/4 v0, 0x1
return v0
.end method
.method public showDuringKeyguard()Z
.registers 2
.prologue
.line 240
const/4 v0, 0x1
return v0
.end method
7. Save
8. Now open up GlobalActions.smali and add this at line 506
Code:
aput-object v2, v0, v1
const/4 v1, 0x4
new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$8;
const v3, 0x1080422
const v4, 0x10404cf
invoke-direct {v2, p0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$8;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
9. Save
10. In you command prompt run
Code:
java -Xmx512M -jar smali.jar out/classes/ classes.dex
11.Zip up both the framework-res.apk and andoid.policy.jar in a flashable zip and flash away
If you see any errors please let me know and ill adjust the instructions. Feel free to ask for help if also need.
Please give me a nod if you include this in any of your themes or roms
Check Out Our New Home​
​http://www.acsyndicate.net/
I'm gonna add download and recovery once I figure them out for eb13
Sent from my SPH-D700 using Tapatalk
MysteryEmotionz said:
I'm gonna add download and recovery once I figure them out for eb13
Sent from my SPH-D700 using Tapatalk
Click to expand...
Click to collapse
on dameon's stock deodexed rom I was able to use quickboot to get into recovery but it wouldn't mount the sdcard for some reason. reboot and shutdown worked fine but I'm assuming it's something with the redirector not mounting the sdcard? Either way, can't wait till you got this **** goin.
I'm gonna implement the same mods I did on eclair. This will elimante the need of a app. I'm thinking of just adding recovery and forget download mode as that one isn't really needed
Sent from my SPH-D700 using Tapatalk
MysteryEmotionz said:
I'm gonna implement the same mods I did on eclair. This will elimante the need of a app. I'm thinking of just adding recovery and forget download mode as that one isn't really needed
Sent from my SPH-D700 using Tapatalk
Click to expand...
Click to collapse
Yes download mode is not needed, as for clockwork, i never got it it to redirect on eclair, hopefully the new one will direct to my orange clockwork.
MysteryEmotionz said:
I'm gonna implement the same mods I did on eclair. This will elimante the need of a app. I'm thinking of just adding recovery and forget download mode as that one isn't really needed
Sent from my SPH-D700 using Tapatalk
Click to expand...
Click to collapse
I agree, don't waste your time on download mode. Reboot, Recovery, Power Off would be perfect.
I have working CW 3.0.0.6 in my midNIGHT ROM v4.... You need the kernel from the one click and the updated recovery file for the redirector in the system/bin. The problem is that the kernel in its current form breaks auto rotate... So right now you have to choose between auto rotate or working redirector.
I pulled it in v4.1 until the kernel is updated...
9. Drag that image into framework-res.apk/res/drawable
Click to expand...
Click to collapse
Are you sure it's not drawable-hdpi? Just double checking.
TheDub said:
Are you sure it's not drawable-hdpi? Just double checking.
Click to expand...
Click to collapse
Your correct thanks for pointing that out
Sent from my SPH-D700 using Tapatalk
Unfortunately it didn't work for me
Followed the directions to the word with the exception of changing "0x1080422" to "0x1080480" in both the Smali and Drawable section of public.xml due to the battery percent mod already using this id.
Compiled both files just fine.. it boots right up. The only noticable change is the font for Phone Options has changed (gone way down in size) and the phone eventually crashes.
TheDub said:
Unfortunately it didn't work for me
Followed the directions to the word with the exception of changing "0x1080422" to "0x1080480" in both the Smali and Drawable section of public.xml due to the battery percent mod already using this id.
Compiled both files just fine.. it boots right up. The only noticable change is the font for Phone Options has changed (gone way down in size) and the phone eventually crashes.
Click to expand...
Click to collapse
Are you using a de-odexed rom as your base?
Sent from my SPH-D700 using Tapatalk
MysteryEmotionz said:
Are you using a de-odexed rom as your base?
Sent from my SPH-D700 using Tapatalk
Click to expand...
Click to collapse
Yep, sure am.
TheDub said:
Yep, sure am.
Click to expand...
Click to collapse
pm me with your google talk so we can talk live and figure out what whent wrong
Sent from my SPH-D700 using Tapatalk
Sorry don't have Google Talk currently setup excpet my personal one heh I'll get around to get that setup for dev purposes...
but here are the changes I've made.
public.xml Changes
Code:
<public type="string" name="reboot" id="0x010404cf" />
<public type="drawable" name="reboot" id="0x01080480" />
strings.xml Changes
Code:
<string name="reboot">Reboot</string>
ClobalActions$8.smali
Code:
.class Lcom/android/internal/policy/impl/GlobalActions$8;
.super Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;
.source "GlobalActions.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingMethod;
value = Lcom/android/internal/policy/impl/GlobalActions;->createDialog()Landroid/app/AlertDialog;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x0
name = null
.end annotation
# instance fields
.field final synthetic this$0:Lcom/android/internal/policy/impl/GlobalActions;
# direct methods
.method constructor <init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
.registers 4
.parameter
.parameter "x0"
.parameter "x1"
.prologue
.line 243
iput-object p1, p0, Lcom/android/internal/policy/impl/GlobalActions$8;->this$0:Lcom/android/internal/policy/impl/GlobalActions;
invoke-direct {p0, p2, p3}, Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;-><init>(II)V
return-void
.end method
# virtual methods
.method public onPress()V
.registers 3
const-string v0, "Reboot Now"
invoke-static {v0}, Landroid/os/Power;->reboot(Ljava/lang/String;)V
return-void
.end method
.method public showBeforeProvisioning()Z
.registers 2
.prologue
.line 244
const/4 v0, 0x1
return v0
.end method
.method public showDuringKeyguard()Z
.registers 2
.prologue
.line 240
const/4 v0, 0x1
return v0
.end method
GlobalActions.smali (Lines 506-516)
Code:
aput-object v2, v0, v1
const/4 v1, 0x4
new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$8;
const v3, 0x1080480
const v4, 0x10404cf
invoke-direct {v2, p0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$8;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
From my phone it looks like you did everything right. I'll attach a copy of my globalactions$8.smali and globalactions.smali for you to compare. Honestly I think I may have missed a step in my how-to
Sent from my SPH-D700 using Tapatalk
TheDub said:
Sorry don't have Google Talk currently setup excpet my personal one heh I'll get around to get that setup for dev purposes...
but here are the changes I've made.
public.xml Changes
Code:
<public type="string" name="reboot" id="0x010404cf" />
<public type="drawable" name="reboot" id="0x01080480" />
strings.xml Changes
Code:
<string name="reboot">Reboot</string>
ClobalActions$8.smali
Code:
.class Lcom/android/internal/policy/impl/GlobalActions$8;
.super Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;
.source "GlobalActions.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingMethod;
value = Lcom/android/internal/policy/impl/GlobalActions;->createDialog()Landroid/app/AlertDialog;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x0
name = null
.end annotation
# instance fields
.field final synthetic this$0:Lcom/android/internal/policy/impl/GlobalActions;
# direct methods
.method constructor <init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
.registers 4
.parameter
.parameter "x0"
.parameter "x1"
.prologue
.line 243
iput-object p1, p0, Lcom/android/internal/policy/impl/GlobalActions$8;->this$0:Lcom/android/internal/policy/impl/GlobalActions;
invoke-direct {p0, p2, p3}, Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;-><init>(II)V
return-void
.end method
# virtual methods
.method public onPress()V
.registers 3
const-string v0, "Reboot Now"
invoke-static {v0}, Landroid/os/Power;->reboot(Ljava/lang/String;)V
return-void
.end method
.method public showBeforeProvisioning()Z
.registers 2
.prologue
.line 244
const/4 v0, 0x1
return v0
.end method
.method public showDuringKeyguard()Z
.registers 2
.prologue
.line 240
const/4 v0, 0x1
return v0
.end method
GlobalActions.smali (Lines 506-516)
Code:
aput-object v2, v0, v1
const/4 v1, 0x4
new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$8;
const v3, 0x1080480
const v4, 0x10404cf
invoke-direct {v2, p0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$8;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
Click to expand...
Click to collapse
I did the same but I kept getting errors when I put the last java command. It kept saying character not recognized a bunch of times. Any help?
rcastel2 said:
I did the same but I kept getting errors when I put the last java command. It kept saying character not recognized a bunch of times. Any help?
Click to expand...
Click to collapse
Try this to compile the jar.
java -Xmx512M -jar smali.jar out/classes/ -o new-classes.dex
Sent from my SPH-D700 using Tapatalk

[HOWTO]Implement Swipe to Remove Notification

Hi there, I want to share this tutorial for implementing Swipe-to-Remove Notification feature found in CyanogenMod to stock ROM (Gingerbread or earlier ROM). Sure it will be available on ICS but for those who like to add one to their custom ROM here's how Currently i don't know to whom should i give credit to, if anybody knows please post below and i'll add the link for the original modder. Thanks to:
1. like-p for help showing me what files to be edited
2. LeoMar75 for some info on how to control Stub switch case
This mod is based on Sony Ericsson Xperia Ray, so take care when adding to another device, some code might be different though so no direct copy paste, please learn some of the line first.
PS: For Froyo mod, please follow Jason-EX here
Requirement:
1. decompiled Framework.jar with Baksmali manager
2. decompiled SystemUI.apk with APK Multi Tool
3. Some Basic understanding about editing xml file and smali code.
4. WinMerge or other comparison tool (to better editing and comparing with my sample file)
5. Backup the framework.jar and SystemUI.apk first!
Files to be edited:
in SystemUI.apk
res/anim/
res/layout/status_bar_latest_event.xml
res/values/public.xml
smali/com/android/systemui/statusbar/LatestItemContainer$1.smali
smali/com/android/systemui/statusbar/LatestItemContainer.smali
smali/com/android/systemui/statusbar/StatusBarService$7.smali (or depends on your numbering, could be $8 or larger)
smali/com/android/systemui/statusbar/StatusBarService.smali
in framework.jar:
smali/com/android/internal/statusbar/IStatusBarService$Stub$Proxy.smali
smali/com/android/internal/statusbar/IStatusBarService$Stub.smali
smali/com/android/internal/statusbar/IStatusBarService.smali
UPDATE: This is the additional guide for other device when editing StatusBarService.smali. See here:
1. HTC based
2. Samsung based
Alright, let's mod one by one
1. Editing SystemUI.apk
1.1 Editing res/anim
We are registering anim object here, so swipe animation can be done.
Create folder anim (if not exists yet) inside /res folder
Create 2 file named slide_out_left_basic.xml and slide_out_right_basic.xml inside res/anim folder
for slide_out_left_basic.xml, edit the file and fill with this
Code:
<?xml version="1.0" encoding="utf-8"?>
<translate android:duration="@android:integer/config_mediumAnimTime" android:fromXDelta="0.0" android:toXDelta="-100.0%p"
xmlns:android="http://schemas.android.com/apk/res/android" />
for slide_out_right_basic.xml, edit the file and fill with this
Code:
<?xml version="1.0" encoding="utf-8"?>
<translate android:duration="@android:integer/config_mediumAnimTime" android:fromXDelta="0.0" android:toXDelta="100.0%p"
xmlns:android="http://schemas.android.com/apk/res/android" />
Save both
Update: Mirko ddd (&shoman94 have pointed that out before but i have no idea where to change, sorry mate) have given me the tip to improve the gesture. read his post here Thanks mate, both of you!
1.2 Editing res/layout/status_bar_latest_event.xml
We are replacing LinearLayout object used in StatusBar with LatestItemContainer here, so notification can be removed. We handle the Styling first by editing this .xml first. Here are the steps:
Change the code from Original code to this (change the bold one)
Code:
<?xml version="1.0" encoding="utf-8"?>
<[B]com.android.systemui.statusbar.LatestItemContainer [/B]android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="65.0sp"
xmlns:android="http://schemas.android.com/apk/res/android">
<com.android.systemui.statusbar.LatestItemView android:id="@id/content" android:background="@android:drawable/status_bar_item_background" android:paddingRight="6.0sp" android:focusable="true" android:clickable="true" android:layout_width="fill_parent" android:layout_height="64.0sp" android:shadowColor="#ff000000" android:shadowDx="0.0" android:shadowDy="1.0" android:shadowRadius="2.0" />
<View android:background="@drawable/divider_horizontal_light_opaque" android:layout_width="fill_parent" android:layout_height="wrap_content" />
<[B]/com.android.systemui.statusbar.LatestItemContainer[/B]>
Save
1.3 Editing res/values/public.xml
This one is for registering anim file that we made on step 1.1 to be available publicly and to be recognized in .smali program. Here are the steps:
Recompile your apk after putting anim file into /res folder
Decompile again the resulting apk
Inside /res/values/public.xml, you'll found something like this:
Code:
<resources>
.
.
.
[B]
<public type="anim" name="slide_out_left_basic" id="0x7f0c0000" />
<public type="anim" name="slide_out_right_basic" id="0x7f0c0001" />
[/B]
</resources>
[*]Remember the ID for both anim lines. This will be applied again on the step 1.4
1.4 Adding smali/com/android/systemui/statusbar/LatestItemContainer$1.smali and smali/com/android/systemui/statusbar/LatestItemContainer.smali
This is the class of LatestItemContainer that will be used to handle the notification list instead of LatestItemView. Here are the steps:
Please download from the attachment
insert the files inside to mentioned folder above
Inside LatestItemContainer$1.smali, there's an id that references the anim from step1.2. please edit it if you have different id for anim left or anim from previous step.
Code:
.line 53
:cond_0
const/high16 v1, [B]0x7f0c[/B]
and
Code:
.line 51
const v1, [B]0x7f0c0001[/B]
1.5 Add smali/com/android/systemui/statusbar/StatusBarService$7.smali (or depends on your existing framework numbering, could be $8 or larger)
This is additional function for StatusBarService to handle onClearNotification function. Here are the steps:
Extract the StatusBarService$7.smali from attachment
If StatusBarService$7.smali does not exist before, just place it inside, if not, skip this step.
If StatusBarService$7.smali exists, Please rename the file to StatusBarService$8.smali (or whatever higher number that is unused) and rename all the line inside the file from
Code:
StatusBarService$7
to
Code:
StatusBarService$8
1.6 Edit smali/com/android/systemui/statusbar/StatusBarService.smali
UPDATE: This is the additional guide for other device when editing StatusBarService.smali. See here:
1. Generic java readout
2. HTC based
3. Samsung based
This is the file that generate NotificationView. Please take care of the changes here more carefully because there might be some differences between vendors in this file. Here are the steps:
Open StatusBarService.smali and find this function
Code:
.method makeNotificationView(Lcom/android/internal/statusbar/StatusBarNotification;Landroid/view/ViewGroup;)[Landroid/view/View;
Find this code in the makeNotificationView function body:
Code:
invoke-virtual {v0, v1, v2, v3}, Landroid/view/LayoutInflater;->inflate(ILandroid/view/ViewGroup;Z)Landroid/view/View;
move-result-object v18
const v4, 0x7f0b0014
move-object/from16 v0, v18
move v1, v4
invoke-virtual {v0, v1}, Landroid/view/View;->findViewById(I)Landroid/view/View;
move-result-object v10
Insert the bold code below between the existing code:
Code:
invoke-virtual {v0, v1, v2, v3}, Landroid/view/LayoutInflater;->inflate(ILandroid/view/ViewGroup;Z)Landroid/view/View;
move-result-object v18
[B] check-cast v18, Lcom/android/systemui/statusbar/LatestItemContainer;
.line 516
.local v18, row:Lcom/android/systemui/statusbar/LatestItemContainer;
move-object/from16 v0, v16
iget v0, v0, Landroid/app/Notification;->flags:I
move v4, v0
and-int/lit8 v4, v4, 0x2
if-nez v4, :cond_swno
move-object/from16 v0, v16
iget v0, v0, Landroid/app/Notification;->flags:I
move v4, v0
and-int/lit8 v4, v4, 0x20
if-nez v4, :cond_swno
new-instance v4, Lcom/android/systemui/statusbar/StatusBarService$7;
move-object v0, v4
move-object/from16 v1, p0
move-object/from16 v2, p1
invoke-direct {v0, v1, v2}, Lcom/android/systemui/statusbar/StatusBarService$7;-><init>(Lcom/android/systemui/statusbar/StatusBarService;Lcom/android/internal/statusbar/StatusBarNotification;)V
move-object/from16 v0, v18
move-object v1, v4
invoke-virtual {v0, v1}, Lcom/android/systemui/statusbar/LatestItemContainer;->setOnSwipeCallback(Ljava/lang/Runnable;)V
.line 735
:cond_swno[/B]
const v4, 0x7f0b0014
move-object/from16 v0, v18
move v1, v4
[B] invoke-virtual {v0, v1}, Lcom/android/systemui/statusbar/LatestItemContainer;->findViewById(I)Landroid/view/View;[/B]
move-result-object v10
Once again, change
Code:
StatusBarService$7
to
Code:
StatusBarService$8
line if you happened to have StatusBarService$8.smali as the result of renaming on the previous step.
IMPORTANT LOGIC TO BE UNDERSTOOD: This step tells the function to:
1. cast the already made View Object to LatestItemContainer instead of using LatestView class.
2. Filter if the Notification is removable or not
3. the LatestItemContainer object (v18) is assigned with onSwipeCallback(new StatusBarService$7)
Change the following (still on the same function body):
Code:
move v1, v4
invoke-virtual {v0, v1}, Landroid/view/View;->setDrawingCacheEnabled(Z)V
.line 542
const/4 v4, 0x3
to
Code:
move v1, v4
[B] invoke-virtual {v0, v1}, Lcom/android/systemui/statusbar/LatestItemContainer;->setDrawingCacheEnabled(Z)V
[/B]
.line 542
const/4 v4, 0x3
Please note:
StatusBarService.smali might be different between vendor, so please adapt with your .smali to implement the above coding.
2. Editing framework.jar
2.1 editing smali/com/android/internal/statusbar/IStatusBarService$Stub.smali
Here are the steps:
Add this code on variable declaration part inside the file
Code:
.field static final TRANSACTION_onClearAllNotifications:I = 0xb
[B].field static final TRANSACTION_onNotificationClear:I = 0xc[/B]
.field static final TRANSACTION_onNotificationClick:I = 0x9
.field static final TRANSACTION_onNotificationError:I = 0xa
If the 0xc is already used on another static value, you must change it so it remains unique.
Find this code:
Code:
.method public onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
.registers 14
.parameter "code"
.parameter "data"
.parameter "reply"
.parameter "flags"
.annotation system Ldalvik/annotation/Throws;
value = {
Landroid/os/RemoteException;
}
.end annotation
.prologue
.line 39
sparse-switch p1, :sswitch_data_124
change to
Code:
.method public onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
.registers 14
.parameter "code"
.parameter "data"
.parameter "reply"
.parameter "flags"
.annotation system Ldalvik/annotation/Throws;
value = {
Landroid/os/RemoteException;
}
.end annotation
.prologue
.line 39
[B]sparse-switch p1, :sswitch_data_13e[/B]
Insert/replace this code (it is at the end of the file):
Code:
.line 176
const/4 v0, 0x1
goto/16 :goto_7
.line 39
:sswitch_data_124
.sparse-switch
0x1 -> :sswitch_f
0x2 -> :sswitch_1c
0x3 -> :sswitch_29
0x4 -> :sswitch_42
0x5 -> :sswitch_5f
0x6 -> :sswitch_7b
0x7 -> :sswitch_8d
0x8 -> :sswitch_c7
0x9 -> :sswitch_d5
0xa -> :sswitch_ef
0xb -> :sswitch_116
0x5f4e5446 -> :sswitch_8
.end sparse-switch
to
Code:
[B]
.line 176
const/4 v0, 0x1
goto/16 :goto_7
.end local v1 #_arg0:Ljava/lang/String;
.end local v2 #_arg1:Ljava/lang/String;
.end local v3 #_arg2:I
:sswitch_124
const-string v0, "com.android.internal.statusbar.IStatusBarService"
invoke-virtual {p2, v0}, Landroid/os/Parcel;->enforceInterface(Ljava/lang/String;)V
.line 177
invoke-virtual {p2}, Landroid/os/Parcel;->readString()Ljava/lang/String;
move-result-object v1
.line 178
.restart local v1 #_arg0:Ljava/lang/String;
invoke-virtual {p2}, Landroid/os/Parcel;->readString()Ljava/lang/String;
move-result-object v2
.line 179
.restart local v2 #_arg1:Ljava/lang/String;
invoke-virtual {p2}, Landroid/os/Parcel;->readInt()I
move-result v3
.line 180
.restart local v3 #_arg2:I
invoke-virtual {p0, v1, v2, v3}, Lcom/android/internal/statusbar/IStatusBarService$Stub;->onNotificationClear(Ljava/lang/String;Ljava/lang/String;I)V
.line 181
invoke-virtual {p3}, Landroid/os/Parcel;->writeNoException()V
.line 182
const/4 v0, 0x1
goto/16 :goto_7[/B]
.line 39
:sswitch_data_13e
.sparse-switch
0x1 -> :sswitch_f
0x2 -> :sswitch_1c
0x3 -> :sswitch_29
0x4 -> :sswitch_42
0x5 -> :sswitch_5f
0x6 -> :sswitch_7b
0x7 -> :sswitch_8d
0x8 -> :sswitch_c7
0x9 -> :sswitch_d5
0xa -> :sswitch_ef
0xb -> :sswitch_116
[B]0xc -> :sswitch_124[/B]
0x5f4e5446 -> :sswitch_8
.end sparse-switch
it's important to note this
Code:
[B]0xc -> :sswitch_124[/B]
If you rename the static at the previous steps, please change the 0xc accordingly.
2.2 Editing smali/com/android/internal/statusbar/IStatusBarService$Stub$Proxy.smali
Here are the steps:
Insert these function code to the file:
Code:
.method public onNotificationClear(Ljava/lang/String;Ljava/lang/String;I)V
.registers 9
.parameter "pkg"
.parameter "tag"
.parameter "id"
.annotation system Ldalvik/annotation/Throws;
value = {
Landroid/os/RemoteException;
}
.end annotation
.prologue
.line 359
invoke-static {}, Landroid/os/Parcel;->obtain()Landroid/os/Parcel;
move-result-object v0
.line 360
.local v0, _data:Landroid/os/Parcel;
invoke-static {}, Landroid/os/Parcel;->obtain()Landroid/os/Parcel;
move-result-object v1
.line 362
.local v1, _reply:Landroid/os/Parcel;
:try_start_8
const-string v2, "com.android.internal.statusbar.IStatusBarService"
invoke-virtual {v0, v2}, Landroid/os/Parcel;->writeInterfaceToken(Ljava/lang/String;)V
.line 363
invoke-virtual {v0, p1}, Landroid/os/Parcel;->writeString(Ljava/lang/String;)V
.line 364
invoke-virtual {v0, p2}, Landroid/os/Parcel;->writeString(Ljava/lang/String;)V
.line 365
invoke-virtual {v0, p3}, Landroid/os/Parcel;->writeInt(I)V
.line 366
iget-object v2, p0, Lcom/android/internal/statusbar/IStatusBarService$Stub$Proxy;->mRemote:Landroid/os/IBinder;
const/16 v3, 0xa
const/4 v4, 0x0
invoke-interface {v2, v3, v0, v1, v4}, Landroid/os/IBinder;->transact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
.line 367
invoke-virtual {v1}, Landroid/os/Parcel;->readException()V
:try_end_21
.catchall {:try_start_8 .. :try_end_21} :catchall_28
.line 370
invoke-virtual {v1}, Landroid/os/Parcel;->recycle()V
.line 371
invoke-virtual {v0}, Landroid/os/Parcel;->recycle()V
.line 373
return-void
.line 370
:catchall_28
move-exception v2
invoke-virtual {v1}, Landroid/os/Parcel;->recycle()V
.line 371
invoke-virtual {v0}, Landroid/os/Parcel;->recycle()V
throw v2
.end method
Please inspect the code for this part:
Code:
[B]const/16 v3, 0xa[/B]
const/4 v4, 0x0
invoke-interface {v2, v3, v0, v1, v4}, Landroid/os/IBinder;->transact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
The bold one must match on one of the switch case value at the end of IStatusBarService$Stub.smali,
in my phone actually the valid one is the TRANSACTION_onNotificationError (0xa) so if your NotificationError is not 0xa but 0xb for example, please change the bold one to 0xb
Save
2.3 editing smali/com/android/internal/statusbar/IStatusBarService.smali
Insert this function code to the file. Here are the steps:
Insert these function code to the file:
Code:
.method public abstract onNotificationClear(Ljava/lang/String;Ljava/lang/String;I)V
.annotation system Ldalvik/annotation/Throws;
value = {
Landroid/os/RemoteException;
}
.end annotation
.end method
Save
There you have it AFAIK, the files that you need to take care more than others are:
1. smali/com/android/systemui/statusbar/StatusBarService.smali
2. res/values/public.xml
The rest can be applied from the attachment below directly. Ok that's all, after you are done, compile both SystemUI.apk and Framework.jar.
How to Compile the right way?
1. SystemUI.apk ->
Compile with APK Multi Tool, press y and y twice with all the requested input,
delete modified file from keep folder, and after that continue compiling.
Copy from original APK the META-INF and AndroidManifest.xml to the unsignedSystemUI.apk
rename unsignedSystemUI.apk to signedSystemUI.apk
select Zipalign from APK Multi Tool to optimize apk.
Rename to SystemUI.apk (move the original one just in case)
2. framework.jar ->
Smali inside Baksmali Manager
Replace classes.dex inside framework.jar with the generated one.
and apply on your phone.
Hope this helps you (programmer ofc, not end user ) to implement on your device.
G'day!
Mate, thank you so much for this - I have been trying to figure it out for our ROM for weeks LOL I'm going to give it a try this evening and I'll let you know if I get it! Thanks again
Dunc001 said:
Mate, thank you so much for this - I have been trying to figure it out for our ROM for weeks LOL I'm going to give it a try this evening and I'll let you know if I get it! Thanks again
Click to expand...
Click to collapse
Ok let me know mate
ill try it on my SGY
Looks fun! great post
tommytomatoe said:
Looks fun! great post
Click to expand...
Click to collapse
Updated step, to give you some warning about StatusBarService$7 naming convention
definitely gonna give this a try!!
great akaka.try it soon.
did u know how to port ICS layout to stock rom? can u write a tut?
this will be great!!
nvt992 said:
great akaka.try it soon.
did u know how to port have ICS layout to stock rom? can u write a tut?
this will be great!!
Click to expand...
Click to collapse
What layout? Do you mean ICS launcher layout or..?
no.see my attach
nvt992 said:
no.see my attach
Click to expand...
Click to collapse
Well do you have the original link? First, i know nothing about that, so i should learn first. and secondly, it's more about theme editing, so i think it's more about editing XML inside SystemUI.apk rather than coding a .smali like above. Thirdly, the shortcut for setting in ICS IMHO is not as efficient as Power Widget Status Bar.
hansip87 said:
Well do you have the original link? First, i know nothing about that, so i should learn first. and secondly, it's more about theme editing, so i think it's more about editing XML inside SystemUI.apk rather than coding a .smali like above. Thirdly, the shortcut for setting in ICS IMHO is not as efficient as Power Widget Status Bar.
Click to expand...
Click to collapse
this is for cm7
patch http://forum.xda-developers.com/showthread.php?t=1324924
or original theme
http://forum.xda-developers.com/showthread.php?t=1334922
hope u can do it
nvt992 said:
this is for cm7
patch http://forum.xda-developers.com/showthread.php?t=1324924
or original theme
http://forum.xda-developers.com/showthread.php?t=1334922
hope u can do it
Click to expand...
Click to collapse
Well ok thanks but don't count on me ok because i am currently researching for 2G/3G toggle button for PowerWidget, this one is not that high on my list, but you never know..
ok thank you
where can i get Baksmali manager?
lasmaty07 said:
where can i get Baksmali manager?
Click to expand...
Click to collapse
Check back later mate, just uploading right now because of on the original link, it's dead. I'll upload it for us all to share
EDIT: Uploaded. Click Baksmali Manager link on the first page to download. APK Multi Tool can be found on the same parent thread (Hacking General)
Done, but get this error when recompiling .apk
Code:
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Users\me\Desktop\folder>apktool.bat b -f -d out
I: Smaling...
Exception in thread "main" brut.androlib.AndrolibException: Could not smali file
: [email protected]
at brut.androlib.src.DexFileBuilder.addSmaliFile(Unknown Source)
at brut.androlib.src.DexFileBuilder.addSmaliFile(Unknown Source)
at brut.androlib.src.SmaliBuilder.buildFile(Unknown Source)
at brut.androlib.src.SmaliBuilder.build(Unknown Source)
at brut.androlib.src.SmaliBuilder.build(Unknown Source)
at brut.androlib.Androlib.buildSourcesSmali(Unknown Source)
at brut.androlib.Androlib.buildSources(Unknown Source)
at brut.androlib.Androlib.build(Unknown Source)
at brut.androlib.Androlib.build(Unknown Source)
at brut.apktool.Main.cmdBuild(Unknown Source)
at brut.apktool.Main.main(Unknown Source)
Tried to do it manually like this and using apk multitool, but same error in log.
even tried to compile just after decompiling but that's no help.. same error
Any help?
jaggyjags said:
Done, but get this error when recompiling .apk
Code:
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Users\me\Desktop\folder>apktool.bat b -f -d out
I: Smaling...
Exception in thread "main" brut.androlib.AndrolibException: Could not smali file
: [email protected]
at brut.androlib.src.DexFileBuilder.addSmaliFile(Unknown Source)
at brut.androlib.src.DexFileBuilder.addSmaliFile(Unknown Source)
at brut.androlib.src.SmaliBuilder.buildFile(Unknown Source)
at brut.androlib.src.SmaliBuilder.build(Unknown Source)
at brut.androlib.src.SmaliBuilder.build(Unknown Source)
at brut.androlib.Androlib.buildSourcesSmali(Unknown Source)
at brut.androlib.Androlib.buildSources(Unknown Source)
at brut.androlib.Androlib.build(Unknown Source)
at brut.androlib.Androlib.build(Unknown Source)
at brut.apktool.Main.cmdBuild(Unknown Source)
at brut.apktool.Main.main(Unknown Source)
Tried to do it manually like this and using apk multitool, but same error in log.
even tried to compile just after decompiling but that's no help.. same error
Any help?
Click to expand...
Click to collapse
APKTools is a bit outdated and i'm afraid some incompatibilites with Google SDK might be the source of the problem. search APK Multi Tools and use that one instead with SDK release 16 and up.
Hello, and thanks for the how-to!
Sadly I couldn't get it to work on my phone (Motorola Atrix 2). Some of the smali files were pretty different... I tried my best but there were definitely moments when I wasn't sure if I was doing the correct thing... SystemUI won't compile.
Hi, all. Seems the statusbarservice.smali is very different from each other. So to help you all, this is the java code that should give you a better understanding. Please read here https://github.com/nadlabak/android...m/android/server/status/StatusBarService.java
Sent from my ST18i using XDA App

[GUIDE][DEVELOPMENT]EPM / 4-Way Boot Redux

Introduction
The EPM tweak by untermensch (linked here) is admittedly a difficult mod, until evanlocked graciously provided us with a tutorial of his 4-way boot tweak (linked here), originally given to us by kahvitahra (linked here). I have decided to make my own version of the above tweaks by applying the concepts the above developers gave to us, just by modifying framework-res.apk and android.policy.jar.
Scope
This EPM tweak can easily be applied to stock, deodexed versions of the Galaxy Y firmware (latest incarnation of which is now DXLJ1). By this, I mean the power menu is still pristine with no EPM hacks whatsoever. Of course, it might also work with ROMs with EPM/4-way boot hacks already in place, with some modifications to the code which I will not be touching here.
This EPM tweak may also work with stock deodexed versions of other phones. However, I have not personally tested it. You may try this guide but please do so at your own risk.
Liability
I will not be held liable if you should brick your phone after following this guide. Having said so, please proceed at your own risk. As a precaution, please perform a nandroid backup of your phone, in case something goes wrong.
Requirements
Apktool
Framework-res.apk
Android.policy.jar
Notepad++
Winrar/7zip
Common sense and lots of patience.
Preparation
Download the archive needed for this tweak (View attachment bums_epm_files.zip). Extract its contents to any folder of your choice. You should have the following files inside the archive:
GlobalActions$99$1.smali
GlobalActions$99$2.smali
GlobalActions$99.smali
ic_bum_restart.png
Prepare the work folder where you will be reverse-engineering the framework files. I created a C:\temp\epm folder for this purpose.
Pull framework-res.apk and android.policy.jar from the /system/framework/ folder of your phone. You can do this with root explorer. Don’t ask me how.
Copy the files you pulled from step 2 into the folder you prepared in step 1.
Open a command line and issue a “cd \your_work_folder” command to go to your work folder. If you are following my example in step 1, the correct command will be “cd \temp\epm”. Don’t ask me if you should press the enter key at the end of that command.
Reversing framework-res.apk
Decompile framework-res.apk with “apktool d –f framework-res.apk” from the command line.
Open framework-res\res\values\string.xml with notepad++ and insert the following line at the end of the file:
Code:
[COLOR="Blue"]<string [/COLOR][COLOR="Red"]name[/COLOR]=[COLOR="Indigo"]"bum_restart"[/COLOR]>Restart[COLOR="Blue"]</string>[/COLOR]
Copy ic_bum_restart.png and place it inside the framework-res\res\drawable-ldpi folder.
Compile framework-res with “apktool b –f framework-res.apk”. Your framework-res folder should now have build and dist folders inside.
Change to the framework-res/dist folder (cd framework-res/dist) and decompile the framework-res.apk.
Open framework-res/dist/framework-res/res/values/public.xml with notepad++. Search for the name of the string you created in step 2 (“bum_restart”). Copy the search result line into a new notepad++ document.
Still in public.xml, search for “ic_bum_restart”. Again, copy the search result line into your notepad++ document. You should then have the following lines:
Code:
[COLOR="Blue"]<public [COLOR="Red"]type[/COLOR]=[COLOR="Purple"]"string"[/COLOR] [COLOR="Red"]name[/COLOR]=[COLOR="Purple"]"bum_restart"[/COLOR] [COLOR="Red"]id[/COLOR]=[COLOR="Purple"]"0x010404d3"[/COLOR] />[/COLOR]
[COLOR="Blue"]<public[COLOR="Red"] type[/COLOR]=[COLOR="Purple"]"drawable"[/COLOR] [COLOR="red"]name[/COLOR]=[COLOR="purple"]"ic_bum_restart"[/COLOR] [COLOR="red"]id[/COLOR]=[COLOR="purple"]"0x010803ef"[/COLOR] />[/COLOR]
Make note of the ids of ic_bum_restart and bum_restart. These resource ids will be needed once we modify android.policy.jar.
Open the original framework-res.apk in winrar/7zip.
Drag framework-res/build/apk/resources.arsc to the open framework-res.apk to replace the original file. Make sure the compression rate is set to “store”.
Similarly, drag framework-res/build/res/drawable-ldpi/ic_bum_restart.png to framework-res.apk. Again, compression rate should be set to “store”
That’s it. You now have a modified framework-res.apk with the resources needed by android.policy.jar. Moving on now to reversing android.policy.jar.
Continued on page 2.
Reversing android.policy.jar
If you haven’t done so, change back to your work folder (cd \temp\epm if you are following my example).
Decompile android.policy.jar with apktool. By this time, I presume you now know how to do this.
Place copies of the GlobalActions*.smali files you extracted previously inside the android.policy.jar.out\smali\com\android\internal\policy\impl\ folder.
Open android.policy.jar.out.smali\com\android\internal\policy\impl\GlobalActions.smali with notepad++.
We will be modifying codes inside .method private createDialog()Landroid/app/AlertDialog;. Begin by searching for the method name.
We need to increase the size of the array for the power menu dialog. Do this by replacing
Code:
const/4 v11, 0x4
with
Code:
const/4 v11, [B]0x5[/B]
just a few lines after the method header (line 432).
Now, search for
Code:
invoke-direct {v2, p0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$4;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
aput-object v2, v0, v1
Insert the following codes after the aput-object v2, v0, v1 line:
Code:
const/4 v1, 0x4
new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$99;
const v3, 0x10803ef # id of ics_bum_restart
const v4, 0x10404d3 # id of bum_restart
invoke-direct {v2, p0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$99;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
aput-object v2, v0, v1
Make note of the ids of v3 and v4. They should match the ids you have generated after working with framework-res.apk and which you previously saved in Step II.7. Also note that the ids of resources in smali codes are not preceded with zeros after 0x. Thus,
Code:
const v3, 0x10803ef
corresponds to
Code:
[COLOR="blue"]<public [COLOR="Red"]type[/COLOR]=[COLOR="Purple"]"drawable"[/COLOR] [COLOR="red"]name[/COLOR]=[COLOR="purple"]"ic_bum_restart"[/COLOR] [COLOR="red"]id[/COLOR]=[COLOR="purple"]"0x010803ef[/COLOR]" />[/COLOR]
Once you have ensured that your codes are in order, save and close GlobalActions.smali.
Now, open android.policy.jar.out.smali\com\android\internal\policy \impl\GlobalActions$SinglePressAction.smali
Add the following codes before the line # instance fields:
Code:
# static fields
.field protected static rebootMode:I
.field protected static final rebootOptions:[Ljava/lang/String;
Add the following codes after the line # direct methods
Code:
.method static constructor <clinit>()V
.locals 3
const/4 v0, 0x3
new-array v0, v0, [Ljava/lang/String;
const/4 v1, 0x0
const-string v2, "Reboot"
aput-object v2, v0, v1
const/4 v1, 0x1
const-string v2, "Hot Boot"
aput-object v2, v0, v1
const/4 v1, 0x2
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
Your modifications should look as follows after your changes:
Code:
.class abstract Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;
.super Ljava/lang/Object;
.source "GlobalActions.java"
# interfaces
.implements Lcom/android/internal/policy/impl/GlobalActions$Action;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/android/internal/policy/impl/GlobalActions;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x40a
name = "SinglePressAction"
.end annotation
[B][COLOR="Blue"]# static fields
.field protected static rebootMode:I
.field protected static final rebootOptions:[Ljava/lang/String;[/COLOR][/B]
# instance fields
.field private final mIconResId:I
.field private final mMessageResId:I
# direct methods
[B][COLOR="blue"].method static constructor <clinit>()V
.locals 3
const/4 v0, 0x3
new-array v0, v0, [Ljava/lang/String;
const/4 v1, 0x0
const-string v2, "Reboot"
aput-object v2, v0, v1
const/4 v1, 0x1
const-string v2, "Hot Boot"
aput-object v2, v0, v1
const/4 v1, 0x2
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[/COLOR][/B]
.method protected constructor <init>(II)V
.locals 0
.parameter "iconResId"
.parameter "messageResId"
. . .
Save and close GlobalActions$SinglePressAction.smali.
Compile android.policy.jar.out. You know how to do it, right?
Open the original android.policy.jar with winrar. Replace the classes.dex inside with the one in android.policy.jar.out/build/apk/.
You are done.
Final Steps
There is really nothing left to do but to push the modified framework-res.apk and android.policy.jar back into your /system/framework/ folder. If you are doing it using root explorer, I recommend pushing framework-res.apk first, change its permission to 644 and reboot your phone. Then, do the same for android.policy.jar.
Screen Shots
After long-pressing the power button:
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
After choosing "Restart"
That's all, folks!
Credits
Credits to this mod belong to untermensch, kahvitahra and evanlocked. Without them, this tweak will not have been possible for me.
Thanks for it bro, will try this shortly :good: btw can this be used on Galaxy Pocket?
Reserved
Sent from my GT-S5360 using Xparent ICS Blue Tapatalk 2
shivamsejal said:
Thanks for it bro, will try this shortly :good: btw can this be used on Galaxy Pocket?
Click to expand...
Click to collapse
Try it bro. Just make a nandroid backup first.
I tried it on my Galaxy Ace GT-S5830i,I adapted this code and others:
Code:
const/4 v1, 0x4
new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$99;
const v3, 0x10803ef # id of ics_bum_restart
const v4, 0x10404d3 # id of bum_restart
invoke-direct {v2, p0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$99;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
aput-object v2, v0, v1
because my invoke-direct and aput-object are different.
But when I press power button,the phone vibrate and the list of the option is not showing.
Can you help me?
I can give you the files that I've modded If you want
Qeemi, if you look at the original EPM thread, the array length was increased from 3 in com\android\internal\policy\impl\GlobalActions.smali
Code:
const/4 v0, 0x3
new-array v0, v0, [Lcom/android/internal/policy/impl/GlobalActions$Action;
In this guide, the indexer for the v0 needs to be increased as well as follows:
Code:
const/4 v11, 0x4 # change 0x4 to 0x5
Further down the file we see this for the SGY:
Code:
:cond_0
new-array v0, v11, [Lcom/android/internal/policy/impl/GlobalActions$Action;
Having said so, please check the indexer for the v0 array and increase its value by 1.
I hope that fixes it for you. Give me a feedback if it works. So I can update this thread.
bumslayer said:
Qeemi, if you look at the original EPM thread, the array length was increased from 3 in com\android\internal\policy\impl\GlobalActions.smali
Code:
const/4 v0, 0x3
new-array v0, v0, [Lcom/android/internal/policy/impl/GlobalActions$Action;
In this guide, the indexer for the v0 needs to be increased as well as follows:
Code:
const/4 v11, 0x4 # change 0x4 to 0x5
Further down the file we see this for the SGY:
Code:
:cond_0
new-array v0, v11, [Lcom/android/internal/policy/impl/GlobalActions$Action;
Having said so, please check the indexer for the v0 array and increase its value by 1.
I hope that fixes it for you. Give me a feedback if it works. So I can update this thread.
Click to expand...
Click to collapse
I have:
Code:
const/4 v11, 0x5
And
Code:
:cond_f8
new-array v0, v11, [Lcom/android/internal/policy/impl/GlobalActions$Action;
So what I need to increase?
Qeemi said:
I have:
Code:
const/4 v11, 0x5
And
Code:
:cond_f8
new-array v0, v11, [Lcom/android/internal/policy/impl/GlobalActions$Action;
So what I need to increase?
Click to expand...
Click to collapse
Do you mean your v11 is already 0x5 by default?
Let me take a peek at your GlobalActions.smali and GlobalActions$SinglePressAction.smali.
bumslayer said:
Try it bro. Just make a nandroid backup first.
Click to expand...
Click to collapse
Lolz, i am not even having the phone , just willing to try that>>>>>>>> K Will check that shortly!!!:laugh:
Up for qeemi.
Sent from my GT-S5360 using Tapatalk
So, v11 is 0x4 by default:
Code:
const/4 v11, 0x4
And
Code:
:cond_f8
new-array v0, v11, [Lcom/android/internal/policy/impl/GlobalActions$Action;
by default
Yup. At least on the galaxy y. I also got that vibrating error a while back as you did. And updating v11 fixed it for me.
Sent by the guy inside my phone's toast frame
So I need to change it:
Code:
const/4 v11, 0x4
To:
Code:
const/4[COLOR="Red"] v12[/COLOR], [COLOR="Red"]0x5[/COLOR]
And this:
Code:
:cond_f8
new-array v0, v11, [Lcom/android/internal/policy/impl/GlobalActions$Action;
To this:
Code:
:cond_f8
new-array v0, [COLOR="red"]v12[/COLOR], [Lcom/android/internal/policy/impl/GlobalActions$Action;
Am I right?
No. Just increase the value of v11 as in the guide. If yours was already 0x5 before this mod make it 0x6.
Never change any other variable like v12 you might mess it up.
Sent by the guy inside my phone's toast frame
Dude pm me with your original smali files so I can help u better.
Sent by the guy inside my phone's toast frame
bumslayer said:
No. Just increase the value of v11 as in the guide. If yours was already 0x5 before this mod make it 0x6.
Never change any other variable like v12 you might mess it up.
Sent by the guy inside my phone's toast frame
Click to expand...
Click to collapse
I changed:
Code:
const/4 v11, 0x4
To:
Code:
const/4 v11, 0x5
And doesn't not work.
Send me your modified smali files and the originals so i can compare and possibly fix it.
Sent by the guy inside my phone's toast frame

[GUIDE] Enabling Unlimited Multiwindow Apps

This is a guide on how to enable unlimited apps on the traybar. This is for devs or users who want to do the mod themselves and include in their custom or own rom.
Tools:
1. apktools/smali/baksmali
2. 7zip
3. notepad++
4. knowledge of using the above tools and decompiling and recompiling.
Guide:
Part I: Editing services.jar
1. Decompile services.jar and edit MultiWindowManagerService.smali located in com/android/server/am folder. Search for the following code and insert the one with ++ highlighted in red (dont include the ++ just the goto :cond_10). Note that cond_10 may be different for your version so look for "const/4 v0, 0x1" below, above it is your "cond_xx" and edit the "goto :cond_10" like "goto :cond_xx".
Code:
.method public isSupportApp(Ljava/lang/String;)Z
.registers 3
.parameter "packageName"
.prologue
.line 410
[COLOR="Red"]++goto :cond_10[/COLOR]
iget-object v0, p0, Lcom/android/server/am/MultiWindowManagerService;->mSupportAppList:Ljava/util/ArrayList;
invoke-virtual {v0, p1}, Ljava/util/ArrayList;->contains(Ljava/lang/Object;)Z
move-result v0
if-nez v0, :cond_10
const-string v0, "android"
invoke-virtual {v0, p1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_12
.line 411
[COLOR="Red"]:cond_10[/COLOR]
const/4 v0, 0x1
.line 414
:goto_11
return v0
:cond_12
const/4 v0, 0x0
goto :goto_11
.end method
2. Recompile.
Part II: Editing SystemUI.apk
1. Decompile SystemUI.apk and edit MiniModeAppsPanel.smali located in com/android/systemui/statusbar folder. Search for "CATEGORY_MULTIWINDOW_LAUNCHER". Just delete the line with "--" highlighted in blue and add the line with "++" highlighted in red. Make sure that the v7 in "const-string v7" is the same as the v7 in "sget-object v7". It could be v11 or v22 or whatever so make sure to edit the "const-string vx" with the correct vx value in "const-string vx".
Code:
[COLOR="Red"]++const-string v7, "android.intent.category.LAUNCHER"[/COLOR]
[COLOR="Blue"]--sget-object v7, Lcom/android/systemui/multiwindow/MultiWindowReflector$Intent;->CATEGORY_MULTIWINDOW_LAUNCHER:Ljava/lang/String;[/COLOR]
2. Recompile.
Part III: Push the edited services.jar and SystemUI.apk to your tablet and reboot.
Awesome dude!! Thanks!
worked perfectly for the new 8013!!
http://d-h.st/YRJ
selective disable?
In general this is really awesome and I really appreciate the options this gives me, but there are some apps where I wish this was either disabled or the overlay button was in another spot. Being right over the enter key on my keyboard or near a button in a game tends to cause some grief for me. Any suggestions?
Edit: Found the answer. Lol. http://forum.xda-developers.com/showthread.php?t=2136313

[MOD] [GUIDE] [ 4.4.2 ] [ Stock-Flex-Pro2-G3 ] Advanced Power Menu [22.06.2014]

3 Way Reboot Option Guide
All information, follow these instructions !
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
Why do you need ?
* Reboot : Normal Reboot
* Hot Boot : Closes every service and app and does a quick reboot = you don't see the LG reboot logo = it jumps straight to the bootanimation = this is very fast reboot.
* Recovery : Reboot into recovery mode.
Required tools
* Java
* SDK
* Notepad ++ ( Or another application )
* Deodexed Framework
* Winrar or 7Zip or Winzip
* Baksmali/Smali Manager
* Download the "Required files"
* Extract the "android.policy.jar" from your rom /system/framework/
PART 1
* Put the "\classout\com\android\internal\policy\impl\" into the extracted "Required files" folder.
* Open GlobalActions.smali with notepad++ and change the following lines after that close and save the changes.
- Required line
Code:
1125 .line 339
1126 iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
1127
1128 new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$3;
1129
1130 const v2, 0x202042c
1131
1132 const v3, 0x20b0013
1133
1134 invoke-direct {v1, p0, v2, v3}, Lcom/android/internal/policy/impl/GlobalActions$3;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
1135
1136 invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
- New Line
Code:
1125 .line 339
1126 iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
1127
1128 new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$99;
1129
1130 const v2, 0x202042c
1131
1132 const v3, 0x20b0013
1133
1134 invoke-direct {v1, p0, v2, v3}, Lcom/android/internal/policy/impl/GlobalActions$99;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
1135
1136 invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
PART 2
* Navigate to ....\classout\com\android\internal\policy\impl\GlobalActions$SinglePressAction.smali
* Open GlobalActions$SinglePressAction.smaliwith notepad++ and add the following lines after that close and save the changes.
- Lines to add before line "# instance fields"
Code:
# static fields
.field protected static rebootMode:I
.field protected static final rebootOptions:[Ljava/lang/String;
-Lines to add after line "# direct methods"
Code:
.method static constructor <clinit>()V
.registers 3
const/4 v0, 0x3
new-array v0, v0, [Ljava/lang/String;
const/4 v1, 0x0
const-string v2, "Reboot"
aput-object v2, v0, v1
const/4 v1, 0x1
const-string v2, "Hot Boot"
aput-object v2, v0, v1
const/4 v1, 0x2
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
PART 3
Trick
xdabbeb said:
Here's a slightly modified version that I've been using for a while. It just removes Download (shutdownthread doesn't support it), uses "setprop ctl.restart zygote" as the shell restart command (better method imo and doesn't require busybox), and renames the options to what I preferred.
Click to expand...
Click to collapse
* Open GlobalActions$99.smali with notepad++ and add the following lines after that close and save the changes.
Org line
Code:
const-string v2, "Restart Method"
Modified line
Code:
const-string v2, "Own Rom Name"
* Compile clasess.dex file ( Baksmali/Smali Tool )
* Open your "android.policy.jar" with winrar and drag the new "classes.dex" file into the "android.policy.jar"and replace the original "classes.dex".
* You can do this with a File explorer ( With root permissions or before you build your rom. )
Thanks @kahvitahra and @civato and @_JKay_ and @xdabbeb original guide and Required files
Main Thread update big thanks @xdabbeb
* Update Required files and Baksmali Smali Tool
Delete
Update KK :good:
pendroz said:
Update KK :good:
Click to expand...
Click to collapse
do you have a guide also for stock KK (on odexed rom)?
Teşekkürler bunun saf G2 kitkat için olanı varmı acaba odex uzantılılar için?
@pendroz
Is this the same for all carriers' firmwares?
Does only framework.jar need to be deodexed or the whole framework folder?
Do we compile all 3 files in required folder into classes.dex?
Sorry for all of the questions. Cheers & teşekkürler!
AyDee said:
@pendroz
Is this the same for all carriers' firmwares?
Does only framework.jar need to be deodexed or the whole framework folder?
Do we compile all 3 files in required folder into classes.dex?
Sorry for all of the questions. Cheers & teşekkürler!
Click to expand...
Click to collapse
The same for all variants :good:
Do we compile all 3 files in required folder into classes.dex?
- Yes ( only android.policy jar ) To edit the specified line
Thanks!
(Yes I meant to say android.policy.jar, not framework.jar )
Edit: On CloudyStock 1.2 I found that the lines you need to change in part 1 are a little different-
from:
Code:
.line 330
iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$3;
const v2, 0x202029b
const v3, 0x20d0011
invoke-direct {v1, p0, v2, v3}, Lcom/android/internal/policy/impl/GlobalActions$3;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
to:
Code:
.line 330
iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$[COLOR="Red"]99[/COLOR];
const v2, 0x202029b
const v3, 0x20d0011
invoke-direct {v1, p0, v2, v3}, Lcom/android/internal/policy/impl/GlobalActions$[COLOR="Red"]99[/COLOR];-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
Sorry to double post but when I go to compile classes.dex I get this:
Code:
C:\...\G2\jar file decompile and compiler>java -Xmx512M -jar smal
i.jar classout -o classes.dex
classout\com\android\internal\policy\impl\GlobalActions$99$1.smali[41,4] Error f
or input '.param': Invalid directive
classout\com\android\internal\policy\impl\GlobalActions$99$1.smali[42,4] Error f
or input '.param': Invalid directive
classout\com\android\internal\policy\impl\GlobalActions$99$1.smali[41,11] mismat
ched input 'p1' expecting END_METHOD_DIRECTIVE
classout\com\android\internal\policy\impl\GlobalActions$99.smali[0,0] 17039360 c
annot fit into a short
classout\com\android\internal\policy\impl\GlobalActions$99.smali[80,4] mismatche
d tree node: I_STATEMENT_FORMAT11n expecting I_CATCHES
classout\com\android\internal\policy\impl\GlobalActions$99.smali[84,4] mismatche
d tree node: I_STATEMENT_FORMAT11x expecting I_FIELDS
(as I mentioned, I am trying this with the deodexed android.policy.jar from CloudyStock)
Am I doing something wrong?
AyDee said:
Sorry to double post but when I go to compile the jar I get this:
Code:
C:\...\G2\jar file decompile and compiler>java -Xmx512M -jar smal
i.jar classout -o classes.dex
classout\com\android\internal\policy\impl\GlobalActions$99$1.smali[41,4] Error f
or input '.param': Invalid directive
classout\com\android\internal\policy\impl\GlobalActions$99$1.smali[42,4] Error f
or input '.param': Invalid directive
classout\com\android\internal\policy\impl\GlobalActions$99$1.smali[41,11] mismat
ched input 'p1' expecting END_METHOD_DIRECTIVE
classout\com\android\internal\policy\impl\GlobalActions$99.smali[0,0] 17039360 c
annot fit into a short
classout\com\android\internal\policy\impl\GlobalActions$99.smali[80,4] mismatche
d tree node: I_STATEMENT_FORMAT11n expecting I_CATCHES
classout\com\android\internal\policy\impl\GlobalActions$99.smali[84,4] mismatche
d tree node: I_STATEMENT_FORMAT11x expecting I_FIELDS
Am I doing something wrong?
Click to expand...
Click to collapse
Which version use baksmali/smali tool ?
pendroz said:
Which version use baksmali/smali tool ?
Click to expand...
Click to collapse
I was using a different tool, started over using yours and all went well. Thanks again.:good::good:
Nice mod, thank you
Can use it on g pro2 ported roms?
Sent from my LG-D802 using Tapatalk
this cannot be used on odexed stock KK?
ahmed534 said:
this cannot be used on odexed stock KK?
Click to expand...
Click to collapse
Just a little guidance
http://forum.xda-developers.com/galaxy-s2/themes-apps/how-to-manually-deodex-odex-t1208320
for 4.2.2 they are same steps?
these are the lines I found :
.line 330
iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$3;
const v2, 0x202029b
const v3, 0x20d0011
invoke-direct {v1, p0, v2, v3}, Lcom/android/internal/policy/impl/GlobalActions$3;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/ObjectZ
Click to expand...
Click to collapse
SHould I change them to :
.line 330
iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$99;
const v2, 0x202029b
const v3, 0x20d0011
invoke-direct {v1, p0, v2, v3}, Lcom/android/internal/policy/impl/GlobalActions$99;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/ObjectZ
Click to expand...
Click to collapse
2) there is no GlobalActions$99.smali !!!
am using kitkat
ahmed534 said:
these are the lines I found :
SHould I change them to :
2) there is no GlobalActions$99.smali !!!
am using kitkat
Click to expand...
Click to collapse
Read the steps carefully
* Put the "\classout\com\android\internal\policy\impl\" into the extracted "Required files" folder.
pendroz said:
Read the steps carefully
* Put the "\classout\com\android\internal\policy\impl\" into the extracted "Required files" folder.
Click to expand...
Click to collapse
ohh thks mate ! and sry I was misken and was looking into another folder (from another tutorial) :s
I need a break I think XD
@pendroz
can you made a flashable zip file pls
this guide is very very good but hard for me

Categories

Resources