This CWM script will reodex any custom ROM.
With BOOTCLASSPATH edit in dexo.sh it can work on any ROM and phone.
Reodexing gives some people perceivable speed up. And it frees data partition from system dalvik cache. So dalvik-cache rebuild is also accelerated.
I ran it with stock kernel (root injected). And had problems with running it on any custom kernel.
http://galaxytree.net/bravomail/universalOdex.zip
Also a good example of output from shell script into CWM console.
{
"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 the work of the brilliant TommyTomatoe
strongsteve said:
This is the work of the brilliant TommyTomatoe
Click to expand...
Click to collapse
That it is, and he should prolly be credited in the 50 threads that this fellar started
Sent from my SPH-L710 using xda premium
Awesome.
Anyway to run this from ADB via PC for individul files rather than a whole ROM? I have been doing it manualy with this same script from TT but it takes a while typing it all in for each file.
This is what i do for individual files using dexopt wrapper:
Make sure you are currently runing an odex ROM or the script will not work
Move the dexopt wrapper file to /system/bin and cmod it 775 (you can get this file by unzipping the file in the OP)
move the files you want to odex to /mnt/extSdCard (for this exanple I will use SystemUI.apk)
Open an ADB window and type the following:
Code:
adb shell
su
mount -o remount,rw /system
chmod 777 /system
cd /mnt/extSdCard
dexopt-wrapper SystemUI.apk SystemUI.odex /system/framework/core.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar
:/system/framework/framework.jar:/system/framework/framework2.jar:/system/framework/android.policy.jar:/system/framework
/services.jar:/system/framework/apache-xml.jar:/system/framework/filterfw.jar:/system/framework/sec_edm.jar:/system/fram
ework/seccamera.jar
It will take a couple secoonds and it should spit out a "success" when done. If not, you typed something wrong.
Then you need to sign your new .odex file with the odex on your current system by typing the following code:
Code:
busybox dd if=/system/app/SystemUI.odex of=SystemUI.odex bs=1 count=20 skip=52 seek=52 conv=notrunc
obviuosly if you were dealing with a file from say /system/framework you would change the line above to point to /system/framework instead of /system/app
Now you will have 2 files on your extSdCard:
SystemUI.apk (the original deodexed file you started with)
SystemUI.odex (the file the script just made)
Use 7zip or winrar to extract the classes.dex from the SystemUI.apk
Chmod them 644 and push them to the appropriate folder, for our example it would be /system/app
restart the phone and you should now be good.
Thats a lot of typing to go through for each file so a script or batch file would be awesome to be able to run and save some time. I like to run odex ROMs because they do seem to be faster but YRMV. I generally use DSIXDA's Kitchen to deodex the files I want to modify so I can get to the Smali files. I make the changes to the file and test them out in a dedoxed enviornment. When I know they work, i re-odex them (with the process above) and push them back into my stock odexed rom.
Not trying to step on your thread OP, just posting an alternate method of doing just individual files intead on an entire ROM.
Obviously credit for the process above goes to Tommy T!
ThanksTommy!
Didact74 said:
Awesome.
Anyway to run this from ADB via PC for individul files rather than a whole ROM? I have been doing it manualy with this same script from TT but it takes a while typing it all in for each file.
This is what i do for individual files using dexopt wrapper:
Make sure you are currently runing an odex ROM or the script will not work
Move the dexopt wrapper file to /system/bin and cmod it 775 (you can get this file by unzipping the file in the OP)
move the files you want to odex to /mnt/extSdCard (for this exanple I will use SystemUI.apk)
Open an ADB window and type the following:
Code:
adb shell
su
mount -o remount,rw /system
chmod 777 /system
cd /mnt/extSdCard
dexopt-wrapper SystemUI.apk SystemUI.odex /system/framework/core.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar
:/system/framework/framework.jar:/system/framework/framework2.jar:/system/framework/android.policy.jar:/system/framework
/services.jar:/system/framework/apache-xml.jar:/system/framework/filterfw.jar:/system/framework/sec_edm.jar:/system/fram
ework/seccamera.jar
It will take a couple secoonds and it should spit out a "success" when done. If not, you typed something wrong.
Then you need to sign your new .odex file with the odex on your current system by typing the following code:
Code:
busybox dd if=/system/app/SystemUI.odex of=SystemUI.odex bs=1 count=20 skip=52 seek=52 conv=notrunc
obviuosly if you were dealing with a file from say /system/framework you would change the line above to point to /system/framework instead of /system/app
Now you will have 2 files on your extSdCard:
SystemUI.apk (the original deodexed file you started with)
SystemUI.odex (the file the script just made)
Use 7zip or winrar to extract the classes.dex from the SystemUI.apk
Chmod them 644 and push them to the appropriate folder, for our example it would be /system/app
restart the phone and you should now be good.
Thats a lot of typing to go through for each file so a script or batch file would be awesome to be able to run and save some time. I like to run odex ROMs because they do seem to be faster but YRMV. I generally use DSIXDA's Kitchen to deodex the files I want to modify so I can get to the Smali files. I make the changes to the file and test them out in a dedoxed enviornment. When I know they work, i re-odex them (with the process above) and push them back into my stock odexed rom.
Not trying to step on your thread OP, just posting an alternate method of doing just individual files intead on an entire ROM.
Obviously credit for the process above goes to Tommy T!
ThanksTommy!
Click to expand...
Click to collapse
That's exactly what I do as well.. I just baksmali the odex when I need to edit the smali.
If you are already in the odexed rom environment, you do not have to include the bootclasspath
Awesome bro, simply awesome! I used a similar script during my brief EVO 3D days that I always ran after flashing a new rom and I considered it priceless!
Thanks man..
strongsteve said:
If you are already in the odexed rom environment, you do not have to include the bootclasspath
Click to expand...
Click to collapse
What?!? I been typing all that for nothing? LOL.
So all i would need is:
dexopt-wrapper SystemUI.apk SystemUI.odex
Didact74 said:
What?!? I been typing all that for nothing? LOL.
So all i would need is:
dexopt-wrapper SystemUI.apk SystemUI.odex
Click to expand...
Click to collapse
Dextopt-wrapper sdcard/folder/app.apk sdcard/folder/app.odex
Sent from my SPH-L710 using xda premium
strongsteve said:
Dextopt-wrapper sdcard/folder/app.apk sdcard/folder/app.odex
Sent from my SPH-L710 using xda premium
Click to expand...
Click to collapse
Sweet.
Thanks man.
Strongsteve is the king of odex. Lol.
Sent from my Nexus S 4G using xda premium
So i flashed the zip on sonic free. how can i tell if the rom is now odexed?
Flashing zips in rehab!!
Holy cow amigo. You started a bunch of threads. A little credit to original author would have been nice if you took the work and revamped it. All credit cause you didn't.
Sharing is caring. But I suggest you put where you got the script, etc, as well as the original author.
edit. upon further review, i see that you did change some things, mainly removing the original header (which is absolutely lame) and made it work with CWM. Also, you set a static BOOTCLASSPATH - which defeats the purpose of this script!!
Let me check my pms and emails. Someone contacted me a long time ago asking me review to their changes. Maybe it was you lol.
Sent from my EVO using Tapatalk 2
tommytomatoe said:
Holy cow amigo. You started a bunch of threads. A little credit to original author would have been nice if you took the work and revamped it. All credit cause you didn't.
Sharing is caring. But I suggest you put where you got the script, etc, as well as the original author.
edit. upon further review, i see that you did change some things, mainly removing the original header (which is absolutely lame) and made it work with CWM. Also, you set a static BOOTCLASSPATH - which defeats the purpose of this script!!
Let me check my pms and emails. Someone contacted me a long time ago asking me review to their changes. Maybe it was you lol.
Sent from my EVO using Tapatalk 2
Click to expand...
Click to collapse
Tommy I miss your classic tomato over here! I know you got an HTC lte so I'm guessing we won't be seeing any roms from you here but one can only hope
-Sprint Galaxy Slll_Transformer Prime-
manso1102 said:
Tommy I miss your classic tomato over here! I know you got an HTC lte so I'm guessing we won't be seeing any roms from you here but one can only hope
-Sprint Galaxy Slll_Transformer Prime-
Click to expand...
Click to collapse
Haha thanks. Yeah I'm over here on HTC. Taking a long extended break from Android. Things have changed since I last did anything
Sent from my EVO using Tapatalk 2
tommytomatoe said:
Holy cow amigo. You started a bunch of threads. A little credit to original author would have been nice if you took the work and revamped it. All credit cause you didn't.
Sharing is caring. But I suggest you put where you got the script, etc, as well as the original author.
edit. upon further review, i see that you did change some things, mainly removing the original header (which is absolutely lame) and made it work with CWM. Also, you set a static BOOTCLASSPATH - which defeats the purpose of this script!!
Let me check my pms and emails. Someone contacted me a long time ago asking me review to their changes. Maybe it was you lol.
Sent from my EVO using Tapatalk 2
Click to expand...
Click to collapse
LOL.. Tell it like it is Tommy.
Tommy can u fix this script then for us since he set a static boot class path?
Sent from Galaxy SIII
musclehead84 said:
Tommy can u fix this script then for us since he set a static boot class path?
Sent from Galaxy SIII
Click to expand...
Click to collapse
http://classictomatoe.net/dexo-universal-odex-tool
Edit. Original thread. http://themikmik.com/showthread.php?t=12988
Sent from my EVO using Tapatalk 2
Related
So I've had some requests to recreate the edit to re-enable user selection of font size in the touchwiz Ice Cream Sandwich builds. I am not on touchwiz that much so I thought I would share it with the rest of the community in hopes that those who do put more time into touchwiz could incorporate it into their roms for everyone to use.
{
"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"
}
The edit is actually quite easy, as the preference is simply being hidden in java. With that said, you need Settings.apk, smali/baksmali, adb knowledge, and some text editor
Instructions:
Pull Settings.apk from your phone. If you're cooking this into a ROM then obviously just grab Settings.apk from /system/app
Code:
adb pull /system/app/Settings.apk
Note: This assumes you are editing from a deodexed build. If you have an odexed ROM you can deodex your apk, make your changes, and then reodex.
Next you'll want to open the apk and pull out classes.dex. You can ultimately use apktool as well if it will work for you. I've been having some problems with classes and apktool on occasion and find baksmali to be a sure way to get it right. One you have classes.dex decompile it.
Code:
java -jar baksmali-x.xx.jar -o <[B]output directory[/B]> classes.dex
This will give you a decompiled smali output in the directory you used in bold above.
Navigate without the out folder to /com/android/settings/DisplaySettings.smali and open it with a text editor.
Look for the following, and remove the line in red from DisplaySettings.smali:
Code:
iget-object v0, v0, Lcom/android/settings/DisplaySettings;->mFontSizePref:Landroid/preference/ListPreference;
move-object/from16 v21, v0
[COLOR="Red"]invoke-virtual/range {v20 .. v21}, Landroid/preference/PreferenceScreen;->removePreference(Landroid/preference/Preference;)Z[/COLOR]
And that's the hard part. =P Now recompile the classes for your Settings.apk.
Code:
java -Xmx512M -jar smali-x.xx.jar <output from above> -o newclasses.dex
Rename newclasses.dex to classes.dex,you'll have to delete your original if you're in the same folder, and move the new compiled classes.dex back into Settings.apk.
Push Settings.apk back to your phone.
Code:
adb push Settings.apk /system/app
Change your font size in menu>settings>display
Hope this helps some of you and I look forward to seeing more ROMs with font sizes! =P
Great find and thanks for posting the guide! Did you ever find the edit to remove the AM/PM from the status bar?
dtm_stretch said:
Great find and thanks for posting the guide! Did you ever find the edit to remove the AM/PM from the status bar?
Click to expand...
Click to collapse
Haven't looked much on ICS TouchWiz yet.
whenever i try to use your method or apktool i get error when decompling. I'm able to decompile other apks like SystemUI.apk just fine. Any ideas?
graphic1982 said:
whenever i try to use your method or apktool i get error when decompling. I'm able to decompile other apks like SystemUI.apk just fine. Any ideas?
Click to expand...
Click to collapse
Yeah, some samsung apps don't recompile correctly with apktool. This is why I used baksmali to decompile instead.
still getting error when using baksmali
graphic1982 said:
still getting error when using baksmali
Click to expand...
Click to collapse
Have you tried the newest baksmali?
Sent from my SPH-D710 using xda premium
newest baksmali solved the issue. Also you may want to edit instructions to say delete every instance of the line in Displaysettings.smali. I only deleted it one time the first time i tried and the font size option didn't show up in settings>display. After I went back and deleted every instance of that line from the file it worked. Awesome job on showing how to do this mod and thanks for the help with my troubleshooting.
graphic1982 said:
newest baksmali solved the issue. Also you may want to edit instructions to say delete every instance of the line in Displaysettings.smali. I only deleted it one time the first time i tried and the font size option didn't show up in settings>display. After I went back and deleted every instance of that line from the file it worked. Awesome job on showing how to do this mod and thanks for the help with my troubleshooting.
Click to expand...
Click to collapse
Interesting. I'll look into it, thanks. All the ones I've posted for people here I've just re enabled the first list preference. Worked for me too when I tested it on fe16 and haven't heard otherwise for the few people that have downloaded the apk. But I'll double check just to be sure.
Sent from my SPH-D710 using xda premium
Anyone willing to provide a modified Settings.apk for download?
Dint even realize it was missing.
Thanks for showing everybody and creating a how to.
I will do this later this week.
i717 running Seraphim Stratosphere Collective ICS with tapatalk2
Default ICS Launcher ?
Does this work with the Default ICS Launcher ? Or can someone tell me where to find the settings in the ICS Launcher
Thank you
Curtisp said:
Does this work with the Default ICS Launcher ? Or can someone tell me where to find the settings in the ICS Launcher
Thank you
Click to expand...
Click to collapse
It should. However it doesn't seem to resize touchwiz launcher font. Never tried the ics launcher though.
Sent from my SPH-D710 using xda premium
Works as advertised. Excellent how-to, excellent post. For anyone not wanting to mess around with smali/baksmali, here's a modded Settings.apk from Calkulin's most recent FE22 ROM.
Will it work on sfhub's fe22 stock
Sent from my SPH-D710 using xda premium
Kchitown1977 said:
Will it work on sfhub's fe22 stock
Sent from my SPH-D710 using xda premium
Click to expand...
Click to collapse
It should, I don's see why not. There's only one way to find out. Copy this file to the /system/app directory using Root Explorer or something similar. Back up your own Settings.apk prior to that. If it doesn't work, replace it with the original file.
Kchitown1977 said:
Will it work on sfhub's fe22 stock
Sent from my SPH-D710 using xda premium
Click to expand...
Click to collapse
If you use a deodexed apk on an odex rom, it will work, however, youll want to remove the odex file as well.
S2 OK
Also work on Galaxy S2. Thk.
For the Gingerbread version of this fix, click here!
Greetings and Salutations, Epic 4G Touch Owners and other curious parties!
Disclaimer: Just reading this may cause your head to burst, your phone to catch fire, dogs and cats may do the tango! I am not responsible for any bad stuff that happens from you reading or acting on the information in this thread.
If any ROM authors want to use this fix in their ROMs, I'm completely cool with that. A quick kudos in your credits section would be nice, though.
Background: One of the things that really peeves me off about Sprint is that they want us to think we always have 3G service. I know that I don't have 3G in all of the areas I travel, and I also don't when I am roaming.
Thankfully, the fix is quite simple! It was a bit more difficult than the fix for HTC Sense ROMs as the smali edit was not quite as simple.
This was my primary reason for rooting my phone, that's how aggravating it is for me.
Let's change this:
{
"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"
}
To this:
Credits
Calkulin, sextape, sfhub, Other brave folks - For providing the leaked ROMs for me to fiddle with.
Calkulin - (indirectly) helped me find how to fix this for Sense ROMs which I wrote up here.
Samsung - for a relatively good phone. Hopefully the weird auto-brightness and battery life will be fixed next update.
The brave XDA members who try these instructions and report their success or failure!!!
XDA for being a great source of information!!!
XDA members for thinking outside of the box!!!
The fix:
This fix requires editing your SystemUI.apk file. If you are using one of the fine custom ROMs on XDA, be aware that the you or the author may have already made changes to the SystemUI.apk file, so using my file IS NOT RECOMMENDED.
If you are using Calk's E4GT 2 v1.6 ROM, you can safely use my attached SystemUI.apk file. It may work with other "stock-ish" ROMs, but this is the one I based it on. The attachment will NOT work on stock FF18.
This mod relies on the assumption that your ROM developer has not deleted any of the 1x graphic files in the ROM. The developer CAN theme or otherwise change the images as long as the file names remain the same.
What you need to perform this mod:
1. An Epic 4G Touch ROM ZIP file, or a phone running a Epic 4G Touch ROM -- AOSP ROMs already have the correct indicators.
2. The Java SDK -- So you can run Smali.
3. Smali/Baksmali -- So you can decompile/compile the classes.dex file.
4. Android SDK -- To push/pull files from your phone (adb only).
5. Some sort of archive tool (such as WinRAR, 7zip, etc).
5. A text editor capable of editing UNIX-formatted files. I recommend Notepad++, personally.
Ease Of Use Tips: Install Java SDK first, then Android SDK (if you need adb). Download the smali files (smali-1.3.2.jar and baksmali-1.3.2.jar at the time of this writing) to a new "working" folder where we can do our magic.
KEEP A COPY OF YOUR PRE-EDITED SYSTEMUI.APK FILE, just in case!
Instructions:
1a. [If you are using a ROM ZIP File]: Use 7zip/WinRAR/WinZip to open the ROM ZIP file. Navigate to system\app and extract SystemUI.apk to your "working" folder.
1b. [If you want to grab SystemUI.apk from your running phone]: Use adb to pull SystemUI.apk to your working folder. Example: adb pull /system/app/SystemUI.apk C:\Working\SystemUI.apk
To avoid problems, ONLY USE adb to pull/push SystemUI.apk. Phone apps may cause unknown issues.
2. Go to a command prompt in your "working" folder and run the following command: java -jar baksmali-1.3.2.jar -o SystemUI/ SystemUI.apk
3. Browse to your "working" folder and see that there is now an SystemUI folder inside, with other subfolders. Browse to SystemUI\com\android\systemui\statusbar\policy.
4. Edit the file called NetworkController.smali with your favorite UNIX-format compatible text editor and look for the following text. The key is to search for .line 751. Edit the line below that is in BOLD.
Code:
.line 751
:pswitch_e8
iget-boolean v3, p0, Lcom/android/systemui/statusbar/policy/NetworkController;->mShowAtLeastThreeGees:Z
[B]if-nez v3, :cond_103[/B]
5. Change that line to say #if-nez v3, :cond_103 (add the # at the beginning to comment it out)
6. Save NetworkController.smali
7. Go back to your command prompt, change to your "working" folder and issue the following command: java -jar smali-1.3.2.jar SystemUI/ -o newclasses.dex
8. If there weren't any errors, go ahead and rename the original classes.dex to classes.old and rename newclasses.dex to classes.dex.
9. Open SystemUI.apk in your favorite archiver (if you closed it earlier).
10. Drag the file called classes.dex from your "working" folder into SystemUI.apk and replace the one already in there.
11. Run the following commands to get the file on your phone:
Code:
adb remount
adb push SystemUI.apk /system/app/SystemUI.apk
adb shell stop
adb shell start
You should hear your bootup sound and then the changes should be instantly applied.
To Test:
1. Dial ##DATA# (##3282#) on your phone.
2. Enter your MSL (can be found by typing getprop ril.MSL from Terminal Emulator or adb shell).
3. Scroll to Others at the bottom of the list.
4. Click on HDR/1X Selection
5. Change from Hybrid Mode to CDMA Only Mode. This puts your phone in 1X only mode.
6. Press OK.
7. Verify 1X icon comes within 30 seconds, if you have service.
8. Repeat steps 4-7, substituting Hybrid Mode for CDMA Only Mode to switch back.
How I found this: The files in ICS are different than Gingerbread. Looking for 1x led me to NetworkController.smali. There is a lookup called mShowAtLeastThreeGees (which I thought was hilarious). There are 6 locations that reference this boolean value. The correct one is the a couple of lines before a reference to DATA_1X. I wish I noticed that earlier as I was commenting out each one at a time until I found the last one, which coincidentally was right before DATA_1X. That's what happens when you've got too many things going on at once.
Please let me know whether or not this worked for you. I'd like to make a list of ROMs (with applicable mods) this works for or doesn't work for.
I will do whatever I can to help if you are struggling. If there's something you don't understand, please let me know. I can update the instructions if I accidentally wrote something wrong.
Great work once again
Sent from my SPH-D710 using Tapatalk 2
Finally!!! I will give it a go right now... mShowAtLeastThreeGees - that IS pretty funny. I guess Google programmers do have a sense of humor.
EDIT: Works like a charm. Here's modded SystemUI.apk from Calkuin's newest FE22 ROM, for those who don't want to mess with SMALI edits.
Awesome work! Now help us find where they've buried the lines to hide AM/PM in there
datajosh said:
Awesome work! Now help us find where they've buried the lines to hide AM/PM in there
Click to expand...
Click to collapse
i'll +1 that. Its one of the main reasons I can't stand TW.
nice work
Thanks Nivron. Here is the systemUI.apk for the stock deodexed rom.
Nice work.
Haven't tested it just yet but it looks like they changed it from line 752 to 751 in FF02 for anyone wanting to make the change in the latest build.
Is it possible for someone to update this for the new FF02 build?
DevalB said:
Is it possible for someone to update this for the new FF02 build?
Click to expand...
Click to collapse
Here it is for stock FF02.
dtm_stretch said:
Here it is for stock FF02.
Click to expand...
Click to collapse
To install, I just ADB push?
DevalB said:
To install, I just ADB push?
Click to expand...
Click to collapse
Yeah, or you can use a file explorer and drop it in system/app, then reboot.
dtm_stretch said:
Yeah, or you can use a file explorer and drop it in system/app, then reboot.
Click to expand...
Click to collapse
I tried dropping it into system/app, which caused the device to lock up and FC systemui. I did a battery pull, and now I'm left with no UI icons, etc.
I think it's due to no space left in my /system/ folder. I deleted the failed install of S-voice, which cleared up 20MB, and now it works!
---------- Post added at 04:59 PM ---------- Previous post was at 04:46 PM ----------
So I tried changing my mode from Hybrid to CDMA only, and waited about a minute, and my device stayed on 3G. I even rebooted just to be sure.
Thoughts?
I downloaded the modified FF02 systemui.apk file, and used ES File Explorer to paste it into /systemUI/app/, after backing up (adb pull) the stock systemUI.apk
DevalB said:
I tried dropping it into system/app, which caused the device to lock up and FC systemui. I did a battery pull, and now I'm left with no UI icons, etc.
I think it's due to no space left in my /system/ folder. I deleted the failed install of S-voice, which cleared up 20MB, and now it works!
---------- Post added at 04:59 PM ---------- Previous post was at 04:46 PM ----------
So I tried changing my mode from Hybrid to CDMA only, and waited about a minute, and my device stayed on 3G. I even rebooted just to be sure.
Thoughts?
I downloaded the modified FF02 systemui.apk file, and used ES File Explorer to paste it into /systemUI/app/, after backing up (adb pull) the stock systemUI.apk
Click to expand...
Click to collapse
Are you stock and deodexed? Also have you tried changing the permissions of systemUI.apk to match the other apks in system/app?
dtm_stretch said:
Are you stock and deodexed? Also have you tried changing the permissions of systemUI.apk to match the other apks in system/app?
Click to expand...
Click to collapse
Stock FF02, rooted: http://forum.xda-developers.com/showthread.php?t=1694695
Let me try the permissions, see what it does.
DevalB said:
Stock FF02, rooted: http://forum.xda-developers.com/showthread.php?t=1694695
Let me try the permissions, see what it does.
Click to expand...
Click to collapse
That isn't deodexed and this is a smali edit, so I don't think it will work.
Sent from my SPH-D710 using Tapatalk 2
dtm_stretch said:
That isn't deodexed and this is a smali edit, so I don't think it will work.
Sent from my SPH-D710 using Tapatalk 2
Click to expand...
Click to collapse
You can use a odex rom and with root explorer delete both SystemUI files and replace it with the SyetemUI.apk posted in this thread, it will work I have tried it.
now I'm assuming that you can do the same thing if you know how to take out the systemUI from your odex rom and deodex it and then do the mod.
OP updated for FF18, small change (.line 752 to .line 751). Note that the attachment is still for Calk's E4GT 2 v1.6 ROM and won't work right with FF18.
Deodexed FH13
Here it is for FH13 Deodexed
Theming a keyboard may be common knowledge to some of the amazing Devs here. But to a noob like me, it took some research and time to get it working without breaking the original signature (That's the trick!). I searched the forum and it doesn't look like anyone has posted a "How To" on theming a keyboard, so I thought I'd share my experience with you all.
**Some of these steps may seem elementary, but I tried to explain everything in layman's terms so even a beginner can theme a keyboard.
// Before you get started:
You must have a working environment setup. Check out QBKing77's awesome video "How to install the android-sdk" to get that going.http://forum.xda-developers.com/showthread.php?t=1614922
Make sure you also have installed:
Notepad++ (for editing xml) // (www.notepad-plus-plus.org)
7zip (for extracting apks) // (www.7-zip.org)
the image editor of your choice. I use Paint.Net(www.getpaint.net), and Gimp(www.gimp.org). Both FREE!
apktool (http://forum.xda-developers.com/showthread.php?t=1755243)
LatinImeDictionaryPack.apk (drop in the 'system\app' folder on your phone. Only for the LatinIME.apk) Grab it here: http://d-h.st/Ebb
// This method has worked with every keyboard that I have encountered so far. I will use 'LatinIME.apk' for reference, as that is the stock ICS keyboard. //
WARNING.. DO NOT POST DISTRIBUTION LINKS TO ANY MODDED 'Swype.apk'. XDA HAS A STANDING ORDER FROM NUANCE (MAKERS OF SWYPE), THAT DOES NOT ALLOW SUCH LINKS TO BE POSTED.
1) To start make sure you have a working copy of your keyboard apk; grab it out of a ROM, download it, or use a file manager with root access (like Root Explorer) to copy it to your SD card then to your computer.
**I would suggest dropping the keyboard apk into a folder on the desktop, seperate from anything else, and making a backup of the original so that you have a spare copy.
2) Using 7zip extract the 'res\drawable-xhdpi' folder into the folder you created. This folder will contain the pngs that control some of the keys, outlined in red on this pic:
{
"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"
}
Color these pngs to match using your favorite editor and save (bucket fill with Paint.Net is a breeze!)
3) Now that your pngs are themed.. Within the folder that you created containing your apk, hold down shift and right click. Select "Open Command Window Here" to fire up command prompt.
4) Next to decompile the keyboard apk with apktool (again using 'LatinIME.apk' for reference, but the apk may be of a different name; SamsungIME.apk, HTC_IME.apk, etc.).
Type this command:
Code:
apktool d LatinIME.apk
When it's done, you will see a folder with the apk name appear, within the folder you created. Click into it and you should see at minimun a 'res' folder and a 'smali' folder.
5) Navigate to 'res\values' folder. Depending on the keyboard you are working on, the xml controlling the remaining key colors will be contained in the 'colors.xml' or 'styles.xml' file. Open with Notepad++, and change the color codes as needed. Save and close.
6) Go back to the root of the folder containing your apk, and fire up command prompt (if it's not still open). Now it's time to build using this command (again using 'LatinIME.apk' for reference, but the apk may be of a different name; SamsungIME.apk, HTC_IME.apk, etc.)
Code:
apktool b LatinIME
7) When it's done building, you should have 4 folders minimum now (res, smali, build, dist) and it's time for the key to success. Navigate into the 'dist' folder and you will see the "Built" apk. Open it with 7zip, and extract the 'resources.arsc' file to your folder. Close 7zip.
8) Now it's time to pull it all together. Navigate back to the ORIGINAL keyboard apk, and open with 7zip.
Copy (you can drag and drop with 7zip) the 'resources.arsc' that you extracted from your "Built" apk, into the "ORIGINAL" apk overwriting the file. Then with 7zip still open and the apk loaded, navigate (within 7zip) into the 'res\drawable-xhdpi' folder where you should see the list of unthemed pngs. Simply drop your edited pngs into this folder. Close 7zip and you're done here!
9) Finally, take your "ORIGINAL" but themed apk, and push it back the 'system\app' folder on your phone.
Fix permissions to 'rw-r--r--' (only check everything under 'read' and Owner under 'write')
Reboot, and bask in the glory of your new themed keyboard!
**Alternatively, grab my empty zip installer here: http://d-h.st/oKG to flash in recovery. You must drop your themed apk into the system\app folder of the zip and save. Also, the zip already contains the 'LatinImeDictionaryPack.apk'
Please hit THANKS if I helped!! And please keep this thread alive!
Nice,
Now, we need a simple guide on how to theme Jelly Bean...all of it ... (tapping foot patiently)
Thanks!
Naddict said:
Nice,
Now, we need a simple guide on how to theme Jelly Bean...all of it ... (tapping foot patiently)
Thanks!
Click to expand...
Click to collapse
Themed the same just new xml and some new images. I got everything to decompile and recompile, just some of the xml's have changed.
---------- Post added at 09:41 PM ---------- Previous post was at 09:39 PM ----------
Thanks rompnit. I can there a whole Rom but always have issues with the keyboard. I'll try this tomorrow night.
Sorry i'm a nub but does the apktool jar file have to be in the same folder as android-sdk?
shehroze3 said:
Sorry i'm a nub but does the apktool jar file have to be in the same folder as android-sdk?
Click to expand...
Click to collapse
I actually created a folder 'C:\apktool' where I dropped everything, then added that folder to the Path system variable; same method as you would add the SDK. Otherwise, drop it into the 'platform-tools' folder within the android-sdk. When configured properly, you should be able to open command prompt in any directory, simply type 'apktool' and see a list of commands.
rompnit said:
I actually created a folder 'C:\apktool' where I dropped everything, then added that folder to the Path system variable; same method as you would add the SDK. Otherwise, drop it into the 'platform-tools' folder within the android-sdk. When configured properly, you should be able to open command prompt in any directory, simply type 'apktool' and see a list of commands.
Click to expand...
Click to collapse
ok i did what u said and put the apktool jar file into the platform-tool folder, but when i type apktool in cmd prompt nothing happens.
shehroze3 said:
ok i did what u said and put the apktool jar file into the platform-tool folder, but when i type apktool in cmd prompt nothing happens.
Click to expand...
Click to collapse
Did you also grab the "wrapper" script from the link as well? It contains a few more necessary files that go with apktool.
Sent from my SPH-L710 using xda app-developers app
time for dazed and rompnit to collaborate. maybe a simple guide for us wannabees...
recompiling never works for me, I read somewhere about empty folders being my problem...oh well, I can use 7zip though! and notepad+...
rompnit said:
Did you also grab the "wrapper" script from the link as well? It contains a few more necessary files that go with apktool.
Sent from my SPH-L710 using xda app-developers app
Click to expand...
Click to collapse
I'll check it out when I get home. Thanks
Sent from my SPH-L710 using xda premium
ok i got it to work. All i had to do was rename apktool_1.5.0 to apktool. I'm a noob, i know, try not to laugh to hard lmao
shehroze3 said:
ok i got it to work. All i had to do was rename apktool_1.5.0 to apktool. I'm a noob, i know, try not to laugh to hard lmao
Click to expand...
Click to collapse
Glad you got it to work!! And everyone has to start somewhere! Let me know how it turns out for ya!!
Sent from my SPH-L710 using xda app-developers app
Does this method work for both Odex and De-Odex ROMs??? I am currently on an Odex rom. Thanks!!
taihard said:
Does this method work for both Odex and De-Odex ROMs??? I am currently on an Odex rom. Thanks!!
Click to expand...
Click to collapse
This method will not work on .odex keyboard apk's, at least to my knowledge but I've always run deodexed ROMS. However, check to see if the keyboard apk you are working with even contains an odex file; a lot of them do not. If it does, you could always grab the apk off the web, mod it, and install it after removing the original files.
Thank you for the walk through, this is awesome
Hey Rompnit. Ok, I was having trouble getting apktool to run on my computer. That's what I was talking about on morphology anyway, so I was trying to learn how to theme an app and somehow was lead to morphology and got all caught up over there. Lol. But ya, I'm gonna have to crap clean my laptop to use this. Thanks. See ya over there
Sent from my Insanely Morphed S3 LI3 ktoonsez747 (196-2106) TW FreeGs3 2.0.0
rompnit said:
This method will not work on .odex keyboard apk's, at least to my knowledge but I've always run deodexed ROMS. However, check to see if the keyboard apk you are working with even contains an odex file; a lot of them do not. If it does, you could always grab the apk off the web, mod it, and install it after removing the original files.
Click to expand...
Click to collapse
This method WILL in fact work on odexed keyboards. Theming for an odex base is no different then a de-odexed base. You are not making any smali adjustments here so nothing that concerns the odex, thus it will not be affected.
Sent from my SPH-L710 using xda app-developers app
Guess no one was interested in theming an odexed keyboard after all huh? ....
Sent from my SPH-L710 using xda app-developers app
gruesomewolf said:
Guess no one was interested in theming an odexed keyboard after all huh? ....
Sent from my SPH-L710 using xda app-developers app
Click to expand...
Click to collapse
Guess not.. This thread's been quiet for a while... I guess people just don't want to theme keyboards in general!
Hey do you know if this process will work with keyboards from the market like SwiftKey 3? The themeson there are so boring need new colors lol
rompnit said:
Guess not.. This thread's been quiet for a while... I guess people just don't want to theme keyboards in general!
Click to expand...
Click to collapse
Guess that's what we get for trying to help. ... lol
Hello.
I am running this ROM, and my lockscreen looks like this:
{
"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"
}
I want to replace the white circle around the icon (displayed when hovering the icon, before releasing the finger from the screen). It just needs to be transparrent.
The developer of the ROM wrote this to me:
final Drawable activeBack = mResources.getDrawable(com.android.internal.R.draw able.ic_lockscreen_target_activated);
...
So change icon ic_lockscreen_target_activated.png
Click to expand...
Click to collapse
The commit to the Git is here: https://github.com/IceColdJelly42/frameworks_base/commit/f1971285b709593873bf8c3effd144087b710104
Question: So far, i understand that i must replace the PNG in the system, but where would it reside? I dont think its in an APK as such, as its the system itself (though that could be apk's aswell...?). I was pointed to this tutorial that should have info on how to do it, but the guide refers to APK-filenames, and again, whats the APK filename? I have no APK in data/app or in system/app that matches "com.android.internal" - so im quite out of luck....?
Any advice on how to proceed is welcome. I have downloaded the PNGs attatched in the ZIP, from the source (git), those are the ones i want to replace with (they are all transparrent as they should be, for my project).
Kind Regards
TwinAdk
The image that you're looking for, is in "framework-res.apk\res\drawable-xhdpi.
When you have changed the image, push framework or copy/paste it in system\framework and reboot!
For security, make a nandroid backup
Okay, so framework-res.apk, and then follow the guide i linked to, and just mirror the structure of the folders in the apk (\res\drawable-xhdpi) - correct?
Or should i unpack the apk, replace pics, resign the apk and push instead?
Also, xhdpi, hdpi, etc.. Whats the difference except the size of the images (resolution)? Is it if i have a phone with lower res, i will need the lower res images?
Thanks so far!
EDIT: You made me laugh there sir..! ALWAYS a nandroid backup! Rather 10 useless backups, than one missing..! :victory:
TwinAdk said:
Okay, so framework-res.apk, and then follow the guide i linked to, and just mirror the structure of the folders in the apk (\res\drawable-xhdpi) - correct?
Or should i unpack the apk, replace pics, resign the apk and push instead?
Also, xhdpi, hdpi, etc.. Whats the difference except the size of the images (resolution)? Is it if i have a phone with lower res, i will need the lower res images?
Thanks so far!
Click to expand...
Click to collapse
With winrar or similar, open the apk, go to res\drawable-xhdpi and change image.
Now, you can push framework in rom and see results
I know that change only resolution of icons in that folder
Here you go. Push to /system/framework/ and set permissions.
Don't know if it will work 'cause I don't have ICJ flashed at the moment. Make a backup before trying it.
I had to compress it before uploading because the limit was 8mb.
Sv: [Q][THEME] Replacing PNG in system file
TToivanen said:
Here you go. Push to /system/framework/ and set permissions.
Don't know if it will work 'cause I don't have ICJ flashed at the moment. Make a backup before trying it.
I had to compress it before uploading because the limit was 8mb.
Click to expand...
Click to collapse
Wow, will try that! If it fails ill investigate tomorrow.
Kind Regards
TwinAdk
- Via the XDA app
Hello.
How can i push it to system/framework? I tried adb shell when in recovery, but i cannot access the framework folder.. /system/ nothing (only bin?)
Also, adb push gave this:
C:\fastboot>adb push framework-res.apk system/framework/framework-res.apk
failed to copy 'framework-res.apk' to 'system/framework/framework-res.apk': No s
uch file or directory
Click to expand...
Click to collapse
Output from shell, while in recovery (only place adb shell works, except from when the phone is booted, but i tried renaming the apk via a file explorer, the system crashed, lol).
~ # whoami
whoami
root
~ # df -h
df -h
Filesystem Size Used Available Use% Mounted on
tmpfs 488.2M 48.0K 488.1M 0% /dev
/dev/block/mmcblk0p13
315.0M 5.2M 309.7M 2% /cache
Click to expand...
Click to collapse
Any advice?
Put / in front of system. It should be /system/framework/
Sent from my One X
adb works in android, not in recovery
Guich said:
adb works in android, not in recovery
Click to expand...
Click to collapse
It does work in recovery too. You should try it.
Sent from my One X
TToivanen said:
It does work in recovery too. You should try it.
Sent from my One X
Click to expand...
Click to collapse
Ill try to add / in recovery. When i did so in android, i got an error that the filesystem was read only.. I am rooted.
Update: It pushed correctly, but i only see that one file..... After reboot the file was not modified.. Verified with solid explorer.
ls while in recovery:
/system/framework # ls -lah
ls -lah
drwxrwxr-x 2 root root 0 Jan 29 20:28 .
drwxr-xr-x 4 root root 0 Jan 29 20:28 ..
-rw-rw-rw- 1 root root 8.6M Jan 29 16:09 framework-res.apk
Oh well, moved the apk with solid explorer, from sd to system/framework (overwrite exsisting) - phone is rebooting now..
UPDATE: Didnt boot up.. Trying to clear cache and dalvik, then well se.. Think ill have to revert to my dear nandroid
Well, damn it. I replaced the pngs with the files you provided, built and signed without an error. It should be OK but as I said I don't have ICJ installed so troubleshooting is a bit difficult.
Try to do it yourself with apktool.
Sent from my One X
Sv: [Q][THEME] Replacing PNG in system file
Will do. Your apk was considerably smaller than my original, also it struck me that you cannot have guessed my version of the custom rom, and thus the correct apk to use as source. I guess it is modified on each version?
Kind Regards
TwinAdk
- Via the XDA app
Hello.
I tried recreating the APK, using my own framework-res.apk as source.
I also found out how to push to system from CWM - you need to mount /system - DOH!
But it fails.... The phone never boots, i even chmodded the apk with 644, so the permissions are the correct ones..
Back to nandroid backup, and drawing table....
Anyone have any clue as to why the new apk failed? Followed this guide, and loaded the sources to UIsystem,apk and framework-res.apk before editing the APK.
When building the APK i got this output, and it does however not match the output in the guide - the "Could not find sources" does worry me a bit, should it..?
Found the reason for the "could not find sources":
A framework-res.apk is itself the source of other apks( when you install it - apktool if...). So the message that you got is normal.
Click to expand...
Click to collapse
Ref: http://forum.xda-developers.com/showpost.php?p=31832660&postcount=12
The .apk I started with was from 1.5.9 and it was 12mb in size.
Apks tend to lose weight when they are de/recompiled and that's why the finished product was only 8mb.
If the apk method fails, you could build the whole ROM yourself on a linux PC.
Keep me posted!
Sent from my One X
Well, though i used unix before, i dont wish to put the effort into building from source It seems building in a VM fails for many, and it requires quite alot of space...
My apk also lost weight, 8 mb after rebuild.. If the image is there, it does not matter what bitdepth and other fancy settings it was saved with, right? Aslong as the apk was build correctly, and chmodded correctly, the phoen should boot, right (and display an ugly image, if it wants - but at least boot!)
Did you sign the package?
Sent from my One X
No, according to the guide i followed:
Now, final step is signing the apk file.
Remember don't sign the apk if it's a SYSTEM app, unless you have edited the AndroidManifest.xml.
Click to expand...
Click to collapse
I suppose its a system app, as it resides in /system/framework...?
[Tool/Utility][v1.2.0]Apktool Mobile Batch Deodexing - Run Batch Deodex Jobs Using Your Android Device!
*** Disclamer
Your device is shipped without root for a reason. Modifying system files that are normally off limits carries the risk of being caught in a situation where you will be unable to fix the damage unless you plan ahead.
It is wise to not proceed unless you have a means of restoring your device in the event of a catastrophic event and that you are confident in your ability to restore any issues you create.
I am not and will not be responsible for any harm that may come to your device or to your sanity as a result of **** up.
For more on what's expected, new members should help themselves to the video below.
Description
A toolset for performing batch deodexing straight from your device. Comes installable as a flashable zip and can easily be modified by advanced users to suit their needs. Just drop all your odex and corresponding archives into a folder and run one simple terminal command (or use Linux Script Handler within your File Manager) and deodezed versions will be outputted to a separate folder.
I wrote this because Apktool Mobile lacks any batch features.
COMPATIBLE FOR ALL ANDROID DEVICES RUNNING ICS OR LATER!
Project is just listed here because I had to choose a location specific to a certain device when creating the project. Mods, feel free to move if desired.
Learn more about deodexing and the differences between an odexed system and deodexed system
Installed Files/Directories:
/sdcard/bdt - Directory with our smali and baksmali jars as well as directories to place batch jobs in as well as output folders. There is a readme in each folder describing it's function.
/data/misc/bdt - Directory which contains the Java Runtime Environment as well as all dependent libraries.
/system/bin - Two scripts are installed here. The first is "bdt" and contains all path variables in case you need to edit a path (ex. you download newer smali/baksmali versions to use, or change the name of the bdt directory on your /sdcard). This also contains wrapper functions athat do all the work. The second file is "batch-deodex" and once you have placed your odex (and corresponding apk/jar) files into the /sdcard/bdt/files-to-deodex folder open a command prompt and run this script to deodex all the odex files into dex files and then insert into the corresponding archive.
{
"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"
}
Installation Instructions and Usage
Download the latest version from one of the hosts in the downloads section and simply flash it in recovery. You could always manually extract the contents but then you'd also have to chmod quite a bit to set the permissions.
To uninstall, flash the uninstall zip that's also in the downloads section, or manually delete /system/bin/bdt, /system/bin/batch-deodex, /data/misc/bdt folder, and /sdcard/bdt folder.
Batch baksmali/smali
To run a batch decompile, move your odex (or deodexed apk or jars) files into /sdcard/bdt/files-to-deodex and fire a command prompt up and type:
Code:
su
. /system/bin/bdt # Import paths and functions
batch-baksmali
The source folders will be outputted to /sdcard/bdt/smali-source.
To compile a batch of deodexed source folders we just do essentially the same thing. Open up a command prompt and type:
Code:
su
. /system/bin/bdt
bbdth-smali
Doing so will create a dex file for each source folder and this will be outputted to /sdcard/bdt/dex-out.
Batch deodexing
Performing a batch deodex works much the same way. Copy all the odex files and their corresponding apk or jar into /sdcard/bdt/files-to-deodex then open a command prompt up and type:
Code:
su
# no need to import anything for this
batch-deodex
Just that easy. The script may take a while depending on how many files you're deodexing just as with the other scripts so if running a lot be patient.
The deodex script moves all odex files to ../files-to-baksmali and then calls batch-backsmali. Then the script calls batch-smali to create the dex files. After that's done it enumerates through the dex files and finds each one's corresponding archive and once it does it uses the
Code:
zip -jq {archive} classes.dex
to insert classes.dex into the archive without extracting anything or changing any compression settings, etc.
Once complete you'll have your deodexed archives and the script cleans up all other directories. The other two scripts don't do this.
Known Issues
-- Discovered that some ROMs are telling me that my scripts don't exists when they very well do, so of you are seeing a "sh: {scriptname}: The file or directory cannot be found" then just run by using the Linux Script Handler within your File Manager until I figure this out or until the ROM dev gets in touch.
-- I just discovered this error while preparing these test screenshots. It didn't effect the deodexing process though but I'll look into fixing this tomorrow. UPDATE: Haven't looked into this yet as it has no effect on the outcome. I think it's occurring because on the final loop when running a batch and when all is finished it still runs one last time, thinking it's looking for a jar file. Once I get these other minor details done I'll publish on github. Actually there is published code there now, but ir needs to be removed and updated.
Downloads
Batch Deodex Tools 1.2.0 - Box
Batch Deodex Tools 1.2.0 - Dropbox
Uninstall ZIP for 1.1.0
Changelog
Code:
1.2.0 Released: -- 08/21/14
-- fixed an issue causing the /sdcard/BDT folder to not be properly flashed
-- some editing made to the scripts in preparation for uploading to github
1.1.0 Released: -- 06/26/14
-- turned into a stand alone project
-- optimized the scripts
-- flashable in recovery
-- also created flashable zip to uninstall
1.0.1 Released: -- 06/21/14
-- initial release
TO DO
-- Migrate the JRE off /data/... to prepare for Android L. Was going to move to /data/app-lib where it probably should have been to begin but no point now, so will remain in /data/misc/bdt for the time. Rwas more in the Addendum in second post
-- Add Box, Dropbop, and Mega hosts as well. Well having just a Drive and Box host should accommodate the demand. If the demand increases I'll adjust accordingly.
-- Publish code to github.
-- Scratched making this into an APK... Having it as is makes it easier for advanced users to make modifications (use custom files, etc) on the fly
Thanks To/Credits
Code:
* Brut.all for giving us apktool and much more
*
XDA:DevDB Information
Batch Deodex Tools - Android, Tool/Utility for the LG G2
Contributors
MidnightHarvester
Version Information
Status: Stable
Current Stable Version: 1.2.0
Stable Release Date: 2014-08-21
Created 2014-06-22
Last Updated 2014-08-21
Reserved
APPENDUM
Consider this a diary. Dates are when the thoughts or discoveries hit me, not release dates
Aug 15 - After modifying the tookset so it"s Android L ready by moving the JRE to /system/{wherever}, after flashing now the BDT directory doesn't get flashed to the sdcard. I'll need to do a little fiddling with the updater script, then release it once it's working. Granted you can just manually extract and copy that directory over easily but I'd prefer a fully working flaahable..
Aug 19 - Noticed there has been updated smali and baksmali jars, so either an incremental update and most likely just a patch will be worked I n and releaaed. Because of the update I'm also looking at any other files that may have been updated.
Aug 20 - I've discovered that on some devices (specifcally, CloudyG3 1.3), that t
here arr some issues running the scripts via terminal as apparently ... they don't exist. Executing them via Linux Script Handler within a File Manager should work until I figure this out)
Aug 20 - Releases will be migrated over time to my Box account, probably Dropbox account, as well as Mega. Archived releases will also be uploaded, and the OP will be updated as each is moved.
Aug 21 - Fixed a bug preventing the /sdcard/bdt directory from being installed on flash. Also made a few revisions to the code, nothing spectacular. Also uploaded to Box and Dropbox and ditched the Drive host. Incremental update to 1.2 0.
Good job buddy. Keep it up. Will give a try it soon.
Sent from my GT-I9100 using Tapatalk 2
Thanks! I'll be publishing an update in a day or so. I'm creating a stand alone project that won't require root. Right now root is required because the scripts need to access the JRE bin that's located in the data directory of apktool. I'm moving JRE lib (and Java binary) and smali and baksmali jars into a flashable zip.
It'll also be a lot easier to maintain this way. I completely killed my phone yesterday while cleaning up the scripts. After doing a batch deodex as it is now it will clean up the working directories and delete
everything except the deodexed archives.
I modified the paths hoping to create less work in the long run and after testing the modified script by phone rebooted back up and I got "unable to find setup" message and a blank screen. I must have left a "/" off of a path and ended up wiping everything in /sdcard/ ?
The error on boot was caused by the fact I always delete the LG setup app as I never anticipate deleting my SD card. So I was stuck at a black screen with nothing to restore since I wiped the SD card.
Eventually I realized I could pull the notification bar down still, and make it into settings by long pressing a quick toggle. Once I discovered I could open Google Now after enabling it in search settings I was in my way since I could use that to open Chrome and Root Explorer, etc.
I ended up restoring my system back and just wiped /data as well since I already wiped my SD card. Then spent the rest of the day restoring my device and luckily I had most everything backed up onto Drive.
Needless to say no changes were published in yesterday. I can imagine the backlash I would have gotten if I did lol. If I had a penny for each time I've mucked my device up while working on something I'd have, well maybe a dollar but still that's a lot
It shouldn't take long to get the standalone build out. I don't plan on turning the standalone build into an apk though as its easy enough to run via terminal emulator or file manager and take up far less space.
Sent from my VS980 4G using Tapatalk
I'll find another host to upload the install zip to as well as the Drive host in the OP. The zip is too large to attach here. I hope this simplification over installation appeals to more ?
Version 1.1.0 is now live. Installation boils down to just flashing the install zip in recovery. Read OP for additional information on how to use it.
Dang man! You beat me to it hahaha! I had started on this as a personal project for myself earlier today. However, I am wanting to just implement the process strictly through the recovery and by locating/finding all .odex files in my system to later deodex and place back accordingly all without me touching a thing but just running the script. I'm currently digging through your work right now to see if anything may be helpful for what I am aiming to do. Nevertheless, greatly appreciate you sharing this project.
How do you make an odexed apk into am installable apk? I wanna take the LG QVoice apk from an odexed rom and be able to install it like a normal app without having to add it to /system/app or /system/priv-app. Would just deodexing the apk do that?
Skizzy034 said:
How do you make an odexed apk into am installable apk? I wanna take the LG QVoice apk from an odexed rom and be able to install it like a normal app without having to add it to /system/app or /system/priv-app. Would just deodexing the apk do that?
Click to expand...
Click to collapse
You would most likely need to deodex that app and then install it via /data/app.
Make sure that system app you are referring to doesn't use any lib files or other dependencies. Some system apps do and it would be needed to port them over to your device for them to work (and possibly some work on the app itself once decompiled).
Sent from my C525c using Tapatalk
Modding.MyMind said:
You would most likely need to deodex that app and then install it via /data/app.
Make sure that system app you are referring to doesn't use any lib files or other dependencies. Some system apps do and it would be needed to port them over to your device for them to work (and possibly some work on the app itself once decompiled).
Sent from my C525c using Tapatalk
Click to expand...
Click to collapse
Yea I didn't think of lib files for that app. It makes sense it would need it. Thanks.
Modding.MyMind said:
Dang man! You beat me to it hahaha! I had started on this as a personal project for myself earlier today. However, I am wanting to just implement the process strictly through the recovery and by locating/finding all .odex files in my system to later deodex and place back accordingly all without me touching a thing but just running the script. I'm currently digging through your work right now to see if anything may be helpful for what I am aiming to do. Nevertheless, greatly appreciate you sharing this project.
Click to expand...
Click to collapse
That's an awesome idea bro. You'd need the jre in /data/misc/jdr somewhere. You may be able to run it off the scars in recovery since you can set permissions to the /sdcard mount there but not sure.
Create a script that 'finds' all odex files system wide and corresponding archive files and use the run_program edify script command to run the script so that you can deodex everything from recovery with one slide of a button.
There's not too much that would have to be changed in the script other than changing some of working directory variables as you go. Be careful in the batch-deodex script if borrowing from that as that deletes all odex, apk, and jar files in the /BDT/*/ except for the readme files.
Edit: If you need any advice or help on that project hit me up, as I could probably get it working by the end of the day. Well sooner not this day as my son is here but tomorrow.. Sorry I didn't comment the script that much but there wasn't really much to comment, so I mainly just commented the paths.
MidnightHarvester said:
That's an awesome idea bro. You'd need the jre in /data/misc/jdr somewhere. You may be able to run it off the scars in recovery since you can set permissions to the /sdcard mount there but not sure.
Create a script that 'finds' all odex files system wide and corresponding archive files and use the run_program edify script command to run the script so that you can deodex everything from recovery with one slide of a button.
There's not too much that would have to be changed in the script other than changing some of working directory variables as you go. Be careful in the batch-deodex script if borrowing from that as that deletes all odex, apk, and jar files in the /BDT/*/ except for the readme files.
Click to expand...
Click to collapse
Thanks. I had already set up my project folder along with my deodex script before I came across this thread (what were the odds lol). Was having issues getting the script to work at all until I looked at yours and notice you were exporting the LD_LIBRARY path. I implemented that idea in my script and now I'm getting a few failures for linking executables based on certain commands such as grep for example.
The script is a combination of premade works from different people which I have put together as followed. Currently, the script is a bit rough on what I am aiming to do but my goal for now is to get it to successfully find and deodex all necessary files. Once accomplished, I will proceed forward.
Script:
PHP:
#!/sbin/sh
cd $(dirname "$0")
DEODEXED_APK="/data/DEODEXED.log"
if [ ! -f $DEODEXED_APK ]; then
busybox touch $DEODEXED_APK;
fi;
prop="/system"
smalibaksmali_dir="/data/local/tmp/smali"
java_dir="/data/local/tmp/jvm/java-7-openjdk-armhf/jre/bin/java"
#tmp="$(dirname "$1")"
export LD_LIBRARY_PATH="/data/local/tmp/jvm/java-7-openjdk-armhf"
# Deodexes every .odex file
DEODEX() {
local API="$(busybox grep "ro.build.version.sdk" "$prop/build.prop" | busybox cut -d'=' -f2)"
echo "Detected API level $API" >> $DEODEXED_APK
busybox find "$prop" -type f -iname "*.odex" | while read line; do
local FILE="$(basename "$line")"
local FILEDIR="$(dirname "$line")"
echo "Deodexing $FILE" >> $DEODEXED_APK
echo "Disassembling $FILE..." >> $DEODEXED_APK
$java_dir -Xmx512m -jar $smalibacksmali_dir/baksmali-2.0.2.jar -a "$API" -d "$prop/framework" -x "$FILEDIR/$FILE"
if [[ $? -ne 0 ]]; then
echo "ERROR DEODEXING $FILE, ABORTING!" >> $DEODEXED_APK
rm -rf out
return 1
fi
echo "Assembling into classes.dex..."
$java_dir -Xmx512m -jar $smalibacksmali_dir/smali-2.0.2.jar -a "$API" -o classes.dex out
if [[ ! -e classes.dex ]]; then
echo "ERROR DEODEXING $FILE, ABORTING!" >> $DEODEXED_APK
rm -rf out
return 1
fi
FILE="$(busybox echo "$FILE" | busybox rev | busybox cut -d'.' -f2- | busybox rev)"
local FOUND=0
for EXTENSION in "jar" "apk"; do
if [[ -e "$FILEDIR/$FILE.$EXTENSION" ]]; then
echo "Packing back into $FILE.$EXTENSION..."
zip -rq "$FILEDIR/$FILE.$EXTENSION" classes.dex
rm -f classes.dex
FOUND=1
break
fi
done
if [[ "$FOUND" -eq 0 ]]; then
echo "ERROR, No output found?!"
rm -rf out
rm -f classes.dex
return 1
fi
rm -f "$line"
rm -rf out
done
echo "Deodexing finished"
}
# Start Processing Here
DEODEX
Sent from my C525c using Tapatalk
Saved while I read script after kid stops jumping on me lol
LD_LIBRARY_PATH threw me off to. Somewhere in java or bad small or small expects it to point to the data/data/per.pqy.apktool/lix files.
MidnightHarvester said:
Exporting LD_LIBRARY_PATH and pointing that to wherever you have the lib files stored which in apktool are in /data/data/per.pqy.apktool/lix is key cause either java or baksmali or small reference that Android environment variable.
That took me a while too until I realized what I needed to do. You can cut down on size quite a bit and copy the lib files in /data/misc/bdt in my project as those are the only ones needed for smali and baksmali. With that figured out you'll have it done in no time. You could always flash these tools and then make a script like
Code:
# import my 'bdt' script
. /system/bin/bdt
# copy all odex, apks, and jars into files-to-deodex - could
# use lath variables instead of full pathnames
cp /system/app/. *odex /sdcard/BDT/files-to-deeodex
cp /system/app/. *apk /sdcard/BDT/files-to-deeodex
cp /system/priv-app/. *odex /sdcard/BDT/files-to-deeodex
cp /system/priv-app/. *apk /sdcard/BDT/files-to-deeodex
cp /system/framework/. *odex /sdcard/BDT/files-to-deeodex
cp /system/framework. *apk /sdcard/BDT/files-to-deeodex
# call batch-deodex function
batch-deodex
Then make sure all the deoxed archives are in the deodexed-out directory and if check a few make sure classes. dex are in them lol. Then if running from recovery, copy the new deodexed archives into appropriate places and set permissions (recursively unless you're insane ).
Sounds a lot like what you're doing though. Also gives me an idea for version 2 which also gives the option to deoxed the entire system and then create a flushable zip with all the deodexed archives inside. Will probably work on that tomorrow after my son is gone. Keep me posted ed on the progress on your work though as I haven't had much in out back regarding this.
Click to expand...
Click to collapse
I like your idea about making a flashable zip once it is done. I have it working now.
I made a small typo which resolved my earlier problem.
I used "smalibaksmali_dir" as my variable which pointed to the smali directory.
However, later in my script I spelled 'bak' with a 'c' - smalibacksmali_dir.
I will keep you posted man. I was shocked when i found your thread because prior to I had spoken with a relative about my project and how it appeared no one had done this. Then I found you lol. Kudos for your work bro.
Sent from my C525c using Tapatalk
---------- Post added at 07:54 PM ---------- Previous post was at 06:58 PM ----------
Here is a screenshot with my personal script/project running.
Sent from my C525c using Tapatalk
@MidnightHarvester, my script is working great now. However, I noticed that this bogs down the device greatly. To deodex the Rom from the device will take WAY TOO LONG then if you were to do so using a descent computer. However, if merely deodexing an app here or an app there then it's fine and tolerable but not for all *.odex files at once lol.
There has to be some way to make this move along faster. Otherwise, the wait begins for phones with better processors and more ram.
Sent from my C525c using Tapatalk
Modding.MyMind said:
@MidnightHarvester, my script is working great now. However, I noticed that this bogs down the device greatly. To deodex the Rom from the device will take WAY TOO LONG then if you were to do so using a descent computer. However, if merely deodexing an app here or an app there then it's fine and tolerable but not for all *.odex files at once lol.
There has to be some way to make this move along faster. Otherwise, the wait begins for phones with better processors and more ram.
Sent from my C525c using Tapatalk
Click to expand...
Click to collapse
I'm pretty sure that the scripts are only utilizing one thread (unless I'm mistaken). Is there a way in bash to start a new thread or at least call on a binary and pass over a callback function? I'll have to look into it.
When I deodexing my /system/priv-app folder I just let it run overnight. There isn't anything really in the script I can do to speed things up much as the majority of the work is being used during the baksmali and smali calls.
That's one reason I didn't echo any output like your script did which I really wanted to but I've found that things tend to run faster without output being sent to stdout. Might not be a huge hit but...
Maybe if I an get it to deodex in recovery nobody would be competing for resources? Definitely keep updated on the thread as this isn't anywhere near done yet.
I'm glad I found somebody else working on this. For a while I thought no one was that interested since there has been PC tools to do this for ages. Problem is for some (like myself) is that THIS is my PC .
I'm trying to think on how to speed things up and drawing a blank. There aren't enough odex files in all of /system for there to be issued with looping. I think the baksmaling and smaling just take time. Take a look at Matt's old Privacy Blocker app (same Matt that developed xUltimate deodex tools on PC). It takes ages to baksmali and smali there as well.
My first early version though was even worse. I actually was decompiling resources as well in the archive and creating a smali folder and moving the decompiler source as well into there and recompiling the entire apk/jar lol. Don't ask me why.
I need to borrow an idea from you as well and let the user set API level. Normally omitting it should be fine (defaults to latest doesn't it?) but having the choices might help of anyone comes across a picky app.
In the meantime if deodexing am entire folder I'd recommend just doing it at night while you sleep. If you can, use a tool to enable all four cores and set all cores to performance mode and leave the Ax plugged in. *shrugs* I have AIDE installed so if I can get into the baksmali/smali source code maybe I can at least have a look.
Edit: I'm running a multithreading test now. You can run a command in another thread by placing '&' after the command. If it works I'll update.
@MidnightHarvester, I too use my device as it were my own computer which is why I make up the things which I do lol. Seems we have much in common. I actually learned about the idea of using multithreads with '&' just the other night as I was researching for ways to optimize my script. Another method is to use 'wait' which will put any future commands on hold until the current one is finished. That should out less stress on the cpu. Another idea is to limit the use of pipes. The more pipes being implemented the more usage the cpu has to dish out.
I believe flashing and running this in the recovery may speed this up as you mentioned that it would required less resources being used during operations, but the question is how much would the improvement be lol.
Keep me updated with using multithreads and feel free to take away whatever you find to be useful from my deodex script.
Expect many future changes to it to optimize it as much as possible.
In addition, using 'while read line' can increase the performance on speed if the following commands afterwards are not causing an overhaul.
Sent from my C525c using Tapatalk
---------- Post added at 03:10 PM ---------- Previous post was at 03:04 PM ----------
I will be pushing my project to my github later on today. Will be easier to keep up with any changes I make. Will take note in README.md that the project is still in development and to use with GRAVE caution lol.
Sent from my C525c using Tapatalk
---------- Post added at 03:13 PM ---------- Previous post was at 03:10 PM ----------
It's ashame I don't currently have any way to build the smali/baksmali sources from my phone.
Need to look in to it and see if any flags could optimize the final build to produce a more proficient workload in performance.
Sent from my C525c using Tapatalk
So, I am working on getting my project to work in the recovery. Looks like some troubleshooting is in store.
From my recovery.log:
Code:
about to run program [/tmp/deodex.sh] with 1 args
CANNOT LINK EXECUTABLE: could not load library "libc.so" needed by "busybox"; caused by library "libc.so" not found
CANNOT LINK EXECUTABLE: could not load library "libc.so" needed by "busybox"; caused by library "libc.so" not found
CANNOT LINK EXECUTABLE: could not load library "libc.so" needed by "busybox"; caused by library "libc.so" not found
Detected API level
CANNOT LINK EXECUTABLE: could not load library "libc.so" needed by "busybox"; caused by library "libc.so" not found
CANNOT LINK EXECUTABLE: could not load library "libc.so" needed by "sort"; caused by library "libc.so" not found
Deodexing finished
CANNOT LINK EXECUTABLE: could not load library "libc.so" needed by "busybox"; caused by library "libc.so" not found
run_program: child exited with status 1
Sent from my C525c using Tapatalk
---------- Post added at 05:33 PM ---------- Previous post was at 05:00 PM ----------
Resolved my problem. Export path for sbin was being overwritten by the script so it prevented busybox from being used. To resolve it you just need to insure that sbin is included to the path as well.
Edit: this was tested with TWRP
PHP:
export LD_LIBRARY_PATH="/sbin":"/tmp/jvm/java-7-openjdk-armhf"
Sent from my C525c using Tapatalk
:cyclop
Modding.MyMind said:
I like your idea about making a flashable zip once it is done. I have it working now.
I made a small typo which resolved my earlier problem.
I used "smalibaksmali_dir" as my variable which pointed to the smali directory.
However, later in my script I spelled 'bak' with a 'c' - smalibacksmali_dir.
I will keep you posted man. I was shocked when i found your thread because prior to I had spoken with a relative about my project and how it appeared no one had done this. Then I found you lol. Kudos for your work bro.
Sent from my C525c using Tapatalk
---------- Post added at 07:54 PM ---------- Previous post was at 06:58 PM ----------
Here is a screenshot with my personal script/project running.
Sent from my C525c using Tapatalk
Click to expand...
Click to collapse
No probs cyclops. Between family I don't get a chance to get on hereuch but that's all changing here Very soon. I really glad you're taking off where i left off. I saw that there's a GUI out now I haven't read the thread yet so not sure if it's your work or not, but I'm glad others are running with it. Beauty of open source. I rewrote a lot and published to github under GPL but unfortunately during the rewriting I broke something and haven't been back to fox it yet.
I need to as yje code is streamlined as well as being on github open where all can see and make commits. I would get on that but it seems the GUI version has taken off and this is more for legacy but who knows
I also noticed someone else had a btch deodex script published on github though no as robust but I should have borrowed off him instead of reinventing the wheel. Too bad I didn't see that until later.
Inteied my luck at multithreading the shell commands but that would require a LOT of counters keeping track of example which processes are still decompiling and which are recompiling to avoid collisions, so I lwdr it be for now. And now that the GUI is out maybe ibcan lend a hand there if needed.
Is the GUI just a command line GUI or an actual app?I'll look when done reading. If it's an actual app multithreading would be much easier and i wouldn't mind helping out on the team. If its a shell GUI like old Windows apktool versions I commend you. Takes patience to mundnely write out the interface
Either way glas there's interest and happy others with more time to devote can carry on.
@MidnightHarvester
Hello sir,
I'm trying to decompile settings.apk with apktool for android. It won't do it correctly, and I'm wondering if it's because it should be deodexed first. The only 2 I've been able to recompile are htc-resources.apk and framework-res.apk on HTC Evo 3D 4.0.3ics
That's first question, will be able to recompile settings after deodex?
I don't understand this command,
. /system/bin/bdt
bbdth-smali
Are these on one line, separate?
I'm fairly new to modding, will you help me please?
The commands listed, when pasted into terminal, errors a lot. Using SManager to run works, but what is got from it isn't a deodexed app.-
When running batch-deodex(I'm using bdt from v.1.1.0 because it throws out several errors with bdt from v.1.2.0, I haven't looked through it, so I'm not sure if it's just not echo ing them), well, first I put the settings.apk in files-to-deodex folder, create odex of it in apktool(is this right thing to do?) Settings.odex is created in same folder, then ran batch-deodex.
The exact same settings.odex is placed into files-to-baksmali. And same settings.apk is placed in deodexed-out. In the dex-out folder are same 2 files called classes.dex and Settings.dex. and in the smali-source is Settings folder with a boat load of smalis.
After it's done:
exec sh '/system/bin/batch-deodex'
in/batch-deodex' <
rm failed for -rf, No such file or directory
rm failed for -f, No such file or directory
cp: can't stat '/sdcard/BDT/files-to-deodex/*.jar': No such file or directory
rm failed for -f, No such file or directory
rm failed for -f, No such file or directory
rm failed for -f, No such file or directory
rm failed for -f, No such file or directory
rm failed for -f, No such file or directory
And here's the log
Error occured while loading boot class path files. Aborting. org.jf.util.ExceptionWithContext: Cannot locate boot class path file /system/framework/conscrypt.odex at org.jf.dexlib2.analysis.ClassPath.loadClassPathEntry(ClassPat h.java:217) at org.jf.dexlib2.analysis.ClassPath.fromClassPath(ClassPath.jav a:161) at org.jf.baksmali.baksmali.disassembleDexFile(baksmali.java:59) at org.jf.baksmali.main.main(main.java:274)
What am I doing wrong?
How do I get to having deodexed app?
Sent from above using xparent tapatalk blue