Related
I want to make a chinese mui file for application,how to do it?
you can do it with a resource editor like resource hacker but you must have the mui in english
i think it's th e good answer but i'm a newbee on the subject
I have the english mui,and I use the resource editor edit the language option,but the mui file cannot work.
then i think it's necessary to sign your new mui but i never do this so i can't explain
if somone can confirm please
sam
I have tried to get someone to answer this question but it seems to me like no one can do this on XDA forum Because me to want to translate the mui file for TouchFlo2D.
Have tried a couple of things but nothing works when using the mui file on the device.
So if there's anyone who can do this, please explain where to start...
ToddeSwe
Hi i had a similar problem with the dll i was trying to modify but i cracked it in the end with a few tools lucky for you schreda has brought them all to one place so i hope this will help your situation
Now I found a way to Edit DLL, EXE, MUI and all other files for WM5 and WM6!
I ever had problems with the Signature in the Files bur now i have the Solution!
Click to expand...
Click to collapse
here:
http://forum.xda-developers.com/showthread.php?t=432041
Also some languages already done here:
http://forum.xda-developers.com/showthread.php?t=432965
when yu want to make one at youre own,, take a look at http://msdn.microsoft.com/en-us/library/ms776216(VS.85).aspx
Using MUIRCT to Build Resources
MUIRCT (Muirct.exe) is a command-line utility for splitting a standard Win32 portable executable file into a language-neutral (LN) file and a .mui file containing language-specific Win32 resources. Each of the resulting files contains resource configuration data that associates the files. MUIRCT is included in the Microsoft Windows SDK for Windows Vista.
Placing Win32 MUI Resource Files
A typical MUI application that uses Win32 MUI resource configuration consists of an LN file and language-specific resource (.mui) files . This topic discusses the placing of resource files on the target computer for optimal use by the application loading logic and the resource loader.
Loading Win32 MUI Resource Files
This topic discusses the loading of user interface resources on Windows Vista and on pre-Windows Vista operating systems. For an MUI application targeted at Windows Vista, the Windows Vista resource loading functions contain the proper logic to retrieve the correct language resources in the language-specific resource (.mui) files at runtime. However, the Windows Vista resource loading technology does not exist on pre-Windows Vista operating systems. Therefore, you must modify your MUI application code to load the appropriate resources on such an operating system.
The MUILoad library furnished by the Microsoft Windows SDK for Windows Vista includes the LoadMUILibrary and FreeMUILibrary functions. These functions can be used by your MUI applications targeted at either Windows Vista or a pre-Windows Vista operating system to load and unload resources based on operating system user interface settings. The LoadMUILibrary function returns a handle to the appropriate language-specific files based on operating system user interface language settings, and the FreeMUILibrary function closes the handle. The fallback priority used in LoadMUILibrary is user UI language, followed by system UI language and system default UI language. If the function cannot find an LN file in these languages, it returns the handle of the .mui file located in the same folder as the code .dll. If the .mui file does not exist either, the function returns a handle to the binary file that contains the code.
Note: MUILoad library functions are based on the assumption that the MUI application uses Win32 MUI resource configuration. If your application uses another resource technology, it must implement its own approach to loading resources.
Note: Because a particular user's language preferences might include languages that are not supported by your MUI application, the application should always handle these languages by loading the appropriate fallback resources.
Loading Win32 MUI Resources on Windows Vista Only
Using RC Compiler to Build Resources
RC Compiler (Rc.exe) is a command-line utility for compiling a resource definition script file (.rc extension) into resource files (.res extension). RC Compiler is included in the Windows SDK. This document explains the use of RC Compiler with MUI-related capabilities of the resource loader introduced in Windows Vista. For complete information about the compiler, see About Resource Files .
RC Compiler allows you to build, from a single set of sources, an LN file and a separate .mui file containing language-specific Win32 resources. The resulting LN file and .mui file each contain resource configuration data, which associates the two files with each other.
Windows Vista supports two ways to build an LN file-.mui file pair. One technique, described here, is to use the RC compiler. The other technique is to use MUIRCT.
Preparing a Resource Configuration File
This topic describes the preparation of a resource configuration file, used in Win32 MUI resource configuration to associate resource configuration data in an LN file with that in the associated .mui files. The resource configuration file is a public, human-readable XML file.
The RC Compiler and the MUIRCT utility both provide mechanisms for building an LN file and associated .mui file. Each utility has an optional command line switch that allows you to specify a resource configuration file. Use of the file allows more control over the splitting of resources than can be obtained using the regular command line switches of these utilities. However, even if you do not provide a resource configuration file as an input, the LN and .mui files contain resource configuration data.
This topic focuses on the aspects of the XML schema that are useful in building Win32 unmanaged code using Windows Vista. In particular, it is only concerned with the behavior of the win32Resources element. All resource configuration files for Win32 applications begin and end identically:
<?xml version="1.0" encoding="utf-8"?>
<localization>
<resources>
<!-- a single win32Resources element goes here -->
</resources>
</localization>
so take a look on http://msdn.microsoft.com/en-us/library/aa365064(VS.85).aspx
good luck
Is it possible for me to cook a personal ROM? I have tried alot of ROMs here but ever since HTC's new official ROM was out (asia) , I find it really good for me. One thing i hate from the ROM compared to cooked roms are that everything is disorganised. Everything is in 1 program file. In cooked Roms, the chefs have already taken the liberty to assign each app to their appropriate folders (apps,connection,multimedia, etc)
I would like to do the same , however it takes alot of time for me to do so but I can manage that. What i really want to do is, after organising the apps to their respected folders, and installing all of my needed softwares on the phone, how do i make a complete backup of the ROM, and then save it on my computer perhaps. So then i could flash my phone with the backup ROM and the next time i were to flash my phone, everything would be there (my apps, my organised folder).
Will it be possible (i'm sure it's possible, i just need the right software / app to do it)
You're going to need a Kitchen to cook your own ROM; assuming you have a Raphael device, have a look at this thread:
Useful Links Thread
http://forum.xda-developers.com/showthread.php?t=439783
Many folks use Da_G's Kitchen ... but there are other great Chefs that have made their Kitchens avalaible.
HTH,
Thank you for the link hilaireg. It's very helpful.
After reading the available tutorials, i have a question. Most of the kitchens are using pre-existing ROMS.
I would like to use a new official HTC ROM to start with. "-HTC Touch Pro-MRII-RUU_Raphael_hTC_Asia_WWE_5.07.707.2_Radio_Signed_Raphael_52.58.25.30_1.11.25.01_Ship"
I noticed that all the tutorial require a .nb file which they say comes in the package. However, when i extracted the .exe file , a few files were extracted alongside a .nbh file. But there is no .nb file. What do i do?
arvin2212 said:
Thank you for the link hilaireg. It's very helpful.
After reading the available tutorials, i have a question. Most of the kitchens are using pre-existing ROMS.
I would like to use a new official HTC ROM to start with. "-HTC Touch Pro-MRII-RUU_Raphael_hTC_Asia_WWE_5.07.707.2_Radio_Signed_Raphael_52.58.25.30_1.11.25.01_Ship"
I noticed that all the tutorial require a .nb file which they say comes in the package. However, when i extracted the .exe file , a few files were extracted alongside a .nbh file. But there is no .nb file. What do i do?
Click to expand...
Click to collapse
You need to have NBHextract Tool it will be in include in kitchen...me too trying to cook on same build with no results. It's no easy try try that's it...
krish_nank, Is this your first time building a ROM?
If so, we're on the same boat...
I tried using NBHextract Tool but when i run the .exe a pop up cmd window comes out and then dissappears. I added the program manually in cmd, and here is what it says , but it doesn't do anything although i have place my .nbh file in the same folder with it.
"
C:\Users\xda>C:\Users\xda\NBHextract.exe
=== NBHextract v1.0
=== Extract contents from HTC NBH files
=== (c)2007 xda-developers.com
=== by: pof & TheBlasphemer based on itsme perl scripts
Usage: C:\Users\xda\NBHextract.exe <nbh file> [-v]
C:\Users\xda>
"
arvin2212 said:
organising the apps to their respected folders, and installing all of my needed softwares on the phone
Click to expand...
Click to collapse
If you just want to organize your existing app then all you have to do is go to this folder,
\\\Windows\Start Menu
This folder has all the icons for the programs. So now you can arrange/ rearrange icons, create folder and move the links to the respective folders as you see fit. Total Commander can be used for this.
If you want a way to install apps after installing a new ROM, you can use UC you can read about it here
http://forum.xda-developers.com/showthread.php?t=366337
But if you just want to build custom ROM then the easiest kitchen is Da G's. If you want a fully loaded kitchen try At0mAng - Advance Kitchen - V2
nnkumar73 said:
If you just want to organize your existing app then all you have to do is go to this folder,
\\\Windows\Start Menu
This folder has all the icons for the programs. So now you can arrange/ rearrange icons, create folder and move the links to the respective folders as you see fit. Total Commander can be used for this.
If you want a way to install apps after installing a new ROM, you can use UC you can read about it here
http://forum.xda-developers.com/showthread.php?t=366337
But if you just want to build custom ROM then the easiest kitchen is Da G's. If you want a fully loaded kitchen try At0mAng - Advance Kitchen - V2
Click to expand...
Click to collapse
Both Da_g's & AtomAng kitchen or based on some OS build we ...we want to dump a ROM & Rebuild it on our own way we want.......
krish_nank said:
Both Da_g's & AtomAng kitchen or based on some OS build we ...we want to dump a ROM & Rebuild it on our own way we want.......
Click to expand...
Click to collapse
okay, my bad. Then I am sure you have seen the ROM reconstruct thread. Hope that thread helps you.
Have a look at the first three posts in the following thread:
[TUT] Sous-Chef's Guide to Da_G's Simple Kitchen
http://forum.xda-developers.com/showthread.php?t=490787
Essentially, once you unpack the "-HTC Touch Pro-MRII-RUU_Raphael_hTC_Asia_WWE_5.07.707.2_Radio_Signed_R aphael_52.58.25.30_1.11.25.01_Ship" executable, you run a script that performs the actions required to prepare the NBH file for custom cooking.
That should get you started.
HTH,
krish_nank said:
Both Da_g's & AtomAng kitchen or based on some OS build we ...we want to dump a ROM & Rebuild it on our own way we want.......
Click to expand...
Click to collapse
With my kitchen do this...
Backup the OEM and SYS folder...
If you have the NBH file already place it in the BaseROM folder
If you do not have the NBH file then run the EXE downloaded from HTC, let it go all the way to the first install screen and dont do anything yet, go to your temp folder on the computer, dig around the folders if there are many, you will see ruu_signed.NBH, copy and paste into the BaseROM folder of kitchen.
Once NBH is in the baserom folder start my kitchen
Select 2, 1, 1 and let it do its thing
When extraction is completed and you are back at main menu select option 8, move dumped OEM/SYS from Temp
When that is done select option 6 Copy Extracted ROM XIP from Temp
When that is done your new dumped ROM is ready to be built.
Delete or do not select any duplicate packages
Clean out the new OEM/SYS folders. There is a lot of junk in there that can be removed, welcome folder, do a search in the OEM/SYS folders for *.3gp and remove the welcome movie and blah blah blah...
If you take the time to look at the folder structure of the OEM and SYS folder you should be able to figure it out pretty quickly.
If you need further help you may ask in my kitchen thread.
Hope this is a start for you guys...
nnkumar73, Thank you for your suggestion but i already known about manually doing it from the start menu folder. However it's not practical as , i would have to do it everytime i reflash my phone. If there is a new rom available, and i were to try it and somehow wanted to go back with my older ROM, i would have to do all the moving etc all again.
hilaireg once again, thank you for the link..
At0mAng, Thank you very much as well. I will follow your steps and see how it goes. I appreciate your effort of posting the right steps for it. Thank you.
DELETED.......................
Just an addition to previous posts
arvin2212 said:
C:\Users\xda>C:\Users\xda\NBHextract.exe
Click to expand...
Click to collapse
I can see u missed out the command : nbhextract ruu_signed.nbh
arvin2212 said:
3.If you do not have the NBH file then run the EXE downloaded from HTC, let it go all the way to the first install screen and dont do anything yet, go to your temp folder on the computer, dig around the folders if there are many, you will see ruu_signed.NBH, copy and paste into the BaseROM folder of kitchen.
Click to expand...
Click to collapse
The easiest way is to use any packer apps like winrar. u can extract the nbh directly. if u r using total commander will be a lot easier. just press ctrl+pg dn & u can extract the file instantly.
Thanks to everyone's help especially At0mAng,
I finally extracted the ROM. I can see aloto of files in SYS and OEM folder.
What i would like to know now is, how do i create folders (icons are not neccessary for the folders) so that i can group installed apps in them according to category? Example is, A multimedia, navigation and games folder is created and , my apps are stored in the folders according to their functions. Like GPS tool goes into navigation and so on..
To simply copy files from \Windows to another directory, you can use an initflashfiles.txt in the OEM. Syntax is:
Directory("\Windows\Start Menu\Programs\Tools"):-File("Enable Proxy.lnk","\Windows\Enable Proxy.lnk")
If you are trying to just place Start Menu items in different folders, it's a bit more complicated. There are many places that this can happen.
1) In \OEM\OEM_Lang_0409\initflashfiles.dat
You can edit this file in Notepad if you remove the ReadOnly bit in Windows. Once you've edited it in Notepad and saved it, you need to re-open it in a Hex editor and delete the first 2 bytes "ff fe". Once you delete those first 2 bytes, save the file and reset the ReadOnly flag. In this file is where I define the Folders I want to use in my "Start Menu" folder like this:
; Start Menu contents
Directory("\Windows\Start Menu")ermDir("Programs")
Directory("\Windows\Start Menu")ermDir("Settings")
Directory("\Windows\Start Menu\Programs"):-Directory("Games")
Directory("\Windows\Start Menu\Programs"):-Directory("Navigation")
Directory("\Windows\Start Menu\Programs"):-Directory("Internet")
Directory("\Windows\Start Menu\Programs"):-Directory("Multimedia")
Directory("\Windows\Start Menu\Programs"):-Directory("Office")
Directory("\Windows\Start Menu\Programs"):-Directory("Phone")
Directory("\Windows\Start Menu\Programs"):-Directory("Tweaks")
Directory("\Windows\Start Menu\Programs"):-Directory("Tools")2) *.provxml files
You need to edit these files with a unicode editor. Personally I use EmEditor. You'll notice that in mose packages in \OEM and \SYS there is a _Lang_0409 dir that goes along with it. It's "usually" in this folder where you'll see a *.provxml file. If you open these in EmEditor you'll see that there are lots of file operations. You want to seach or the line containing the *.lnk. In that line you can set the patch of where you'd like the icon installed.
There may be other places that this happens as well, but that's just off the top of my head.
Good Luck!
-e
eras2r said:
To simply copy files from \Windows to another directory, you can use an initflashfiles.txt in the OEM. Syntax is:
Directory("\Windows\Start Menu\Programs\Tools"):-File("Enable Proxy.lnk","\Windows\Enable Proxy.lnk")
If you are trying to just place Start Menu items in different folders, it's a bit more complicated. There are many places that this can happen.
1) In \OEM\OEM_Lang_0409\initflashfiles.dat
You can edit this file in Notepad if you remove the ReadOnly bit in Windows. Once you've edited it in Notepad and saved it, you need to re-open it in a Hex editor and delete the first 2 bytes "ff fe". Once you delete those first 2 bytes, save the file and reset the ReadOnly flag. In this file is where I define the Folders I want to use in my "Start Menu" folder like this:
; Start Menu contents
Directory("\Windows\Start Menu")ermDir("Programs")
Directory("\Windows\Start Menu")ermDir("Settings")
Directory("\Windows\Start Menu\Programs"):-Directory("Games")
Directory("\Windows\Start Menu\Programs"):-Directory("Navigation")
Directory("\Windows\Start Menu\Programs"):-Directory("Internet")
Directory("\Windows\Start Menu\Programs"):-Directory("Multimedia")
Directory("\Windows\Start Menu\Programs"):-Directory("Office")
Directory("\Windows\Start Menu\Programs"):-Directory("Phone")
Directory("\Windows\Start Menu\Programs"):-Directory("Tweaks")
Directory("\Windows\Start Menu\Programs"):-Directory("Tools")2) *.provxml files
You need to edit these files with a unicode editor. Personally I use EmEditor. You'll notice that in mose packages in \OEM and \SYS there is a _Lang_0409 dir that goes along with it. It's "usually" in this folder where you'll see a *.provxml file. If you open these in EmEditor you'll see that there are lots of file operations. You want to seach or the line containing the *.lnk. In that line you can set the patch of where you'd like the icon installed.
There may be other places that this happens as well, but that's just off the top of my head.
Good Luck!
-e
Click to expand...
Click to collapse
Somehow, i am not able to find this file , initflashfiles.dat in my OEM_Lang_0409 folder. :?
Do you have Windows Explorer setup to view all system/hidden files? (Tools->Folder Options-->View)
If using a kitchen that supports it (mine does for sure) you can create a new, blank text file in a package folder, initflashfiles.txt
it uses the same format eras2r posted above, but gets appended to initflashfiles.dat during the cooking process
in this manner you can have initflashfiles.dat changed on a per-package basis, it's also easier because you don't have to worry about the first 2 bytes etc.
e.g. \Packages\beer\initflashfiles.txt
When cooking rom check box next to package "beer"
now the contents of \Packages\beer\initflashfiles.txt get appended to initflashfiles.dat automatically during cooking, don't get applied if box is not checked
similarly this initflashfiles.txt can go in any folder in \OEM and \SYS as well
eras2r, yes , it has already been configured to show hidden files & folders
Da_G, i get what you mean, roughly. What you're saying basically is that i can manually create a txt file for initflashfiles and leave it in the packages folder?
Also i am not sure about the syntax that eras2r posted. I find it alittle well above my level of knowledge. Maybe someone can guide / explain to me regarding this?
Right right, an initflashfiles.txt can go in any subfolder under \OEM \SYS or \Packages
You can create the file with notepad, no need to worry about removing things with a hex editor or otherwise using anything other than notepad.
The syntax is as follows:
using this example to create a directory:
Code:
Directory("\Windows\Start Menu\Programs"):-Directory("Tools")
Directory("\Path\to\create\directory\in\goes\here"):-Directory("Name_Of_Directory_To_create_in_path") - essentially you're saying "Switch to the folder named \Path\to\create\directory\in\goes\here and create a new folder named Name_Of_Directory_To_create_in_path inside of it.
similar syntax to copy a file from one directory to another:
Code:
Directory("\Windows\Start Menu\Programs\Tools\"):-File("Fieldtest.lnk","\Windows\Fieldtest.lnk")
Directory("\Path\to\copy\file\in\goes\here"):-File("destination_file_name.ext","\source\path\to\filename.ext") - here you're saying "navigate to \Path\to\copy\file\in\goes\here, copy file from source \source\path\to\filename.ext, rename it to destination_file_name.ext when copying (you can use the same filename here if you don't want it renamed, renaming is useful for files that might be indexed by windows media player, or the windows help system, etc.
That should clear it up a bit, let me know if it doesnt
I have a Linux server running at my home that I use mostly for file storage among other things (like an Asterisk PBX). I keep ALL of my code on my server so that I can get to it from anywhere. That being said, I use MinGW32CE (part of the CeGCC Cross Compiler) to compile my native apps. So since I can build my apps on my Linux server, I wanted to figure out how to build the CAB installer on the server ... And here it is:
Install WINE
Download the Microsoft Cabinet Software Development Kit
Download CABWIZ (Its included in QuickCAB). Copy CABWIZ.EXE and CABWIZ.DDF to a new folder.
Extract MAKECAB.EXE from cabsdk.exe, rename it to all lower case and put it in the same folder
Create your cabwiz INF file (See MSDN CABWIZ Information File). For SourceDisksNames path, use .
Run CABWIZ using the following syntax: wine cabwiz.exe appname.inf /compress
thanks, to much helpful
OK, So I've gotten to breaking down and recompiling those pesky .dex files, but I've run into a new problem.
This is a noob question, I'm sure, but .so files look like unformatted, binary files. How do I open then, edit them, etc? I need to read whats going on in my libs. :-(
Are these X11? I'm running ubuntu 10.04 x64 - so those could be difficult.
ie - unreliable 64 bit support.
$ sudo ln -s /usr/lib32/libX11.so.6 /usr/lib32/libX11.so
Click to expand...
Click to collapse
They're native library files, so platform specific machine code I imagine. Look for an ARM disassembler. I'm not familiar with linux internals, so don't know how you find the entry points, but it obviously will be widely documented. Is it impossible to obtain the source code? Assuming most are written in C/C++, reverse engineering from the machine code is not something I'd describe as a pleasant experience. If the source was well written assembly language & not too big, it can be almost enjoyable I guess. But then TBH walking through a randomly selected programmer's source, let alone object, files scares me, in a Tim Burton inspired bad trip kinda way. If you can find the source, it will be an order of magnitude less painful.
Try IDA Decompiler, it should disassemble all so files!
Most of the libs are open source in the aosp. Some are proprietary blobs with the only solution to them being reverse engineering.
.so disassembly
i know how to disassemble it
you will need orion's easy apk disassembler and apk manager
i've tested it once and it worked, but there´s a problem, i dont know how to re-assemble
1- rename the file .so to .apk like "libtestlib.so" to "libtestlib.apk"
2- put in the folder "place-apk-here-for-modding" of apk manager
3- open script.bat (or something like this) from Apk manager
4- use extract apk option
in the beggining my images inside the lib was corrupted so i used step 5 to fix
5- use option optimise images inside to fix images
6- go to project folder and copy classes.dex file to the root of easy apk disassembler's folder
7- open EasyApkDisassembler.EN.bat and use the "DISASSEMBLY a classes.dex with smali" option
8- give a name to the folder (like "libtestlib")
9- it will create a folder (like "out_libtestlib") with the disassembled files
Orion's easy apk disassembler http://forum.xda-developers.com/showthread.php?p=5826401
Apk multi tool (almost the same as apk manager) http://forum.xda-developers.com/showthread.php?t=1310151
I've tried to open libsurfaceflinger.so from my device with 7zip, and it worked too
thats it
@gkillershots
not working
i renamed .so to .apk and used extract option but getted error :
Processing archive: C:\APKMultiTools\place-apk-here-for-modding\libnative-lib.apk
Error: Can not open file as archive
"An Error Occurred, Please Check The Log (option 26)"
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!