Related
Premise is that there are many backup utilities that will backup/restore either dirs or the whole ROM, but not just for a specific apps settings. There are many ways that dev could use to store their settings for a given app, but getting them all to do the same way is "difficult". However, if program A had it's settings in a settings.ini (or whatever name) and that specific file could be backed up and restored later after a hard reset or new ROM installed, it would make the flashing a ROM even easier since UC came out.
My idea is for an app that works sort of like AppToDate, in that it will parse a collection of ini files in a directory to determine what a given progam uses for it's configuation (files or reg keys) and will backup/restore them.
Basically all that someone needs to do is:
- Extract the UMCe2.zip to a folder on their Storage Card
- Register Mortscript (just click on it once, from this point on you can just click on a script and it will run.)
- Place the INI files that define the files or keys of the app that you'd like to backup/restore into the \Storage Card\UCMe2\ini folder. I have posted a small collection of some INI files as examples
- If you'd like startmenu shortcuts, I attached a few dummy.exe files that you can put into the UCMe2 folder so you can make shortcuts.
- Run the UCMe2_Backup and it will read every INI file in the ini folder and store the backup files in \Storage Card\UCMe2\Backup
- Run the UCMe2_Restore and it will read every INI file in the ini folder are restore the backups
I want the app do do a few things:
* to run start to finish unattended... start the program and it just runs, with no questions asked. (for scheduling purposes)
* the config ini for apps need to be simple to read/edit, so user community can post/share them, or be created by the original app devs
Feel free to create your own INI files and post them here for others to share
I have updated the scripts to include the SDConfigCE tool, to create a new SDConfig.txt based on the files that you have placed in the CABS subfolder.
Additionally, I have included XCopyCE support in the created SDConfig.txt file to copy files placed in the Files subfolder to the device.
(added test sdconfigce.zip to attempt to detect devices with internal storage vs. storage card and SHOULD manage other ROM languages)
Todo list:
add ProcKill and SuggestReboot options to ini file
-optional kill process before backup/restore
-optional suggest reboot after restore if suggested in ini file
add optional Disable parameter to ini file to "turn it off"
add section to backup/restore individual reg values (instead of entire subKey)
-[RegValues]
-Value1= root, subkey, value, data, type
Build in Restore script to run during UC to further automate UC
Provide bulk REG file import, over and above the scripted reg key values provided by INI files
Click to expand...
Click to collapse
Bug List:
Validation key in ini files do not like LONG reg root names, workaround is to change them to HKLM or HKCU as necessary
- change: Validate = HKEY_LOCAL_MACHINE,Software\Apps\Google Maps
- to: Validate = HKLM,Software\Apps\Google Maps
Click to expand...
Click to collapse
Updates in version 0.1.4:
updated bug in restoring of backup files. Now it will create missing directories and actually copy in the files :-0
Click to expand...
Click to collapse
Updates in version 0.1.3:
updated bug in validation logic on the restoring of backup.
Modified Backup script to automatically generate new SDConfig to make that "last minute" backup into a 1 step process.
Click to expand...
Click to collapse
Updates in version 0.1.2:
Created tool to create SDConfig.txt file automatically based on the presence of CAB or XML files in the CABs subfolder
Provided XCopyCE support to do file copy of the contents of the Files subfolder to the device during UC
Updated Menu applet to call the SDConfigCE tool
Click to expand...
Click to collapse
Updates in version 0.1.1:
Replaced dependancy of SKTools with DotFred Taskmanager for reg functions (it is even smaller and faster and freeware)
Changed display of progress in GUI
Added Version numbers in script and GUI
Click to expand...
Click to collapse
Initial release 0.1.0
How to make your own INI file:
The ini file is a very simple thing to make as it is basically just a text file with a few bracketed headers (sections) and values in them.
The easiest way to do so, is to place a copy of the template on your PC desktop and open it with notepad.
Then use the freeware tool CERegEditor ( http://ceregeditor.mdsoft.pl/ ) to read your device's registry... MOST apps save their customization in:
HKEY_CURRENT_USER\Software\ (App Publisher) \ (App Name)
There are plenty of sample files to use as references. If you need help, I'm certain that someone in this community can help.
PocketBreeze.ini
[UCMe2]
appname=PocketBreeze
subdir=PocketBreeze
Validate = HKLM,Software\Apps\SBSH.net PocketBreeze
[regkey]
key1=HKEY_CURRENT_USER\Software\SBSH\PocketBreeze
Click to expand...
Click to collapse
OwnerSettings.ini
[UCMe2]
appname=Owner
subdir=Owner
[regkey]
key1=HKEY_CURRENT_USER\ControlPanel\Owner
Key2=HKEY_LOCAL_MACHINE\Ident
key3=HKEY_CURRENT_USER\Software\Microsoft\Bluetooth\Settings
Click to expand...
Click to collapse
GoogleMaps.ini
[UCMe2]
appname=GoogleMaps
subdir=GoogleMaps
Validate=HKLM,Software\Apps\Google Maps
[Files]
cache-GLM.dat=\Application Data\GoogleMaps\cache-GLM.dat
index-GLM.dat=\Application Data\GoogleMaps\index-GLM.dat
prefs.dat=\Application Data\GoogleMaps\prefs.dat
prefsext.dat=\Application Data\GoogleMaps\prefsext.dat
prefsext2.dat=\Application Data\GoogleMaps\prefsext2.dat
prefsfriends.dat=\Application Data\GoogleMaps\prefsfriends.dat
prefsfriendsmini.dat=\Application Data\GoogleMaps\prefsfriendsmini.dat
strings-all.zlb=\Application Data\GoogleMaps\strings-all.zlb
Click to expand...
Click to collapse
Format of ini file is:
[UCMe2]
AppName = Friendly name for future use
subdir = subfolder to store the files
Validate = condition to look for before restoring (either a filepath and name or reg key... Reg key must be formatted like ROOT,KEY)
[regkey]
filename1 = regkey to backup
filename2= other regkey
[Files]
destinationfilename1.ext = source filename with full path
destinationfilename2.ext = source filename with full path
Just create an ini file for each app to backup
**** Reserved for suggestions or requests
I'm thinking of adding a switch to the ini files as a block to prevent backing up certain apps...
It would be used to "install" an app that only needs file copy like an exe or shortcuts or similar... no sense of copying back those files for backup, as they would never change.
an entry in the ini like:
[UCMe2]
RestoreOnly = 1
Would it make a difference to anyone if I CREATED new app shortcuts, or just copied the old ones for backup/restore?
Another optional ini setting should be:
[UCMe2]
Validate = <fullpath\file> or Reg key
Which would only restore the backups of the appropriate reg key or path\file exists. No sense restoring data for an app if it isn't yet installed.
hmmm...
I've added a bit of a GUI to the backup process, just to see something while it runs. I'll get around to doing the same to the restore mode...
UCMe2.mscr
Code:
ScriptDir = SystemPath("ScriptPath")
IniFiles = ScriptDir \ '*.ini'
StatusType(ST_LIST)
StatusInfo("UCMe2 Backup", "Backup process running")
ForEach F in files (IniFiles)
AppName = IniRead(F,"UCMe2","appname")
SD = IniRead(F,"UCMe2","subdir")
RestoreOnly = IniRead(F,"UCMe2","RestoreOnly")
StatusShow()
StatusMessage( AppName, ST_LIST, TRUE )
If (RestoreOnly = False)
MkDir(ScriptDir \ SD)
ForEach K, V in iniKeys (F,"regkey")
RunWait(Scriptdir\"SKTools.exe","#REXP(" & V & ") #FNAME(" & ScriptDir \ SD \ K & ".reg)")
StatusMessageAppend( "." )
EndForEach
ForEach K, SettingsFile in iniKeys (F,"Files")
copy (SettingsFile, ScriptDir \ SD \ K ,TRUE)
StatusMessageAppend( "." )
EndForEach
StatusMessageAppend( "OK" )
ElseIF
StatusMessageAppend( " - Skipped by RestoreOnly value" )
EndIf
EndForEach
StatusMessage( "Backup Complete" )
WriteStatusHistory( Scriptdir \ "BackupLog.txt" )
StatusMessage( "Window closing in 5 seconds" )
Sleep( 5000 )
StatusType(ST_HIDDEN)
Updated the scripts a bit and made a GUI menu... but that has limited value, beyond my playing with MortScript
here is a template of the current ini entires, but most of them aren't necessary... see the examples I already have in the zip.
Code:
[UCMe2]
appname = (descriptive Name)
subdir = (subfolder name)
RestoreOnly = 0/1 (1 = do not back up this app)
Validate = <fullpath\file> or Regkey HKLM,Software\appname\key (NOTE the comma in the reg key)
[regkey]
key1="HKEY_CURRENT_USER\Software\AppName\etc"
key2="HKEY_LOCAL_MACHINE\Software\AppName\etc"
[Files]
backupFilename.ext=Fullpath to sourcefilename.ext
anotherbackupFilename.ext=Fullpath to sourcefilename.ext
andanotherFilename.ext=Fullpath to sourcefilename.ext
rilphone2.ini
[UCMe2]
appname=Rilphone2
subdir=Rilphone2
[regkey]
key1=HKEY_LOCAL_MACHINE\Drivers\BuiltIn\RIL
[Files]
rilphone2.dll=\WINDOWS\rilphone2.dll
Click to expand...
Click to collapse
PocketBreeze.ini
[UCMe2]
appname=PocketBreeze
subdir=PocketBreeze
RestoreOnlyIfRegExists = 1
Validate = HKLM\Software\Apps\SBSH.net PocketBreeze
[regkey]
key1=HKEY_CURRENT_USER\Software\SBSH\PocketBreeze
Click to expand...
Click to collapse
I see where I should make a subdir to hold the INI files, and another to hold the backup folders... the prog dir is getting cluttered
I can see another mini app for this process... one to enable or disable individual ini files... (probably just move them to a different folder instead of deleting the ini file)
I don't think Mortscript has that kind of support for forms, so it might remain a manual process for a while. Lemme see how clever I can be
attached pics to post 1
there is a minor issue in the restore script... I have to re-think my logic for the validation determination, but I'll get that
I fixed the restore mode problem. as well are eliminated 2 unnecessary fields from the INI files.. the RestoreIfRegExists (or file)... now it just examines the content of the validate field... if it has a comma in it, it assumes it is a reg entry.
I still need to put in error handling, but I have to figure out how that all works in MortScript.
I also am considering having it backup/restore specific reg values, in addition to the whole key, but much of will be based on MortScript... it is lacking in reg features and I'm currently dependant on SKTools to do the reg functions... I'd much prefer to do it internally, but MS doesn't have a way of determining the regtype that it is reading, so I can't store that so I can restore it to the correct type.
fixed a simple issue of the reg export grabbing the level higher and exporting from there.
let me be the first one to reply the app looks nice, isent it nice that MortScript can be used in many ways?
This is great, I will be watching on this
that's funny how this is like a 2-page OP
but this is a fantastic idea and crazy useful if it comes to fruition. between this and UC or sashimi, flashing roms would have so little downtime..wow....
This thread will serve as a bottom-up guide to modifying SPB Mobile Shell 3.5. Any help and links is appreciated and will be incorporated.
Last updated: 10/24/09
*Basics of SPB Mobile Shell 3.5*
Areas of the program that can be modified are based on an XML architecture.
Entering the Program Files folder, one finds many files named *.dat. Many of these correspond to concepts or widgets that are easily familiar: clocks and etc., and several of them are responsible for the larger structure and feel (qa_layouts, for example). A more comprehensive listing of all the include files is:
[To come]
*.DAT Structure*
.dat files that can be modified are actually standard .zip archives. Simply copying them over to your PC, changing the file extension from .dat to .zip, then opening the archive and extracting the files inside, shows you all that comprises a given widget or layout.
assword: In extracting files from the .zip, one will be prompted for a password, which is universally b0fm18zq .
The files contained in an archive are generally a mix of .xml files (determination layout, composition and functionality) and .bmp (image files that correspond to the different looks a widget may have). The .xml files may be viewed and edited in any standard text editor, like Notepad++, and the .bmp files can be viewed and edited in anything from Photoshop to Microsoft Paint (though, for exactitude, Photoshop or similar is best).
*What Goes Into a Widget*
A widget is defined by three specific files (with filename containing the three prefixes qa_, va_, and ma_), as well as by XML references in files like qa_layouts.dat and qa_layouts_bup.dat.
*Simple Widget Appearance Modification*
Luiggi's 9 Icon Build Guide: http://rapidshare.com/files/101365258/9_Icon_Build_Guide.zip
Just making a quick link here to another forum thread for Vostradamus Mobile Shell Manager. Besides the app there's also a lot of information there on how to modify widgets:
http://forum.xda-developers.com/showthread.php?t=689087
Based on XDA_UC (by Noonski). I used it in my ROMs and the idea is just great.
But there are some issues that I want to fix and also I have some new ideas.
So I started new project.
1. XDA_UC is based on MortScript, and I use C#. This affects only engine. You can use your mscr files for customization =)
2. XDA_UC runs in background, it's almost silent. I want to add feedback to show what's happening now.
Official Russian forum is here.
This application will install all cab files, reg tweaks, provxmls, run mscr scripts, copy files (and more) from given folder. Use it after you upgraded your ROM to restore everything.
Information for Chef's updated 2010/07/07
UC_NET new feature - Using variables updated 2010/07/02
UC_NET new feature - Portable commands updated 2010/07/07
UC_NET tutorial - HOWTO create shortcuts updated 2010/07/02
Requirements: NetCF 3.5
Main features:
portable, supports localization, uses OS functions (if possible, for example for installing provxml), predictable - you can control order of everything, error reporting, full customization log.
Quick start:
1. create folders on your storage card
Code:
XDA_UC
XDA_UC\Manual
XDA_UC\Copy2Root
XDA_UC\Run
XDA_UC\Execute
"XDA_UC" is a place for all .cab, .reg, .mscr, .cer files that should be automatically installed to device.
"Manual" is a place for all cab files you want install in usual "visible" mode with all questions.
"Copy2Root" is a place for all files and folders that should be automatically copied to device.
"Run" is a place for you self-extracting archives.
"Execute" is a place for you self-extracting archives if you want to continue customization while them working.
2. run UC_NET.exe, select your XDA_UC folder and press customize button.
XDA_UC_NET features:
1. It runs with any ROM that has NETCF 3.5. You don't need to install or cook it. Just take exe and run it.
2. It searches for XDA_UC folders on your storages and then you can choose what folder you want to use for customization. And you can even select any other folder as a root for customization.
3. How it works. When you select folder and press "Customize!" program uses this algorithm:
Install MSCRs
RunWaitFiles - run apps from the Run folder and from coomand files UC_NET_Run
RunNoWaitFiles - run apps from the Execute folder and from coomand files UC_NET_Execute
Install XMLs ("*.*xml" from XDA_UC)
Install CERTs ("*.cer" from XDA_UC)
Install CABs silent to device memory ("*.cab" from XDA_UC)
Install CABs manual ("*.cab" from XDA_UC\Manual)
Install REGs ("*.reg" from XDA_UC, uses FS_TaskMgr.exe)
Install RGUs ("*.rgu" and "*.cereg" from XDA_UC, uses FS_TaskMgr.exe)
Copy Directories (see UC_NET_CopyDirectories)
Copy Files (see UC_NET_CopyFiles)
Move Files (see UC_NET_MoveFiles)
Delete Files (see UC_NET_DeleteFiles)
Create Shortcuts (see UC_NET_CreateShortcuts)
Install PIB (restore you contacts, uses last pib file and PPCPimBackup.exe)
if portable mode is disabled in menu, at the end of customization program will read arguments from registry and do these actions:
XDAUC_CopyDirectories (XDA_UC DirCopy feature)
XDAUC_DeletFiles (XDA_UC Delete feature)
XDAUC_CopyFiles (XDA_UC FileCopy feature)
XDAUC_CreateShortcuts (XDA_UC AutoShortCut feature)
4. FS_TaskMgr.exe and PPCPimBackup.exe are used for some actions, program will search for these files in current folder, in \Windows and in the selected XDA_UC folder. Both files are included.
5. Program logs every step – you can see what is happening right now. Errors are shown separately – you can see if something wrong happened.
6. All files processed in strict alphabetical order. For example, if you want to install SlideIT.cab before DanishPack.cab, you can just change names: 1_SlideIT.cab, 2_DanishPack.cab.
7. Program will first search and use XDA_UC\1, XDA_UC\2, … XDA_UC\99 folders (1-99 in alphabetical order), before using base XDA_UC. For example, you want to install some reg files before installing cab files, and you want to install first.cab right after installing these reg files. How to do this?
Go to XDA_UC folder, create subfolder "1" and move these reg files to XDA_UC\1.
Go to XDA_UC folder, create subfolder "2" and move this first.cab to XDA_UC\2.
8. You can structurize your setup folders by using Groups. Programm will show you menu and let to choose what you want to install. Read more here.
Ready!
Release history.
NETCFv35.Messages.EN.wm.cab - install it and you will see detailed descriptions of errors (if any)
If you want to translate program to your language - please follow instruction in included UC_NET_Localization_SRC.zip.
Update 2011/03/20 - new Fr and Sk localizations - http://forum.xda-developers.com/showpost.php?p=12231359&postcount=238
Information for Chef's
UC_NET v0.6
2010/07/07
option to run on any boot you like
you can configure wait timeout
you can set any folder as root folder (not only XDA_UC)
you can display your own Welcome Message in any language.
see attached readme.txt for more details
UC_NET v0.5
2010/07/02
put UC_NET_FirstBoot.lnk in your StartUp folder if you want run UC_NET.exe with these arguments
/CreateShortcuts
/CopyDirectories
/CopyFiles
/DeleteFiles
registry key
Code:
[HKEY_LOCAL_MACHINE\Software\XDA\Delete]
"Environment.SpecialFolder.Startup\\UC_NET_FirstBoot.lnk"=""
will delete this UC_NET_FirstBoot.lnk link after first boot.
registry key
Code:
[HKEY_LOCAL_MACHINE\Software\XDA\AutoShortCut]
"Environment.SpecialFolder.Programs\\UC_NET Customize.lnk"="\\Windows\\UC_NET.exe"
will create shortcut for users in programs menu.
command line parameters
/CreateShortcuts - creates shortcuts for all files listed under
HKLM\Software\XDA\AutoShortCut
/CopyDirectories- copies all directories (including all files and subfolders) listed under
HKLM\Software\XDA\DirCopy
/CopyFiles- copies all single files listed under
HKLM\Software\XDA\FileCopy
/Delete- deletes all files listed under
HKLM\Software\XDA\Delete
read more about XDA_UC commands format here:
http://forum.xda-developers.com/showthread.php?t=562568
UC_NET extends XDA_UC
You can use variables in your commands
and it will work with any localization of windows.
for example, this key will delete UC_NET_FirstBoot.lnk from Startup folder.
Code:
[HKEY_LOCAL_MACHINE\Software\XDA\Delete]
"Environment.SpecialFolder.Startup\\UC_NET_FirstBoot.lnk"=""
IMPORTANT - UC_NET doesn't show GUI to user if started with command line.
I think this is the most confusing part of original XDA_UC - your ROM depends on something that user will do on first (second) boot.
Therefor I disabled GUI - If user wants to use customization he will start it from start menu, and of course in this case user will know what's up. Correct me if I'm wrong.
Another difference from original XDA_UC - UC_NET will not install all cab files from windows folder. I can add this feature, but I don't know why Chef will put cab files into his "perfect" ROM. The same with reg files - what kind of chef needs to import reg files AFTER the ROM is ready? =)
please, post your comments and requests!
You can use these variables in you commands:
Microsoft Environment.SpecialFolder Enumeration members:
Code:
Environment.SpecialFolder.ApplicationData
- The directory that serves as a common repository for application-specific data for the current roaming user.
Code:
Environment.SpecialFolder.Favorites
- The directory that serves as a common repository for the user's favorite items.
Code:
Environment.SpecialFolder.Personal
- The directory that serves as a common repository for documents.
Code:
Environment.SpecialFolder.Programs
- The directory that contains the user's program groups.
Code:
Environment.SpecialFolder.StartMenu
- The directory that contains the Start menu items.
Code:
Environment.SpecialFolder.Startup
- The directory that corresponds to the user's Startup program group.
UC_NET v0.5 adds more variables
Code:
StorageManager.Profiles.SDMemory
- will be replaced in runtime with value of
HKLM\System\StorageManager\Profiles\SDMemory\Folder
Code:
StorageManager.Profiles.MoviNand
- will be replaced in runtime with value of
HKLM\System\StorageManager\Profiles\MoviNand\Folder
Code:
StorageManager.Profiles.INAND
- will be replaced in runtime with value of
HKLM\System\StorageManager\Profiles\INAND\Folder
UC_NET v0.9.4.2 adds more variables
Code:
ShellFolders.Windows
- value of HKLM\System\Explorer\Shell Folders\Windows
Code:
ShellFolders.StartUp
- value of HKLM\System\Explorer\Shell Folders\StartUp
Code:
ShellFolders.Recent
- value of HKLM\System\Explorer\Shell Folders\Recent
Code:
ShellFolders.Programs
- value of HKLM\System\Explorer\Shell Folders\Programs
Code:
ShellFolders.ProgramFiles
- value of HKLM\System\Explorer\Shell Folders\Program Files
Code:
ShellFolders.MyDocuments
- value of HKLM\System\Explorer\Shell Folders\My Documents
Code:
ShellFolders.Fonts
- value of HKLM\System\Explorer\Shell Folders\Fonts
Code:
ShellFolders.Favorites
- value of HKLM\System\Explorer\Shell Folders\Favorites
Code:
ShellFolders.Desktop
- value of HKLM\System\Explorer\Shell Folders\Desktop
Code:
ShellFolders.ApplicationData
- value of HKLM\System\Explorer\Shell Folders\Application Data
UC_NET extends XDA_UC with portable commands:
UC_NET_Magic_CreateShortcuts
UC_NET_CopyDirectories
UC_NET_CopyFiles
UC_NET_MoveFiles
UC_NET_CreateShortcuts
UC_NET_Delete
UC_NET_Run
UC_NET_Execute
UC_NET_BackupReg
Just create text file (UTF8 and Unicode supported), fill this file with command arguments and put it to any XDA_UC folder (to root, or to root\1 and so on).
UC_NET_Magic_CreateShortcuts, creates shortcuts for all exe files in given folder and its subfolders.
base filename UC_NET_Magic_CreateShortcuts format:
create_shortcuts_here=folder_with_exe_files
create_shortcuts_here=folder_with_exe_files
...
base filename UC_NET_CopyDirectories format:
to=from
to=from
...
base filename UC_NET_CopyFiles format:
to=from
to=from
new in v0.9.3.1 - You can use "*" and "?" wildcards in UC_NET_CopyFiles, (if you are using mask, destination parameter should be a folder name, as you cannot copy several files to one file)
...
base filename UC_NET_MoveFiles - new command v0.9.3.1, works exactly like UC_NET_CopyFiles, but moves files. You can use it to rename files as well.
to=from
to=from
...
base filename UC_NET_CreateShortcuts format:
link="target"
link="target" params
...
base filename UC_NET_Delete format:
file_to_delete
file_to_delete
directory_to_delete
...
You can use "*" and "?" wildcards in UC_NET_Delete -
for example
Code:
StorageManager.Profiles.SDMemory\_test_del\*.txt
will delete all txt files in my folder _test_del on storage card.
base filename UC_NET_Run format: - new command v0.9.3.1
each line of such file is a path to your application (or script, or anything that can run). UC_NET will start program and wait until it finishes. You can pass parameters to your program. In this case Use quotes around path and then place a parameters.
for example:
"notepad.exe" my_text_file.txt
this will start notepad.exe and pass my_text_file.txt as parameter.
base filename UC_NET_Execute format: - new command v0.9.3.1
works exactly like UC_NET_Run, but doesn't wait for complete and continue with next customization step.
UC_NET_BackupReg - new command v0.9.4.0, uses FS_TaskMgr.exe /regxpkey feature.
format for this command is
filepath=[regkey]
filepath2=[regkey2]
...
See attached examples. Tell me if it's not clear how to use this feature.
You can have more than one file with parameters - just add something to base filename. For example UC_NET_CreateShortcuts1.Settings.Advanced will be parsed as well as UC_NET_CreateShortcuts.txt
HOWTO create shortcuts
A shortcut is a small file containing the name of a target program file that the shortcut represents. The shortcut might additionally specify parameters to be passed to the target program when it is run. Shortcuts are very commonly placed on Start Menu.
option 1: UC_NET_Magic_CreateShortcuts protable command
use UC_NET to create shortcuts for all programs in given folder
Before you read remaining part of this tutorial you need to know
-the name of a folder with target programs (should be real folder you have on your device)
-name of folder for your new shortcuts (any name you like)
now download UC_NET_v0.5_portable_commands_example.zip from the first post and open UC_NET_Magic_CreateShortcuts.txt file.
There is a line in this file. It is a command, that will be processed by UC_NET when you press "Customize".
Code:
Environment.SpecialFolder.Programs\My Util=StorageManager.Profiles.SDMemory\MyPortableUtils
Format is:
<destination folder>=<source folder with target programs>
You can find '=' character and everything before it is a destination folder
Code:
Environment.SpecialFolder.Programs\My Util
Environment.SpecialFolder.Programs - is a variable, that points to the place where all Start Menu shortcuts are stored.
"My Util" - is a name for new folder under start menu where all new shortcuts created by this command will be stored.
For example, if you want create shortcuts for GPS utilities you can change this part to
Code:
Environment.SpecialFolder.Programs\GPS
everything after '=' character is folder with target programs
Code:
StorageManager.Profiles.SDMemory\MyPortableUtils
Replace this string with your path - folder with target programs, and you ready.
For example, if your GPS utilities are here
\Storage Card\util\gps you should change this part to
Code:
\Storage Card\util\gps
Save your file and put it in your XDA_UC folder.
Start UC_NET, choose this folder and perss [Customize!]
option 2: UC_NET_CreateShortcuts protable command
control and tune every shortcut for every program you want
Before you read remaining part of this tutorial you need to know
-the name of a target program file (should be real program you have on your device)
-name of your new shortcut (any name you like)
now download UC_NET_v0.5_portable_commands_example.zip from the first post and open UC_NET_CreateShortcuts1.txt file.
There are two lines in this file. Each line is a command, that will be processed by UC_NET when you press "Customize".
The second line shows an example how to create shortcut with parameters, it's a bit tricky and for now delete this second line. You can return to it later, when you understand simple shortcut creation.
Let take first line:
Code:
Environment.SpecialFolder.Programs\Test Portable.lnk="\Storage Card\_new_distrib\portable\LiteNote\LiteNote.exe"
format is
<shortcut name>="<target program file>"
You can find '=' character and everything before it is a shortcut name
Code:
Environment.SpecialFolder.Programs\Test Portable.lnk
Environment.SpecialFolder.Programs - is a variable, that points to the place where all Start Menu shortcuts are stored.
"Test Portable" is a name for my new shortcut - when I open Start menu I want to see this name. You can change it as you wish.
".lnk" - is a file extension, do not change it.
For example, if you want create shortcut for chess game you can change this part to
Code:
Environment.SpecialFolder.Programs\Chess.lnk
everything after '=' character is target program file
Code:
"\Storage Card\_new_distrib\portable\LiteNote\LiteNote.exe"
Replace this string with your target program file path and you ready.
Do not remove quotes.
For example, if your chess gameis here
\Storage Card\games\chess\chess.exe you should change this part to
Code:
"\Storage Card\games\chess\chess.exe"
Do this for all your shortcuts. (copy this line and edit it)
Save your file and put it in your XDA_UC folder.
Start UC_NET, choose this folder and perss [Customize!]
option 3: XDA_UC registry command AutoShortCut
UC_NET can read XDA_UC registry commands, you can use them as well.
These commands are not portable, and you should uncheck "Portable" option in menu or use command line switches. example:
Code:
[HKEY_LOCAL_MACHINE\Software\XDA\AutoShortCut]
"Environment.SpecialFolder.Programs\\GPS\\SeaSGEE.lnk"="\\Windows\\SeaSGEE.exe"
read more about this type of commands in XDA_UC thread.
And you can make these commands more portable if you use variables - replace \Storage Card with StorageManager.Profiles.SDMemory, this will work even if Storage Card has different name in new ROM.
How to create shortcut with parameters?
MSDN says
Place quotes around the target path so that SHCreateShortcut can correctly parse the target file from any following arguments.
Click to expand...
Click to collapse
example - creating shortcut to enable FileDialogChanger:
Code:
[HKEY_LOCAL_MACHINE\Software\XDA\AutoShortCut]
"Environment.SpecialFolder.Startup\\filedlgchgs.lnk"="\"ctlpnl.exe\" filedlgchg 1"
Hello...
...i am a german cook and im cooking ROMs for my Blackstoen (HD) ...
I love XDA_UC and i try your new version...
thanks for aour work !!!!!
Looks great, gonna try it out in my roms
Thanks!
This is nice If you could get away from using the FDCSoft task manager to import .reg files it would be perfect!
Idea looks great.
The only thing I'm missing here is;
*Quick lauch icons on the 3 home screens
-Would like to backup these icons in the exact order and every app should be installed, so each quick launch icon should referr to that perticular app.
After every install of any new energy ROM it is so much work to order and fill in the 3 home screens quick launch icons and apps
Kind Regards
[email protected]
ROM: Energy Dinik style 22nd June
Radio: 2.10.50.28_2
HSPL: 2.08 HSPL
History
[2010/11/02] UC_NET v 0.9.4.4
new command "Refresh Today screen" is added. Just create an empty file UC_NET_RefreshToday.txt in your folder, and the program will refresh today screen.
This command is executed after all other things in the folder, as a last step.
the program will show the message about cprog.exe if you run PPCPimBackup.exe, using UC_NET_Run command. It works exactly like it works when you are restoring pib file.
UC_NET_BackupReg is improved - the program now checks if registry keys exist, and doesn't create empty files if key doesn't exist.
UC_NET_Delete, UC_NET_Copy and UC_NET_Move are improved - all of them support masks now, and all these commands work with files and directories.
for example, now you can delete all files and directories in a folder with one UC_NET_Delete command, if you give it \myFolder\* as a parameter.
if you need a command that works only with files, add "Files" to its name (for example, UC_NET_CopyFiles)
if you need a command that works only with directories, add "Directories" to its name (for example, UC_NET_DeleteDirectories)
small bugfixes
Code:
[2010/10/22] UC_NET v 0.9.4.3
[LIST]
[*] Now the program uses safe code to control power during customization.
This version of UC_NET doesn't use registry keys related to power and back light to prevent device from sleep during customization.
Previous version, like original XDA_UC, used registry to keep back light "always on" - it's unsafe, because if your device was reset before the end of customization, these registry keys were not restored.
[*] Polish localization is updated (thanks to Bysio)
[*] UC_NET current version is added to log file.
[*] Sense SDK message boxes were replaced with standart message boxes to make program more stable (because there are no bugfixes for Sense SDK)
[/LIST]
[2010/10/14] UC_NET v 0.9.4.2
[LIST]
[*] new localizations were added:
Chinese (Simplified),zh-Hans
Polish, pl
Spanish, es-ES
[*] [Cancel] is added to the list of groups.
[*] [Pause] and [Resume] were added to customization window. You can use this to tell program you want to pause before next step of customization.
[*] New commandline parameter /base="path to your folder" - use it if you want to select any of your folders when UC_NET starts.
[*] "Create shortcut" is added to the main menu - use it to create shortcut in Start Menu, that will launch UC_NET and automatically select current folder.
[*] new variables:
"ShellFolders.Windows" - value of HKLM\System\Explorer\Shell Folders\Windows
"ShellFolders.StartUp" - value of HKLM\System\Explorer\Shell Folders\StartUp
"ShellFolders.Recent" - value of HKLM\System\Explorer\Shell Folders\Recent
"ShellFolders.Programs" - value of HKLM\System\Explorer\Shell Folders\Programs
"ShellFolders.ProgramFiles" - value of HKLM\System\Explorer\Shell Folders\Program Files
"ShellFolders.MyDocuments" - value of HKLM\System\Explorer\Shell Folders\My Documents
"ShellFolders.Fonts" - value of HKLM\System\Explorer\Shell Folders\Fonts
"ShellFolders.Favorites" - value of HKLM\System\Explorer\Shell Folders\Favorites
"ShellFolders.Desktop" - value of HKLM\System\Explorer\Shell Folders\Desktop
"ShellFolders.ApplicationData" - value of HKLM\System\Explorer\Shell Folders\Application Data
[*] log file now includes all variables for current ROM in the beginning
[*] errors and warnings summary are added to the end of log file.
[/LIST]
[2010/09/28] UC_NET v 0.9.4.0
[LIST]
[*] UC_NET_CopyFiles is fixed. (it was broken in 0.9.3.1, it always worked as move command).
[*] UC_NET_BackupReg - - new command, uses FS_TaskMgr.exe /regxpkey feature.
format for this command is
filepath=[regkey]
filepath2=[regkey2]
...
[*] system variables are now supported for Copy2Root folder.
see attached UC_NET_v0.9.4.0_test.zip
for example everithing from Copy2Root\Environment.SpecialFolder.StartMenu
will be copied to \Windows\Start Menu if you run 0409 localization of Windows Mobile.
[*] UC_NET_DeleteFiles is renamed to UC_NET_Delete as it can delete files and folders.
[/LIST]
[2010/09/27] UC_NET v0.9.3.1
[LIST]
[*] *.cereg files are supported
[*] program now uses last pib file, this allows you to keep several backups in the same folder and only the latest will be restored with PIMBackup.
[*] empty groups are hidden in the group list, especially root folder
[*] "*" and "?" masks are supported for UC_NET_CopyFiles command (if you are using mask, destination parameter should be a folder name, as you cannot copy several files to one file)
[*] same command files in a folder are processed in strict alphabetical order, (for ex. UC_NET_CopyFiles_0 comes first, then UC_NET_CopyFiles_8)
[*] UC_NET_MoveFiles - new command, works exactly like UC_NET_CopyFiles, but moves files. You can use it to rename files as well.
[*] UC_NET_Run - new command, each line of such file is a path to your application (or script, or anything that can run). UC_NET will start program and wait until it finishes. You can pass parameters to your program. In this case Use quotes around path and then place a parameters.
for example:
"notepad.exe" my_text_file.txt
this will start notepad.exe and pass my_text_file.txt as parameter.
[*] UC_NET_Execute - new command, works exactly like UC_NET_Run, but doesn't wait for complete and continue with next customization step.
[*] Run - special folder (like Copy2Root). You can create Run folder and place your your application (or script, or anything that can run) in this folder. UC_NET will try to execute everything from Run folder. It's good for self extracting archives for example.
UC_NET will wait for every program before it will start next (like UC_NET_Run command).
[*] Execute - special folder, works exactly like Run, but doesn't wait.
[*] Current version of Fr and De localizations are included.
[/LIST]
[2010/07/30] UC_NET v0.9.2.1
[LIST]
[*] Presets from v0.9.1 are replaced with [URL="http://forum.xda-developers.com/showpost.php?p=7413758&postcount=68"]more powerful Groups[/URL]. See attached QuickStart_XDA_UC_advanced_template.zip
[*] Dutch translation - thanks to [URL="http://forum.xda-developers.com/showpost.php?p=7412941&postcount=64"]webpatrick[/URL]
[/LIST]
[2010/07/27] UC_NET v0.9.1
[LIST]
[*] New presets system - more flexible customization.
You can sort you programs and tweaks and install only part of them! (And install another part later)
=) see included UC_NET_presets_template.zip for example.
[*] Arabic localization is ready ([URL="http://forum.xda-developers.com/showpost.php?p=7363890&postcount=51"]thanks to AbdullahSZ[/URL])
[*] Check if ROM security is relaxed (and fix it if needed)
[*] DisableFinalMessage - new option for Chefs. Use it if you want to disable "...Reset Now?" dialog.
[*] You can use comments in your portable commands. Any line that starts with a #, ; or // is a comment.
[*] Fixed bug with Copy Folders. (thanks to log file =)
[/LIST]
[2010/07/22] UC_NET v0.8.1
[LIST]
[*] (W)VGA improvements
[*] Russian localization ready, [URL="http://forum.xda-developers.com/showthread.php?t=709557"]read here to add more languages[/URL]
[*] for chefs - option to disable Exit in menu.
[*] you can add your own message to UC_NET_WelcomeMessage.txt and save put it to your folder. message will be shown when you select this folders. (For example, imagine you have one folder for games, one for GPS and so on).
[*] small tweaks here and there. =)
[/LIST]
[2010/07/19] UC_NET v0.7
[LIST]
[*] new GUI is created using [URL="http://forum.xda-developers.com/showthread.php?t=648906"]Sense Interface SDK v1.39[/URL].
[*] delete command now can delete the specified directory and any subdirectories and files in the directory.
[*] warning is displayed if pim.vol and PPCPimBackup are used at the same time
[/LIST]
[2010/07/07] UC_NET v0.6 new features
[LIST]
[*] for chefs - new option to run on any boot with any folder selected
[*] for chefs - new option to display given message in any language when program autoruns
[*] for users - wildcards are supported for Delete command. for example
[CODE]StorageManager.Profiles.SDMemory\_test_del\*.txt
will delete all txt files in my folder _test_del on storage card.
[/LIST]
[2010/07/02] UC_NET v0.5 new features
new portable command UC_NET_Magic_CreateShortcuts. example.
new variables for SDCards names
rgu files supported (as reg files)
you can open last log from menu now.
internal engine improvement - UC_NET detects ROM files in copy and replace operations.
[2010/06/29] UC_NET v0.4 new features
NEW - portable commands. Now you can put files with commands in your XDA_UC folders. I suggest to use this in-place of XDA_UC registry commands.
New - portable mode (active by default, see menu). "Portable" means no commands from registry will be used. This is good for users. UC_NET will just process selected folder and do not recreate shortcuts defined by Chef and so on. Tell me how do you like this new feature.
pim.vol copy to root is supported.
internal engine feature - delete locked files on next reboot.
[2010/06/26] UC_NET v0.3 new features
now you can use any folder on device as a root for customization.
command line params
/CreateShortcuts - creates shortcuts for all files listed under
HKLM\Software\XDA\AutoShortCut
/CopyDirectories- copies all directories (including all files and subfolders) listed under
HKLM\Software\XDA\DirCopy
/CopyFiles- copies all single files listed under
HKLM\Software\XDA\FileCopy
/Delete- deletes all files listed under
HKLM\Software\XDA\Delete
loacalization support - no more hardcoded strings like \Windows\Start Menu\Programs\, that depends on ROM locale. Use Environment.SpecialFolder Enumeration
for example, this key will delete UC_NET_FirstBoot.lnk from Startup folder.
Code:
[HKEY_LOCAL_MACHINE\Software\XDA\Delete]
"Environment.SpecialFolder.Startup\\UC_NET_FirstBoot.lnk"=""
Package for Chefs is released - tested it in my own ROM
[2010/06/25] UC_NET v0.2 new features
support XDA_UC Copy2Root feature - copy everything from Copy2Root folder to device, without any reg keys.
run MortScript files if any. MortScript must be installed or cooked (you can install using cab and UC_NET of course =).
you can run TaskManager right from UC_NET window.
save log as text file.
timestamps in log.
[2010/06/24] UC_NET v0.1 - first release, preview.[/CODE]
NRGZ28 said:
This is nice If you could get away from using the FDCSoft task manager to import .reg files it would be perfect!
Click to expand...
Click to collapse
UC_NET uses FDCSoft task manager in silent mode. It's almost invisible =)
Anyway, now I finished with most features, and will implement registry files parser. (It's strange, but there is no such thing in WinAPI).
Tried it today and it works perfect! Thanks for sharing! (You got the date wrong in v0.4 change log)
Where can I put folders and files to have automatically copied over. In SASHIMI, you put them in the Auto/Root folder
For example:
\Storage Card\SASHIMI\Auto\Root\Program Files
The folder and all it's sub-folders and contents would be copied to \Program Files
I tried naming a folder within the XDA_UC folder CopytoRoot and DirCopy and neither worked. What do I need to do?
name it Copy2Root
not CopyToRoot
I have an idea for next v0.5:
I see it's not very clear how to create shortcuts with XDA_UC.
Imagine this - you can create shortcuts for all *.exe files in folder (and its subfolders). Just
1. create text file named like UC_NET_Magic_CreateShortcuts.txt in your XDA_UC folder
2. add parameters to it
destination folder=source folder
destination folder 2=source folder 2
and so on.
for example if I add
Code:
Environment.SpecialFolder.Programs\My Utils=\Storage Card\MyPortableUtils
UC_NET will create folder My Utils in Start Menu and then it will create shortcuts for all programs from \Storage Card\MyPortableUtils in this folder.
What do you think? =)
[2010/07/02] UC_NET v0.5 new features
new portable command UC_NET_Magic_CreateShortcuts. example.
new variables for SDCards names
rgu files supported (as reg files)
you can open last log from menu now.
internal engine improvement - UC_NET detects ROM files in copy and replace operations.
Hi. I'd like to use yout app on my Omnia2 with Rapid's Sense 6.5, but there are some issues.
All I did was:
Copy the cabs in an XDA_UC named dir placed in my "install" folder on Storage Card.
Uncompressed the app, started the exe.
Selected the XDA_UC dir.
Pressed customize.
Then it installed MortScript.cab, and none of the others. Instead it says: [13:09:19][13:09:20][\Storage Card\install\XDA_UC][Install CABs silent][ERROR]\Storage Card\install\XDA_UC\cabname.CAB, Exception:wceload.exe returns -2147024891
for all of the cabs I want to install(cabname is always different ofc). Could you help me please?
wceload.exe returns -2147024891, "access denied", on you ROM.
Try this - install one of your cabs manually.
If installing cab by tapping on it, would normally display a security
warning for not being signed, then wceload.exe will fail in silent mode.
In this case you need to relax your ROM security.
This is in the Requirements of original XDA_UC:
"The Rom should have the security relaxed in HKLM\Security\Policies\Polices by setting the value 0000101a to a 1.
So unsigned installations and Mortscript do not give a security error."
Try to add this to your registry.
serfer222 said:
wceload.exe returns -2147024891, "access denied", on you ROM.
Try this - install one of your cabs manually.
If installing cab by tapping on it, would normally display a security
warning for not being signed, then wceload.exe will fail in silent mode.
In this case you need to relax your ROM security.
This is in the Requirements of original XDA_UC:
"The Rom should have the security relaxed in HKLM\Security\Policies\Polices by setting the value 0000101a to a 1.
So unsigned installations and Mortscript do not give a security error."
Try to add this to your registry.
Click to expand...
Click to collapse
I see, thanks. There is a registry app in which I can disable security. I'll do that.
Thanks agai and keep up the good work!
This is pretty awesome. Lightweight alternative to SASHIMI. It works great!
i have create the folder '\Storage Card\XDA_UC'
now, i dont know how to do with the following instructions.
can someone guide me with this?
maesus said:
XDA_UC installation tips are generally similar as listed here. http://forum.xda-developers.com/showthread.php?p=3611692
I made some modifications so that the sequence of the installation will be like this:
My.tsk file from "\Storage Card\XDA_UC"
and if not present Cook.tsk from Windows Folder.
import *wifi*.*xml and *mail*.*xml provisional registry settings for WiFi and Email setup.
Copy Over User Files.
Check for "\Storage Card\XDA_UC\Copy2Root" if present, Disable Manila from Homescreen then Copy files from "\Storage Card\XDA_UC\Copy2Root" to the root of the device, Then checking for existence of wallpaper_TF3D.png or wallpaper_TF3D.jpg in "\Storage Card\XDA_UC\Copy2Root\Windows" and adding that to
[HKCU\Software\HTC\Manila]
"HomeBackgroundPath"="\\Windows\\wallpaper_TF3D.jp g"
Import registry files from "\Storage Card\XDA_UC\Copy2Root\Windows\manila.reg" If present
Re-enable Manila on Homescreen and redraw it. Now also works for the Sense 2.1 and up versions.
.xdas files in "\Storage Card\XDA_UC"
Silently run Legacy SDConfig.txt from Storage Card
(If your using RunCC.exe or Autorun you do not need to point to or use SDAutorun.exe or SDConfig.txt) Thanks to RoryB
Commands for SDConfig.txt can be found here....
.cab files in "\Storage Card\autoinstall"
This makes it compatible with your storage card's setup for Tom's Autoinstall.
.cab files in "\Storage Card\XDA_UC"
.cab files in "\Storage Card\XDA_UC\Storage", These cab files will be tempted to install to Storage Location. Not recommend using this method. Please use Manual instead.
.cab files in "\Storage Card\XDA_UC\Manual",These cab files will start with Full User interaction capabilities to choose where to install to.
.reg files in "\Storage Card\XDA_UC"
.xml files in "\Storage Card\XDA_UC"
.mscr files in "\Storage Card\XDA_UC"
.cer files in "\Storage Card\XDA_UC"
Create Shortcuts and more from Registry Keys
More information here....
Copy over welcomehead.192.01.png & welcomehead.192.02.png present in "\Storage Card\XDA_UC\Copy2Root\Windows" to the Windows folder.
Copy over welcomehead.96.01.png & welcomehead.96.02.png present in "\Storage Card\XDA_UC\Copy2Root\Windows" to the Windows folder.
Actually everything is copied over from Copy2Root folder to root, but the above Splashcreens get their file atributes removed before this happens.
Add native support for .mscr, .mortrun, .xda, xdai, xdas & .xdaz files
Well, I hope this is good enough to explain everything. Good luck with setting up your XDA_UC!
Click to expand...
Click to collapse
or is that i need to follow this? http://forum.xda-developers.com/showthread.php?t=684865 or http://forum.xda-developers.com/showthread.php?t=366337
i'm a newbie, so, can someone explain more easily?
Try this one:
http://forum.xda-developers.com/showthread.php?t=795711
It's for Energy customized rom, but it will help you understand how xda_uc works.
Just a few tips:
-You can put all the .cab files of programs you want to install in XDA_UC folder, as well as all the .reg files
- Create the folder Copy2Root inside XDA_UC folder. Inside Copy2Root folder, put all the files and folders you want to be copied to their respective places in the phone memory. Use the same path that the original files have, including folders.
For instance, inside Copy2Root I have the folder "Windows" and inside "Windows" I have the folder "Rings" with all the sounds I want to restore at each hard reset.
Another example: if you want to copy something to the root of you phone's memory, just put the file in the Copy2Root folder. If you want to copy a file to the Windows folder, create the folder Windows in Copy2Root folder and inside it put the file you want to copy.
thanks for reply
joooe said:
Try this one:
http://forum.xda-developers.com/showthread.php?t=795711
It's for Energy customized rom, but it will help you understand how xda_uc works.
Just a few tips:
-You can put all the .cab files of programs you want to install in XDA_UC folder, as well as all the .reg files
- Create the folder Copy2Root inside XDA_UC folder. Inside Copy2Root folder, put all the files and folders you want to be copied to their respective places in the phone memory. Use the same path that the original files have, including folders.
For instance, inside Copy2Root I have the folder "Windows" and inside "Windows" I have the folder "Rings" with all the sounds I want to restore at each hard reset.
Another example: if you want to copy something to the root of you phone's memory, just put the file in the Copy2Root folder. If you want to copy a file to the Windows folder, create the folder Windows in Copy2Root folder and inside it put the file you want to copy.
Click to expand...
Click to collapse
then no need to use these software?
* DoeDoe's SDConfig.txt creator.
* .reg -> xml conversion tool
* XML Notepad 2007
* CeRegEditor (can find registry changes)
* DaveShaw's Folder Copy utility
* Registry capture Logger
and, is that i need to locate those reg file from where the application folder in the device then straight away copy them to XDA_UC folder?
Stick with the basics, for now.
Here's what I do: I customize the phone to my needs in every option needed. Then, I grab a registry editor, and search for the entries that correspond to the changes I've made.
Once I find them, I export that registry key to the XDA_UC folder as a .reg file. Then I repeat for all the entries that matter to me.
When hard resetting, XDA_UC will enter those registry files into the wm registry to activate your options.
So, in teory, you will only need a registry editor.
ok...
i will try
thanks again..
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!