There are some games played in fullscreen which don't hide the set of black buttons containing home, search, menu & back. The problem is they are blocking some part of the screen on the games, and in some cases I'm unable to press control buttons hidden underneath these buttons.
Is there a way to hide them when playing this kind of games?
I wish... I think using the power button to bring up the on screen controls would be a good way to do it.
Ok, here's what I did:
1) Using apktool decode the apk (e.g. apktool d spiderman.apk spiderman)
2) Edit AndroidManifest.xml, and add this line <uses-permission android:name="archos.permission.FULLSCREEN.FULL" />
3) Using apktool encode the apk (e.g. apktool b spiderman spiderman-modified.apk)
4) Re-sign the apk. (java -jar signapk.jar java -jar signapk.jar certificate.x509.pem key.pk8 spiderman-modified.apk spiderman-modified-signed.apk)
5) Uninstall app from Archos. Install the modified signed apk.
constant7010 said:
Ok, here's what I did:
1) Using apktool decode the apk (e.g. apktool d spiderman.apk spiderman)
2) Edit AndroidManifest.xml, and add this line <uses-permission android:name="archos.permission.FULLSCREEN.FULL" />
3) Using apktool encode the apk (e.g. apktool b spiderman spiderman-modified.apk)
4) Re-sign the apk. (java -jar signapk.jar java -jar signapk.jar certificate.x509.pem key.pk8 spiderman-modified.apk spiderman-modified-signed.apk)
5) Uninstall app from Archos. Install the modified signed apk.
Click to expand...
Click to collapse
For me as rooky, that sounds as you have edited the power button controls to have further option to let the buttons disappear?
How can I do the same? Unfortunately I have not the skills to do the steps you have described...
Can you post us the modified apk file?
Thanks a lot!!!
bunique
This instructions if for windows. This will remove the system touchbar (containing home, back, search and menu soft buttons), while playing the game.
You need to download the following tools:
- JDK or JRE from java.sun.com.
- Get apktool from here.
- Get SignApk from here.
1) Install JDK or JRE. Make sure <JAVA_HOME>/jre/bin is in your path.
2) Extract apktool & signapk in windows in a directory of your choice. In my case, I extracted them on the same directory in C:\apktool.
3) Get your apk file, and put it into the directory where you extracted apktool and signapk. It doesn't have to be here, but for simplicity I put it in the same directory.
4) Open command line session from windows, and go to the directory where you install apktool/signapk (cd \apktool)
5) Assuming your apk is spiderman.apk, issue this command:
Code:
apktool d spiderman.apk spiderman
This will create a directory spiderman which contains the decoded set of files from spiderman.apk.
6) Under the spiderman directory, there is AndroidManifest.xml. Using a text editor, open it. You will see several uses-permission lines. Append this line at the last user-permission and save.
<uses-permission android:name="archos.permission.FULLSCREEN.FULL" />
7) Now on the command line window, issue the following command:
Code:
apktool b spiderman spiderman-modified.apk
This will repack your files with the modified AndroidManifest.xml into spiderman-modified.apk.
8) Sign the modified apk.
Code:
java -jar signapk.jar certificate.x509.pem key.pk8 spiderman-modified.apk spiderman-modified-signed.apk
SignApk contains test certificate & private key which I used in the command line.
9) Upload spiderman-modified-signed.apk into your device. Uninstall your previously installed spiderman first. Then install this new modified apk.
Please note I'm just setting spiderman as example. Please replace this with whatever your apk is.
This unpack and re-pack sounds really interesting and your descriptions are very clear, even for someone like me!
My only questions are;
1. should this only be done on games that have a true 'Exit Game' option?
2. and if not, how would you exit said game?
3. would this method work for any game/program?
Thanks in advance.
Yes, this should only be done on the games which has 'Exit Game' possibly on the 'Main Menu' of the game. Otherwise the only way to exit is to hold power button and poweroff/reboot the device. It is still desirable that when you hold power button there's an option to show/hide the touchbar, but until a custom firmware comes up with this feature, this is what I can think of so far. I'm a bit desperate since I get so frustrated when playing games such as spiderman & avatar and i accidentaly press the 'home' button.
I think this will work for games which are rendered on full screen (i.e. notification bar is also hidden). So far I've only tested this on spiderman, avatar & plants vs. zombies.
Thanks so much for this info, constant! I think I've found a much quicker way of adding the fullscreen property though. It can be done using apk edit, a program written by Anoniem 100.
Here's the link:
http://forum.xda-developers.com/showthread.php?t=890199
Instructions:
1) Download the .zip, extract APK Edit.exe and run it.
2) Immediately when you run APK Edit, an Open window will come up. Select the .apk you want to edit. The .apk should open in the program.
3) Click on the content tab. Towards the bottom there will be a heading called "Other content." Scroll down the box and right click on AndroidManifest.xml and open it with your favorite text editor.
4) Add the following line to the list of uses-permission entries:
Code:
<uses-permission android:name="archos.permission.FULLSCREEN.FULL" />
5) Save the xml file after editing. Click "Apply" in APK Edit and the changes will be saved in the apk file. A backup will also be saved in case something was edited incorrectly. Click OK to close the confirmation window and close the program.
That's all there is too it. I didn't need to resign the apk or anything. I just dragged it back onto my Archos 70, uninstalled Assassin's Creed and reinstalled it from the new .apk. It kept the game data and the game ran in fullscreen with no menu buttons. It was nice not having the game controls obstructed. I can't wait to try this out with other games. Thanks!
Nice find tdude. I'll use it on my next games. Thanks.
Sent from my GT-I9000 using Tapatalk
wow, I think with this description it is possible to reproduce, even for me!
I will try it this evening.
But isn't there a way to solve that fullscreen problem generally.
I mean is it possible to extend the onscreen menu (when you longpress the powerbutton: Flight Mode, Reboot etc.) with an additional menu item "Fullscreen (enable/disable)"?
This would solve the problem even with other applications....
Will Archos perhaps implement such an option in the next firmware?
bunique73 said:
wow, I think with this description it is possible to reproduce, even for me!
I will try it this evening.
But isn't there a way to solve that fullscreen problem generally.
I mean is it possible to extend the onscreen menu (when you longpress the powerbutton: Flight Mode, Reboot etc.) with an additional menu item "Fullscreen (enable/disable)"?
This would solve the problem even with other applications....
Will Archos perhaps implement such an option in the next firmware?
Click to expand...
Click to collapse
We can only hope! There's been a lot of buzz about this among Archos owners so hopefully they're taking note of it and will include it in the next firmware. Flash is supposed to be released officially for Gen8 later this month so hopefully there will be a new firmware to go along with it, but unfortunately all we've heard from Archos is news about Flash.
I think it should be that the buttons are hidden normally and a quick tap on the power button brings them up or hides them. A 1 second press turns off the display and a 2 or 3 second press brings up the power menu.
Related
First let me note that all credit goes to FxN. I simply am updating the code for the Droid 2. Thank you for all the work you did FxN. Also, this is only for DeOdexed phones.
NOTE BEFORE YOU START:
Standard disclaimer, I don't guarantee anything that might happen after following these steps, and I mean anything!! These steps worked for me and I have tried to include every minute step!
1. Connect phone using USB and check that you can see your device using: adb devices
2. in your SDK/tools directory from command line do:
PHP:
adb pull /system/framework/services.jar services.jar
3. Make a backup of the services.jar file that just popped in the tools folder just in case!
4. Download smali and baksmali from http://code.google.com/p/smali/ and place them in the tools folder. Rename the files to baksmali.jar and smali.jar to save on typing later
5. Open the services.jar file with something such as winrar or 7zip or whatever you prefer
6. Copy out the classes.dex file to your SKD/tools folder
7. run following from command line:
PHP:
java -jar baksmali.jar -o classout/ classes.dex
8. Now browse to your new folders classout/com/android/server/status
9. Open the file StatusBarIcon.smali in something like notepad or context or any text editor
10. Locate a line that says: .line 61, under this line it should have something like:
PHP:
const/high16 v6, -0x100
11. Change this to say:
PHP:
const/high16 v6, -0x1
12. Save the file
13. Now back to the command line and from your SDK/tools folder run:
PHP:
java -Xmx512M -jar smali.jar classout/ -o new-classes.dex
14. If the above finishes without errors you should have a file called new-classes.dex in your SDK/tools folder now that is the same size as your classes.dex file.
15. Rename the old classes.dex file to classes-old.dex and rename the new-classes.dex file to classes.dex
16. Open the services.jar file with your archiving tool again from step 5 and replace the existing classes.dex file with our new classes.dex we just created.
17. From command line run:
PHP:
adb remount
18. also from command line:
PHP:
adb push services.jar /system/framework/
19. Finally run:
PHP:
adb shell reboot
On step 11, this is setting the font to red. If you want white change the line to
PHP:
const v6, -0x1
Original FxN Post is sourced:http://forum.xda-developers.com/showthread.php?t=549309
Could you post a white services.jar?
I've been trying to get this to happen for a while. I thought it had to do with the method of deodexing, but it turns out it may be the services.jar itself. i've talked Xeudoxus, and he's going to take a look. Also, the way he's going to do it, will be incorporated into xUltimate, so that will make this process a billion times easier.
Here you go.
Rename .rar to .jar
theecho said:
Here you go.
Rename .rar to .jar
Click to expand...
Click to collapse
does this change ALL status bar text to white or just the clock?
also, would it work on nondeodexed phones?
Currently just the clock. As for the non-deodexed not sure..you should pull you current and push this and let us know
theecho said:
Currently just the clock. As for the non-deodexed not sure..you should pull you current and push this and let us know
Click to expand...
Click to collapse
im not sure how this is valuable if the other statbar text is gonna remain black.
have to start somewhere. Im working on the other portions just need to find where they are stored.
theecho said:
have to start somewhere. Im working on the other portions just need to find where they are stored.
Click to expand...
Click to collapse
i _thought_ they were in framework-res color but i think im wrong there.
I know that there are some default values stored in the status_bar.xml as i have changed the active action such as preparing sd card and stuff like that. I am trying to at least change the date before proceeding with my theme.
theecho said:
Currently just the clock. As for the non-deodexed not sure..you should pull you current and push this and let us know
Click to expand...
Click to collapse
didnt work. guess it wont if you have:
services.jar
services.odex
not sure how to make them one file.
http://www.droidxforums.com/forum/droid-x-themes/4620-how-manually-deodex-your-phone.html
check that out.
theecho said:
http://www.droidxforums.com/forum/droid-x-themes/4620-how-manually-deodex-your-phone.html
check that out.
Click to expand...
Click to collapse
this worked great thanks. gonna try the white services.jar soon.
white services.jar works great. now if we can just get the rest of the text in white we can go back to the black bg themes
all white status bar. Again change .rar to .jar
theecho said:
all white status bar. Again change .rar to .jar
Click to expand...
Click to collapse
getting closer.. notifications are still black text.
do you mean the pictures? like the tiny icons?
Screenshot of new wifi icon
i made some screen shots.. first one should say the sms text but its black so you dont see it.. second has some list items all black..
those arent the status bar and are not controlled by services.jar.
Try this framework.apk and tell me if you sms text is white.
theecho said:
those arent the status bar and are not controlled by services.jar.
Try this framework.apk and tell me if you sms text is white.
Click to expand...
Click to collapse
yep, this fixed the notification colors to white. can you tell me what portion of this is for the color change so that i can only apply that portion.
do you know which file affects the dropdown list text colors?
not yet i do not that was in the status_bar.xml located in res/layout/
hit me up on gtalk
How to theme
Samsung Vibrant Edition
Disclaimer: this guide is not idiot proof! You must have 1/2 a brain, 1/4 a brain will not work! Currently we have no way to know if you actually have 1/4 a brain or 1/2 so please take caution!
Click to expand...
Click to collapse
If you have extra images in your framework folders, it may cause problems later.. so try not to copy & paste or add extra images! - jumaaneface
Click to expand...
Click to collapse
What you will need:
-Apk Manager (Click)
-Android SDK (Click)
-An image editor, Adobe Photoshop is recommended!
-One brain.. (Edit: Half a brain is needed, not the full thing)
-Two hands..
-Fingers, 10 of them recommended!
-framework-res.apk
-twframework-res.apk
-services.jar (If you want to change the clock color)
How-to edit the apks:
1.) Get your two apk files (framework-res.apk & twframework-res.apk)
2.) Place them in apk-manager/place-apk-here-for-modding/
3.) Open apk-manager/script.bat
4.) Select option 22
5.) Select framework-res.apk
6.) Select option 1
7.) Select option 22
8.) Select twframework-res.apk
9.) Select option 1
10.) Go to apk-manager/projects/framework-res.apk/res/drawable-hdpi (or /drawable-hdpi-v4)
11.) Edit the .png files that you would like to change
12.) Go to apk-manager/projects/twframework-res/apk/res/drawable-hdpi (or /drawable-hdpi-v4)
13.) Edit the .png files that you would like to change
14.) Go back to script.bat
15.) Select option 22
16.) Select framework-res.apk
17.) Select option 3
18.) Select option 22
19.) Select twframework-res.apk
20.) Select option 3
(Don't zipalign)
21.) There will be two files in your place-here-for-modding folder.. They are called unsingedframework-res.apk & unsingedtwframework-res.apk just backup the originals, and delete the unsinged from part from the two new files.
How-to edit services.jar, clock color:
1.) Go to your SDK folder.. example: C:\android-sdk-windows\tools
2.) Get your services.jar file & open it with winrar
3.) Take the classes.dex from it & put it in your android-sdk-windows\tools\ folder
4.) Open CMD
5.) Run the following command: "CD C:\android-sdk-windows\tools" (directory may not be the same)
6.) Run the following command: "java -jar baksmali.jar -o classout/ classes.dex"
7.) Go to classout\com\android\server\status\StatusBarIcon.smali
8.) On line 34 it will look something like: "const/4 v7, -0x1"
9.) On line 34 change the above to: "const v7, 0xffffff" (That will be black)
10.) Compile the classes.dex by using this command: "java -Xmx512M -jar smali.jar classout/ -o new-classes.dex"
11.) Get the new-classes.dex from android-sdk-windows\tools\ folder & move it to your desktop
12.) Rename new-classes.dex to classes.dex
13.) Re-open the services.jar using winrar & past your new classes.dex in there
(Notice: After editing the clock color, it will take longer to boot the first time! Be patient!)
I may update this if people need an even easier guide...
I wrote this a while ago, and just had it on my forums.
Original: Click here
Helpful things:
"How to change colors from standard hex to smali code" - Tonicacid
"How to use html colors for changing the clock" - Master (me)
Nice dude thanks
This is awesome.
shouldnt you be able to change the ffffff in "const v7, 0xffffff" to whatever color you want?
Yeah, you can change it to whatever you want.. When I get home I'll add the directions to change the text color in the pull down and market downloads...
Tonicacid said:
shouldnt you be able to change the ffffff in "const v7, 0xffffff" to whatever color you want?
Click to expand...
Click to collapse
It would actually be
"const v7, 0xffff0000" for red, etc. But yes, you can change that value.
Possibly one of the most helpful threads. Just enough to make me feel I have 1/2 a brain.
stuck
Hey I'm new to this and first of all thank you so much for this!
Second I'm having a problem, I'm stuck at "java -Xmx512M -jar smali.jar classout/ -o new-classes.dex"
I keep getting "classout\com\android\server\status\StatusBarIcon.smali[0,0] 10145074 connot fit into a short"
I'm trying to change the status bar clock to Green.
Thank you again.
r6kid said:
Hey I'm new to this and first of all thank you so much for this!
Second I'm having a problem, I'm stuck at "java -Xmx512M -jar smali.jar classout/ -o new-classes.dex"
I keep getting "classout\com\android\server\status\StatusBarIcon.smali[0,0] 10145074 connot fit into a short"
I'm trying to change the status bar clock to Green.
Thank you again.
Click to expand...
Click to collapse
What hex code are you using
Sent from my SGH-T959 using XDA App
Sorry I wasn't using my half a brain I found my mess up I over looked the "const/4"
I will take it that I don't need apk manager. Just need to unpack, repack, and sign. I could also just use a Hex editor to change the colors on the things I would like to change such as date, notification text, etc.. Just like I did with the G1.
toeshot said:
I will take it that I don't need apk manager. Just need to unpack, repack, and sign. I could also just use a Hex editor to change the colors on the things I would like to change such as date, notification text, etc.. Just like I did with the G1.
Click to expand...
Click to collapse
I am pretty sure you can't use Hexedit to edit the Clock. You need to decompile it.
Also, you don't sign /system apks
Awesome! I barely qualify as a 1/2 brain. ApkManager is sweet simple program that does the job. In the many times I have used it, I noticed that recompilation of the files are not clean after images have been change/edit. So I always optimize images inside (option 2) everytime I recompile. Does this help and worth doing?
BTW: what xml editor are you guys using? Some of the ones that I downloaded are crap.
Tonicacid said:
What hex code are you using
Sent from my SGH-T959 using XDA App
Click to expand...
Click to collapse
I used "9acd32" but my clock isnt showing up at all now, I should be able to flash this with NinjaMorph right? or do I need to go in and replace it?
Master™ said:
I am pretty sure you can't use Hexedit to edit the Clock. You need to decompile it.
Also, you don't sign /system apks
Click to expand...
Click to collapse
ya I have to smali, to edit the clock. I was just wondering if apk manager offered anything out of unpacking the file.
r6kid said:
I used "9acd32" but my clock isnt showing up at all now, I should be able to flash this with NinjaMorph right? or do I need to go in and replace it?
Click to expand...
Click to collapse
Use the color code 6532CD for that color.
Sent from my SGH-T959 using XDA App
Tonicacid said:
Use the color code 6532CD for that color.
Sent from my SGH-T959 using XDA App
Click to expand...
Click to collapse
I'm still getting a no show for the clock?
r6kid said:
I'm still getting a no show for the clock?
Click to expand...
Click to collapse
Can you post the code you used
Sent from my SGH-T959 using XDA App
".prologue
const v7, 0x6532CD"
r6kid said:
".prologue
const v7, 0x6532CD"
Click to expand...
Click to collapse
This is a dumb question but your not putting the " marks in are you?
Sent from my SGH-T959 using XDA App
hello everyone
I have updated to kennethpenn's 4.5.91 Gingerbread Beta 4 (must say, it is truly a phenomally put together build !)
I have also noticed that many of the mods that i had applied to 1.8.3 have not been updated for 4.5.91, so i decided to make the changes myself.
Now, I have a pretty decent knowledge of Unix-based operating systems ( I have used Red Hat Linux, Ubuntu, SUSe Linux, OpenBSD, FreeBSD, Solaris, and now OS X) however, I would like to expand my knowledge to include Android.
The first one I attempted to do myself was the Wake on Volume Keys mod.
This is a very simple change to the android.policy.jar file, as you all well know.
For this, I used Windows XP, simply for the fact that I have 7zip and PeaZip installed on it. However, I can do all of this on OS X as well. The file archiver applications I have on OS X are:
1. The Unarchiver
2. Keka
I am going to list my method of applying this edit, and i would ask that someone with solid knowledge on this subject give me their feedback and guidance.
---------------------------------------------------------
My Method of editing android.policy.jar
---------------------------------------------------------
1. Using Root Explorer, I made a copy of /system/framework on my External SD Card
2. Mounting the Phone for USB Mass Storage on Windows XP that I have running in VirtualBox on my Macbook Pro, I moved the copy of the /system/framework directory to my Desktop
3. I downloaded smali-1.2.6.jar and baksmali-1.2.6.jar from code.google.com/p/smali/
4. I placed both of these .jar files in the copy of the framework-edited directory that I created on my Desktop
5. I renamed smali-1.2.6.jar to smali.jar and baksmali-1.2.6.jar to baksmali.jar for simplicity's sake
6. I moved the android.policy.jar file to /framework-edited directory on my Desktop
7. Using 7zip (I also have PeaZip, but for this, I used 7zip, if you think I should use PeaZip, please tell me) I extracted the files from android.policy.jar to end up with classes.dex and META-INF. I then moved classes.dex to /framework-edited so it is in the same directory as smali.jar and baksmali.jar
8. In Command Prompt, I entered:
Code:
cd C:\Documents and Settings\Owner\Desktop\framework-edited
in order to be working from the proper location where my files are located
9. Now, having Command Prompt working in the proper location, I entered the following commands:
Code:
java -jar baksmali.jar -o classout/ classes.dex
to create a new directory within /framework-edited called /framework-edited/classout
10. I then opened the /classout directory, and navigated to /classout/com/android/internal/policy/impl/ and opened the file KeyguardViewMediator.smali with Notepad
11. I used [Ctrl] + [F] to locate the line:
private isWakeKeyWhenKeyguardShowing(I)Z
12. I then looked at the lines DIRECTLY below the above line, and following the Original Post on how to manually apply this modification, I removed lines:
0x18
0x19
13. Upon removing these lines, I simply did a File -> Save As -> KeyguardViewMediator.smali and saved the file to my desktop
14. I [Cut] + [Pasted] the edited KeyguardViewMediator.smali file back to /classout/com/android/internal/policy/impl/ and replaced the original KeyguardViewMediator.smali file
15. With the edited KeyguardViewMediator.smali file in place, I went back to Command Prompt and entered the following commands:
Code:
java -Xmx512M -jar smali.jar classout/ -o new-classes.dex
To create a new file called new-classes.dex
16. Changing the name of new-classes.dex to classes.dex, I took the original META-INF file, and my newly created classes.dex files, and, using 7zip, created a new android.policy.zip archive
17. I renamed my newly created android.policy.zip to android.policy.jar, and transferred it to my External SD Card
18. Using Root Explorer, I navigated to /system/framework on my phone, and renamed android.policy.jar to 1122android.policy.jar.bac and [Copy] + [Pasted] my edited android.policy.jar to /system/framework
19. I then immediately powered off my phone, and rebooted into CWM Recovery, and cleared my Dalvik Cache, then rebooted the phone normally through CWM Recovery.
At this point, to my knowledge, I had successfully edited my android.policy.jar file and had manually added the Wake on Volume Keys modification, however, once the phone was fully booted and showing my lockscreen, I unlocked the phone as normal by sliding the slider to the right. As soon as the phone unlocked, I saw pop-ups for processes that had failed and were terminated. I'm not sure what the exact message the pop-ups had, but it was the normal pop-up message you get when a process force-closes. My only option was to click "Ok" so I clicked it, only to have another force-close pop-up.
Apparently, every single process on the phone had force-closed, BUT, the phone was waking when I press a volume key while the screen was off. I had no choice but to pull the battery out.
I decided to reboot into CWM Recovery and "install .zip from SD Card", Nottach's 1% Battery Mod / No Carrier Mod Uninstall Script
I installed Nottach's uninstall script because I hoped that it had an unmodified copy of android.policy.zip in it.
After installing the uninstall script, and rebooting the phone once again, I got to the lock screen, unlocked the phone, and found everything to be in perfect working order, just as before I edited anything,
But the Wake on Volume Keys mod was still applied!
So now, my questions / requests to all of you are:
1. Explain to me what I missed or did wrong that resulted in the force-closure of every single process on the phone prior to installing Nottach's Uninstall script
and
2. Educate me on the proper process that you developers use to apply small modifications such as this one to the android.policy.jar file, or any other related file on the phone for that matter.
My plan is now to change the color of the text on my lock screen (Clock, Date, and possibly Carrier) following this [Guide]
Any and all feedback is welcomed and greatly appreciated, as you will be helping me learn the beginnings of modding and developing
bump . . . . .
Perhaps this may help
http://forum.xda-developers.com/showthread.php?p=18226553
Does anyone have information or know the capabilities of the FM radio IC built in the HTC EVO series, do they use the same chip for all models, and are we exploiting all of its capabilities, like HD radio, etc. I see someone already has a hack for the HTC fm player that allows it to tune without an antenna/headphones. Nice, but I want more! if you have any info, i'll take whatever! Thanks!
Great forum on how to reverse engineer the HTC radio.apk
Follow here: http://forum.xda-developers.com/showthread.php?t=725870
TUTORIAL: Reverse engineering HTC FM Radio for noobs (on EVO 4G)
Okay, I'm writing this because I want to help any other newbies trying to learn how to reverse engineer. The technical details involved in this are extremely daunting, so the purpose of this tutorial is to first explain in layman terms exactly what you're trying to accomplish and what to expect. Then we'll go over the details. That way you're not completely blind going into this. I'm fairly new to the scene, so I'm not as knowledgeable as everyone else. If you see any errors in my post, let me know so I can change. I'm going to assume you know a little bit of Java, can find your way around a computer, and know nothing about Android. The techniques used should work with other Android phones. For this tutorial I'm using Windows 7, Cygwin, and my stock (not rooted) EVO 4G mobile phone.
The FM tuner for the Evo is run by a Broadcom chip: BCM4329. This chip is pretty amazing in that it does wireless, bluetooth, and it has an FM receiver/transmitter. We're interested in the FM receiver / transmitter.
Now, all android phones are based on a Linux kernel. Basically they're Linux running computers. The Android operating system is then installed onto the linux system. Every app is then run off of Android.
Android is based on Java but it is not a Java system. It uses a virtual machine called Dalvik. Google did this to get around licensing issues with Sun Microsystems. So they pretty much invented their own machine language (called byte code) for the Java language. This makes things complicated for the reverse engineer because from what I've read, once Java is converted into this machine language or byte code, it can't be converted back.
So let's rehash.
If you were programming strictly in Java, you would see these extensions:
Java source code = .java
Compiled Java source code = Java byte code = .class
Compressed file to package your program = .jar (Java Archive)
But since you're programming in Android and Dalvik, you will see these:
Java source code = .java
Compiled Java source code = Dalvik byte code = .dex
Compressed file to package your program = .apk
(I haven't mentioned this, but HTC further Optimizes their .dex code)
Optimized Dalvik byte code = .odex
I'm writing all of these down because it's very easy to get confused with all of the extensions. (for me at least!). remember how I said once you go dex, you can't go back to java? That's where JesusFreke comes in. He's a senior member of XDA, and he created "baksmali" and "smali", two programs that can convert the Dalvik code back into a human readable format. These files have extensions of .smali
Decompiled Dalvik byte code = .smali
But what can you do with .smali files? That's where this other senior member, brut.all comes in: He developed apktool. apktool takes JesusFreke's work to the next level. This program in conjunction with NetBeans, actually lets you trace through any program using the .smali code taken from JesusFreke's programs!
apktool does this by converting those .smali files into "fake" .java files that can be used by the NetBeans (program that compiles and makes java programs) IDE. I say "fake" because apktool embeds the .smali code into java files as comments. However, once you attach a debugger to NetBeans, you'll see that the debugger will follow line by line every execution statement found in the smali code!
So...... you can take the program you want, plug it into Net Beans using a debugger (using the default ddms command provided by Android SDK), and you can trace everything you do in the program. I have it connected to my phone, so whenever I push a button while running my HTC FMRadio app or unplug my headphones,I see the corresponding response to the HTCFMRadio code I have loaded in NetBeans. I can now see in real-time how the program operates from my own interactions... JAM.
Technical Aspects: How to get from ground zero to tracing HTCFMRadio?
1.) Download Android SDK - Go to google development site and follow instructions: Make sure to download the latest Java JDK. Once that is installed, download NetBeans 6.8. Unfortunately, smali debugging does not work with the lastest versions of NetBeans.
Download the "Java SE" version for minimal space
http://netbeans.org/downloads/6.8/index.html
You can follow the rest of Google walkthrough and download Eclipse and ADT plugin, but it's not pertinent to this. You're going to be using adb and ddms from the android SDK extensively, so make sure the path for </android SDK/tools> is included in the PATH variable in your ENVIRONMENT SETTINGS. To get here, right click My computer, click properties, Advanced Settings, ENVIRONMENT SETTINGS.
2.) Search for 7z and download it. It is an awesome and free compression tool that will be extremely useful. It can be used to "unzip" .jar, .apk, and other compressed formats.
3.) Get the Radio app. You can do this by going to "shipped-roms" website, downloading the latest Supersonic image, and following the directions in the unlockr tutorial for HTC kitchens at the unlockr website... (once you have extracted the files from the image, you can look in the system/app and system/framework directories to get the files listed below) or:
you can pull the following files from your phone:
Using the command prompt type (and with phone plugged in, and with USB debugging enabled on phone):
adb pull /system/app/HtcFMRadio.odex
adb pull /system/app/HtcFMRadio.apk
adb pull /system/framework ./framework
This will put HtcFMRadio.odex and HtcFMRadio.apk in the current directory and create a framework directory with more files. A couple of the files in the framework are needed for the HtcFMRadio app, but for simplicity, we're just going to pull the whole directory.
Now that we have the files, we have to make a few changes to make the app installable and to be viewable by the debugger. To do this we have to decompile the .odex format into a human readable format we can edit. That brings us to:
3.) Download baksmali and smali from Project Hosting on Google Code (google search smali).
Usually an Android application is made up of one file, an apk file. Inside the apk file is an AndroidManifest.xml file, a classes.dex file (compiled Java code for the program), and other folders. The other folders contain either graphics or other .xml files that tell the program how it should look to the user. We don't have to worry about those for now. This is important because APKTOOL only opens programs set up this way. But wait up? We didn't download one .apk file, we downloaded an .apk file and an .odex file! What gives? Well, if you right click the apk file and open it (using 7z), you'll see that it's missing the classes.dex file. The dex file for the app is actually the HtcFMRadio.odex file we downloaded. So, to make this system app more like a nominal app, we have to find a way to convert the HtcFMRadio.odex to a classes.dex file. That's easy with baksmali and smali!
Once you download goto command prompt and type:
java -jar baksmali-<version>.jar -d framework -x HtcFMRadio.odex
(Remember to match baksmali-<version>.jar with the filename of baksmali you downloaded)
If done correctly, you should see a newly created \out directory
This creates an out\com\htc\fm directory with many .smali files.
Now let's reverse the process and put it back as a dex file. Type at command prompt:
java -jar smali-<version>.jar out -o classes.dex
If done correctly you'll see a newly created classes.dex.
now, right click on HtcFMRadio.apk (select 7z and open). Drag classes.dex into the file. Say yes to the prompt. Now you have a normal apk file APKTOOL can read!
4.) Download APKTOOL from Project Hosting on Google Code and the helper apps for your OS. (If you're extracting files for windows OS you should have apktool.bat and aapt.exe). Extract (again using 7z, don't you love this program?) apktool.jar (keep it as a jar file, don't extract the stuff inside of it), apktool.bat, and aapt.exe to the directory you're working on. To make things neat, you can also delete HtcFMRadio.odex (you don't need it anymore) and classes.dex (make sure you put it in the HtcFMRadio.apk file first!)
If this is the first time you're using apktool, then you have to install the htc framework so apktool can baksmali the Radio app. You only have to do this once:
apktool if ./framework/com.htc.resources.apk
Alright, at the command prompt:
apktool d -d HtcFMRadio.apk
This extracts the contents of HtcFMRadio.apk and places them in the HtcFMRadio directory. However, there are two major differences between this content and the content created in step 3. If you go into the smali directory you'll see that instead of .smali files, you'll see .java files. And if you go back and edit the AndroidManifest.xml file, you will also see that it's in text! Android applications convert their xml files to binary format. Now that APKTOOL has converted everything to an IDE friendly format, we can use NetBeans to edit everything. The first thing we're going to do is edit AndroidManifest.xml (using notepad) and add the following:
android:debuggable="true" to the Application tag.
IT should now look like this:
<application android:theme="@android:style/Theme.Black.NoTitleBar" android:label="@string/fm_app_name" android:icon="@drawable/fm_radio" android:taskAffinity="android.task.fmradio" android:description="@string/htc_corp" android:allowTaskReparenting="true" android:debuggable="true">
This permission lets the debugger watch the program while it's running on the phone.
We are going to run into two problems if we try to install this program. One is that Android doesn't let you install more than one copy of a system app. The second issue is that if we change the signature of our system app, then we'll have to change the signatures of our other system apps as well! Ahh.... So, to get around that, we're going to trick Android into thinking we have a completely new program. We're going to do that by renaming the com.htc.fm class to com.htc.modradio class. Next step:
5.) Cygwin (or Linux virtual machine)
The easiest way that I can think of to replace strings in multiple files is by using linux. You can most definitely do it in WIndows, but I dont know how. If you let me know how, I can put it in this tutorial.
(update: you can use Notepad++ to easily find/replace strings in multiple files for Windows. You still, however, want to download Cygwin if you're going to develop with Android-NDK.)
For now, just search for Cygwin (Cygwin is a program that lets you run Linux commands from a command prompt using your Windows directories), and install it. Make sure to have the Perl option selected. You'll need Perl to make the following commands work.
Once you get Cygwin up and running
cd <to your HtcFMRadio directory>
in my case it's
cd /cygdrive/c/Users/Jerry/Desktop/HtcFMRadio
now type the following commands in this order:
this command changes all occurances of htc/fm to htc/modradio in your xml and .java files.
find ./ -type f | xargs perl -pi -e 's/htc\/fm/htc\/modradio/g'
this command changes all occurances of htc.fm to htc.modradio
find ./ -type f | xargs perl -pi -e 's/htc.fm/htc.modradio/g'
If you don't follow this order, your source code will get messed up.
If using cygwin, a bunch of .bak files will be created. Using windows search, find all .bak files in your HtcFMRadio directory, then select them all and delete them (Make sure they are only files with .bak!)
Now just rename the fm directory to modradio. It is located in HtcFMRadio/smali/com/htc
Now go to your windows command prompt and type:
apktool b -d .\HtcFMRadio modradio.apk
Now sign and install modradio.apk on your phone.
adb install modradio.apk
If you have never signed before, then you need to use keytool and jarsigner. These two files are in your JDK directory, so make sure you include your JDK directory in the PATH variable of your ENVIRONMENT SETTINGS. (To get here, right click on My Computer, click Properties, Advanced Settings, Environment Variables. Once you make change, open up a new COMMAND prompt to see changes).
cd to the directory which has modradio.apk
now type:
keytool -genkeypair
Answer all questions, then use the same password for all password prompts.
Next type:
jarsigner -verbose modradio.apk mykey
Type in the password you created in the above step. Your apk should now be signed.
Next install:
adb install modradio.apk
Success!
6.) Testing the app on phone
Go to your phone and you'll now see a new FMRadio icon next to your first. Click on it and watch it open. It should now be able to play music. Keep it open.
7.) Using Netbeans
Go into HtcFMRadio and delete the build directory created by APKTOOL.
Now open up Net Beans and click on File, New Project, Select Java Project with Existing Sources, click on Next
Select HtcFMRadio directory for Project Folder, rename Project Name to whatever you want. Let's type in ModRadio. click on Next
Next to "Source Package Folders" click on "Add Folder" and select the smali directory.
Click Finish. For a quick tutorial by Brut.all, search APKTOOL in youtube and click on: Apktool Demo 2 - Smali improvements
Right click on Libraries. Click on "Add Jar / Folder". You want to add Android.Jar. Since I have Android 2.1 loaded I went to /platforms/android-7 located in my android SDK directory.
Your project is now ready for editting!
8.) Running the Debugger to trace through program.
Next go back to Windows command prompt and type ddms. This runs the Dalvik Debug Monitor. A window should open up. In the left hand side you should see com.htc.modradio. That's our app! To the right you're going to see 2 numbers, you're interested in the one to the right, 4 cells away from com.htc.modradio. This number is a port number, and you're going to use it to communicate with NetBeans. (In my case it is 8603)
Go back to NetBeans and click on Debug, Attach Debugger.
In the host field type: localhost
In the Port field: type in the second number you saw. (8603)
If everything is working you'll see a bug appear next to com.htc.modradio in the Dalvik Debug Monitor. Look at the bottom bar of NetBeans for feedback. If you get errors make sure the numbers match, or try port 8700 and make sure you select com.htc.modradio in the Dalvik Debug Monitor. Port 8700 is the default port used for whatever program you select in Dalvik Debug Monitor.
9.) Setting a breakpoint
I'm making this a seperate step because it is completely arbitrary. When creating a break point be sure to follow this rule:
You must select line with some instruction, you can't set breakpoint on lines starting with ".", ":" or "#".
Rather than looking for a spot to breakpoint, though, I'll tell you where to put one so you can quickly see how the debugger traces through the code. You aren't "REQUIRED" to do the next step, but if you want to trace you have to put a breakpoint somewhere.
In Net Beans click on the Project tab, click on Source Packages, com.htc.modradio, and then doubleclick on BroadcomFMTuner.java
We're going to insert a breakpoint. Scroll down to line 3226 and on your keyboard press: CTRL-SHIFT-F8, select line in dropdown box and hit ok. (To keep it simple, I usually look for "invoke" instructions to set breakpoints at)
Now go to your phone and click on the physical "back" button on your phone. This will clear the radio,(you should still be able to listen to music). Drag your status bar down. You should see a radio icon. Click on it again. The radio backgroudn will appear, but you wont' see any text or anything. Now go back to your netbeans application. You should now see debug options highlighted! Click on Step Over (F8) to step through!
Great work on other HTC phones, not sure it applies here...
Sounds like HTC uses an all in one bluetooth/fm radio chipset... possibly broadcom, this fella has gotten somewhere!
follow here: http://forum.xda-developers.com/showthread.php?t=497977
APP:17FEB10:RDS FM Radio R&D: Get radio text, Alt Freqency, free TMC etc
Microsoft hasn't defined a tuner API for Windows Mobile platform (yet) and manufactures such as HTC do not publish their API for FM radio.
GFMAPI is an FM Radio interface that designed to be used on different models of Windows Mobile devices.
It makes all FM RDS based applications such as Radio players, Radio Alarm, TMC navigation works on different devices.
What's new?
Download EtenTest and GFMAPI 1.0.
Currently it works with M900 and M800, tested with PowerRadio and hyperGPS.
This is for Eten/Acer devices only.
End-User and application developers (Downloads)
User should try to use the GFMAPI in the application package because it may need to signed with privileged certificate and version of interface may be different.
App Developers can find FMAPI.h and a test application APITest in the GFMAPI for HTC devices 1.6. Source code is included to help your development.
The interface is defined in C language with sample code.
Thank for NetRipper made a .Net CF library for GFMAPI.
Note: the latest FMAPI.h is in GFMAK and the GFMAPI will be updated. They only has minor differences.
Supported Devices
* BRF6350 Chipset:
HTC Diamond, HTC Raphael (not CDMA), HTC Blackstone, HTC Polaris, HTC Topaz, SE Xperia X1
NOTE: if your X1 has new media panel that integrated with FM Radio function, you may have to disable this panel (I don't know how).
Download GFMAPI for HTC devices 1.6
* BCM432x Chipset:
HTC Rhodium, HTC Leo, HTC Mega
Supports radio functions if renaming FMSDKWrapper.dll to FMS_API.dll with the above driver. RDS data cannot be received.
We are working on this device. Related thread: FM Transmitter on HD2
* SI470X Chipset:
HTC Artemis: NOT supported.
Samsung Omnia: Samsung i9x0 Omnia
Samsung Omnia II: GFMAPI.dll for Omnia II and its Cab format This is an excellent work done by phjz.
Eten/Glofiish/Acer M800/M900/V900/X900/X650/S200: see "what's new". Please help me test it.
Device adaption developers
Generic FMAPI Adaption Kit will help you implement the driver for your device. Use APITest in the GFMAPI to test your driver.
Please read readme.txt in the package. Feel free to ask me if you need help.
If you have a device that is not supported by GFMAPI
I currently only have a HTC Raphael so I need your help to get your device supported.
First of all, you should Search in this Thread to check anybody posted it before.
Extract FM radio related files and upload to the forum.
Note: You cannot simply copy files from/to device. You need dump the ROM then extract files from the ROM. Search this forum to find how.
If you have good VC++ and IDA pro with ARM skills, please join us to discover FM Tuner API on those devices then make RDS application working on your device.
* HTC Rhodium/TP2, HTC Leo/HD2, HTC Mega/Touch2:
http://forum.xda-developers.com/show...&postcount=783
http://forum.xda-developers.com/show...&postcount=813
http://forum.xda-developers.com/show...&postcount=794
Rhodium Test
Current status: 6Fg8 identified that raw RDS data is in the Broadcomm BTTray process, not in the FmRadioSDK.DLL. Still not trace it down to function/module level.
* Artemis:
Artemis Test
Far far away from any progress and not many users.
BBCBBA uploaded FM radio related file for Gigabyte GSmart S1200. This device supports RDS by using deviceIoControl directly communicating with the driver. I can see it is possible to make a GFMAPI driver just need a lot of effort.
Applications based on GFMAPI
* FM TMC driver for navigation: Beember's HyperGPS.
* A powerful RDS FM Radio application: 6Fg8's Power Radio
This project focuses on RDS API now. TMC related topic has been moved to the TMC thread because it is too attractive and posts will flood the thread.
Origin research project
Many people ask questions related to FM radio in the forum have been solved by this project:
* Does FM Radio supports RDS text and traffic information?
* Does FM Radio supports more than 20 saved channels and give a friendly alias, such as "BB Radio 4" rather than 920.2MHz ?
* Does FM Radio supports automatically or manually change frequency when signal getting pool during traveling?
* Does FM Radio support RDS-TMC traffic information for navigation system?
The answer is yes. The Bluetooth/FM radio chip BRF6350 on your phone is very powerful but HTC FM radio only provides basic functionality.
Unfortunately HTC doesn't publish FM Service API to us.
So I disassembled FM player by using IDA pro and know usages of FMS api.
After a week sleepless night, I wrote my FM radio tool, xFMRadio, utilizes most functions provided by FMS API, provides RDS and other data for further research.
With help from this thread, we have exposed most secret of FM and RDS system on HTC devices and we can make useful applications now.
This application is written for research so that UI is not nice. It only works on BRF6350 based HTC devices.
Download xFM Radio v0.4
If doesn't have sound on your device, try xFM Radio v0.4B, which removed audio volume initialization.
Brief user guide for xFMRadio
Default settings: Audio Source: 1 (earphone), RDS =1, Verbose =1, AF = 1. ( but I don't know if automatic AF is working. have to verify during long distance traveling.)
Verbose: 0 -no log; 1 - status only; 2 - TMC raw data; 3 - all types of log
Row 1: Input argument. Set Frequency in KHz, AF list: alternative frequencies for the current station.
Row 2: Frequency, station name, Band: World/Japan - use this to listen police station etc
Row 3: Signal Strength, Stereo/Mono, UTC Date/Time (update once per min if supported)
Row 4: -100KHz, Previous Channel, Next Channel, +100Hz, Mute, Mono/Stereo
Row 5: Headset/Speaker, De-emphasis, Stereo blend
Row 6: Radio Text
Row 7: status such as Music/Speech, TP, TA, PTY, TMC etc
Check if the channel support TMC: ROW 7 should display [TMC]. You can see TMC data by setting the top left input box to 2, and click on Menu->Verbose.
The current xFMRadio v0.4 does not display RDS raw data anymore.
You can use Save log menu to save log data.
FMS API version is displayed in the About dialog. Mine is 1.2.
xFMRadio 1.4 Debug...
it does not support HD radio.
Solved...
Fair enough... I was getting that impression anyhow, especially with the lack of responses. One could only dream that with all the digital aspects of modern comunication (bluetooth, cell, etc), that they would throw in HD digital FM along side it... but as I can see, this only fits in well with every other aspect of modern lackluster industrial corporate innovation. Peace out!
hacking or cracking an android app is a easy part with XDA AUTO TOOL ..
search and download and install this tool ..
Process
Step One – Decompiling The APK File
Open the xdaAutoTool folder and run the program. It will prompt you to install a file called “framework-res.apk.” Ignore this. Close the program.
In the xdaAutoTool folder you we see a bunch of folders appear after the program ran. Look for one called “_INPUT_APK.” Put your APK file in the folder and run the program again. Press “Decompile All” located on the left side of the program window.
xdaAutoTool will decompile the APK file and create a new directory in the _INPUT_APK folder.
Step Two – Finding Your Target
Are you ready to be introduced to Smali code? Don’t worry! It isn’t too difficult once you realize what’s going on in the code. Java can’t be decompiled back into the original source code, it can, however, be decompiled into something called Smali code.
Navigate back to the _INPUT_APK directory and open the new folder (it will have the same name as the APK file). Once there, you will see a directory named “smali.” This is your target. Depending on your intentions, you will need to sift through the various files and folders in the smali directory until you locate the code you would like to modify.
For example, if you are trying to increase the firepower of a turret in an Android game, you will need to find the file for that turret. These directories are structured. You will probably see quite a few directories containing files used for advertisements, etc. One you discover the actual game directory, everything you need to alter will be in there.
How to change smalli code
now again open xda auto tool after edit changes and recompile and build your changes
You done ..........