Noob alert: Would anyone be kind enough to write a quick tutorial on how to use these jar files? I want to learn how to edit xml. I have searched these forums and google, but havent been able to get anywhere.
Code:
java -jar baksmali-0.93.jar -o <output directory> <.dex file, typically classes.dex>
For example: java -jar baksmali-0.93.jar -o out/rogers/dexout/ rogers-classes.dex
java -Xmx512M -jar smali-0.92.jar <output directory from above step> -o <name for new .dex output file>
For example: java -Xmx512M -jar smali-0.92.jar out/rogers/dexout/ new-rogers.dex
First command disassembles the .dex file, second command reassembles it (hopefully after you went in and made some cool changes to some of the .smali files)
Re-read your post, these are not for editing XML files. That is a whole other ball of wax. Most devs are not as interested in making post-build modifications now that the source for everything is available. You can set up a build environment and edit the XML files in plain text before you compile everything. Which is a lot easier than hex editing binary XML files...
Ohsaka said:
Code:
java -jar baksmali-0.93.jar -o <output directory> <.dex file, typically classes.dex>
For example: java -jar baksmali-0.93.jar -o out/rogers/dexout/ rogers-classes.dex
java -Xmx512M -jar smali-0.92.jar <output directory from above step> -o <name for new .dex output file>
For example: java -Xmx512M -jar smali-0.92.jar out/rogers/dexout/ new-rogers.dex
First command disassembles the .dex file, second command reassembles it (hopefully after you went in and made some cool changes to some of the .smali files)
Re-read your post, these are not for editing XML files. That is a whole other ball of wax. Most devs are not as interested in making post-build modifications now that the source for everything is available. You can set up a build environment and edit the XML files in plain text before you compile everything. Which is a lot easier than hex editing binary XML files...
Click to expand...
Click to collapse
I dont think you have to hex-edit them. Theres a tool called AXMLPrinter2.jar that makes xml files into readable ones. I'm sure you can just make your edits and copy and paste that text into a new blank xml file. Credits to jashu for the AXMLPrinter.jar
alritewhadeva said:
I dont think you have to hex-edit them. Theres a tool called AXMLPrinter2.jar that makes xml files into readable ones. I'm sure you can just make your edits and copy and paste that text into a new blank xml file. Credits to jashu for the AXMLPrinter.jar
Click to expand...
Click to collapse
How do you propose to recompile the xml sheet?
I don't think it's a jar btw, pretty sure he made a tar/gz, and a perl script.
mianosm said:
How do you propose to recompile the xml sheet?
I don't think it's a jar btw, pretty sure he made a tar/gz, and a perl script.
Click to expand...
Click to collapse
nah pretty sure its a jar. I'll find the link for you.
right here http://forum.xda-developers.com/showthread.php?t=514412
just did some quick research...im a noob in this field but can anyone make sense of this? http://www.stylusstudio.com/binary_xml.html#
It's going to be quicker and easier to change the values in a hex editor, and as said prior - you aren't going to be able to just put a human readable xml file into an apk and have the phone use it - it's expecting binary, so it would be a pretty neat feat if it took human readable and parsed it and out put it.
mianosm said:
It's going to be quicker and easier to change the values in a hex editor, and as said prior - you aren't going to be able to just put a human readable xml file into an apk and have the phone use it - it's expecting binary, so it would be a pretty neat feat if it took human readable and parsed it and out put it.
Click to expand...
Click to collapse
Yeah I know that, but you should be able to convert to binary and then convert it back to xml format. Problem is on every converter I've used, in the past 5 minutes (just started researching) keeps saying something about not a schema
alritewhadeva said:
Yeah I know that, but you should be able to convert to binary and then convert it back to xml format. Problem is on every converter I've used, in the past 5 minutes (just started researching) keeps saying something about manifest not found.
Click to expand...
Click to collapse
The xml in the templates/updates is currently compiled.
After you use the xml parser it's human readable/editable, but then you would need to recompile it. If you're going to do that, you'd might as well just do it from the source, and even still the color changes are hard coded and need to be changed to your liking.
The decompiled editing, and hex editing is really going to be the easiest/quickest method for color adjustments for now.
I'm surprised Stericson or JF haven't put out an XML compiler yet...
Ohsaka said:
You can set up a build environment and edit the XML files in plain text before you compile everything. Which is a lot easier than hex editing binary XML files...
Click to expand...
Click to collapse
Is it required to set up a build environment? I researched that and only found instructions for linux/mac.
This is my understanding of baksmali/smali. I thought I could take a file(apparently a DEX file) from the Android SDK, disassemble it, edit, then assemble. I scanned through the SDK and didn't find any DEX files?
Ohsaka said:
I'm surprised Stericson or JF haven't put out an XML compiler yet...
Click to expand...
Click to collapse
yea...True true. Just a QQ what's the AndroidManifest.xml file used for?
For your reading pleasure (from the launcher AndroidManifest.xml):
Code:
<?xml version="1.0" encoding="utf-8"?>
<!--
/*
**
** Copyright 2008, The Android Open Source Project
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.launcher"
android:sharedUserId="android.uid.shared"
android:sharedUserLabel="@string/application_name">
<permission
android:name="com.android.launcher.permission.INSTALL_SHORTCUT"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:protectionLevel="normal"
android:label="@string/permlab_install_shortcut"
android:description="@string/permdesc_install_shortcut" />
<permission
android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:protectionLevel="normal"
android:label="@string/permlab_uninstall_shortcut"
android:description="@string/permdesc_uninstall_shortcut"/>
<permission
android:name="com.android.launcher.permission.READ_SETTINGS"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:protectionLevel="normal"
android:label="@string/permlab_read_settings"
android:description="@string/permdesc_read_settings"/>
<permission
android:name="com.android.launcher.permission.WRITE_SETTINGS"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:protectionLevel="normal"
android:label="@string/permlab_write_settings"
android:description="@string/permdesc_write_settings"/>
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.SET_WALLPAPER" />
<uses-permission android:name="android.permission.SET_WALLPAPER_HINTS" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="com.android.launcher.permission.WRITE_SETTINGS" />
<application
android:name="LauncherApplication"
android:process="android.process.acore"
android:label="@string/application_name"
android:icon="@drawable/ic_launcher_home">
<activity
android:name="Launcher"
android:launchMode="singleTask"
android:clearTaskOnLaunch="true"
android:stateNotNeeded="true"
android:theme="@style/Theme"
android:screenOrientation="nosensor"
android:windowSoftInputMode="stateUnspecified|adjustPan">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME"/>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.MONKEY" />
</intent-filter>
</activity>
<activity
android:name="WallpaperChooser"
android:label="@string/pick_wallpaper"
android:icon="@drawable/ic_launcher_gallery">
<intent-filter>
<action android:name="android.intent.action.SET_WALLPAPER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<!-- Enable system-default search mode for any activity in Home -->
<meta-data
android:name="android.app.default_searchable"
android:value="*" />
<!-- Intent received used to install shortcuts from other applications -->
<receiver
android:name=".InstallShortcutReceiver"
android:permission="com.android.launcher.permission.INSTALL_SHORTCUT">
<intent-filter>
<action android:name="com.android.launcher.action.INSTALL_SHORTCUT" />
</intent-filter>
</receiver>
<!-- Intent received used to uninstall shortcuts from other applications -->
<receiver
android:name=".UninstallShortcutReceiver"
android:permission="com.android.launcher.permission.UNINSTALL_SHORTCUT">
<intent-filter>
<action android:name="com.android.launcher.action.UNINSTALL_SHORTCUT" />
</intent-filter>
</receiver>
<!-- The settings provider contains Home's data, like the workspace favorites -->
<provider
android:name="LauncherProvider"
android:authorities="com.android.launcher.settings"
android:writePermission="com.android.launcher.permission.WRITE_SETTINGS"
android:readPermission="com.android.launcher.permission.READ_SETTINGS" />
</application>
</manifest>
Or the Music one:
Code:
packages/apps/Music/res/layout/statusbar.xml
<?xml version="1.0" encoding="utf-8"?>
<!--
/*
** Copyright 2007, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal">
<ImageView android:id="@+id/icon"
android:padding="4dip"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ImageView>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView android:id="@+id/trackname"
android:textAppearance="?android:attr/textAppearanceMediumInverse"
android:focusable="true"
android:ellipsize="marquee"
android:singleLine="true"
android:layout_gravity="left"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView android:id="@+id/artistalbum"
android:textAppearance="?android:attr/textAppearanceSmallInverse"
android:layout_gravity="left"
android:maxLines="2"
android:scrollHorizontally="true"
android:ellipsize="end"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
And for the statusbar:
Code:
/frameworks/base/tests/StatusBar$ cat AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.statusbartest">
<uses-permission android:name="android.permission.DEVICE_POWER" />
<uses-permission android:name="android.permission.STATUS_BAR" />
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />
<uses-permission android:name="android.permission.VIBRATE" />
<application>
<activity android:name="StatusBarTest" android:label="_StatusBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="NotificationTestList" android:label="_Notifications">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="ToastTest" android:label="_Toasts">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="PowerTest" android:label="_Power">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
mianosm said:
For your reading pleasure (from the launcher AndroidManifest.xml):
Code:
<?xml version="1.0" encoding="utf-8"?>
<!--
/*
**
** Copyright 2008, The Android Open Source Project
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.launcher"
android:sharedUserId="android.uid.shared"
android:sharedUserLabel="@string/application_name">
<permission
android:name="com.android.launcher.permission.INSTALL_SHORTCUT"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:protectionLevel="normal"
android:label="@string/permlab_install_shortcut"
android:description="@string/permdesc_install_shortcut" />
<permission
android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:protectionLevel="normal"
android:label="@string/permlab_uninstall_shortcut"
android:description="@string/permdesc_uninstall_shortcut"/>
<permission
android:name="com.android.launcher.permission.READ_SETTINGS"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:protectionLevel="normal"
android:label="@string/permlab_read_settings"
android:description="@string/permdesc_read_settings"/>
<permission
android:name="com.android.launcher.permission.WRITE_SETTINGS"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:protectionLevel="normal"
android:label="@string/permlab_write_settings"
android:description="@string/permdesc_write_settings"/>
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.SET_WALLPAPER" />
<uses-permission android:name="android.permission.SET_WALLPAPER_HINTS" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="com.android.launcher.permission.WRITE_SETTINGS" />
<application
android:name="LauncherApplication"
android:process="android.process.acore"
android:label="@string/application_name"
android:icon="@drawable/ic_launcher_home">
<activity
android:name="Launcher"
android:launchMode="singleTask"
android:clearTaskOnLaunch="true"
android:stateNotNeeded="true"
android:theme="@style/Theme"
android:screenOrientation="nosensor"
android:windowSoftInputMode="stateUnspecified|adjustPan">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME"/>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.MONKEY" />
</intent-filter>
</activity>
<activity
android:name="WallpaperChooser"
android:label="@string/pick_wallpaper"
android:icon="@drawable/ic_launcher_gallery">
<intent-filter>
<action android:name="android.intent.action.SET_WALLPAPER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<!-- Enable system-default search mode for any activity in Home -->
<meta-data
android:name="android.app.default_searchable"
android:value="*" />
<!-- Intent received used to install shortcuts from other applications -->
<receiver
android:name=".InstallShortcutReceiver"
android:permission="com.android.launcher.permission.INSTALL_SHORTCUT">
<intent-filter>
<action android:name="com.android.launcher.action.INSTALL_SHORTCUT" />
</intent-filter>
</receiver>
<!-- Intent received used to uninstall shortcuts from other applications -->
<receiver
android:name=".UninstallShortcutReceiver"
android:permission="com.android.launcher.permission.UNINSTALL_SHORTCUT">
<intent-filter>
<action android:name="com.android.launcher.action.UNINSTALL_SHORTCUT" />
</intent-filter>
</receiver>
<!-- The settings provider contains Home's data, like the workspace favorites -->
<provider
android:name="LauncherProvider"
android:authorities="com.android.launcher.settings"
android:writePermission="com.android.launcher.permission.WRITE_SETTINGS"
android:readPermission="com.android.launcher.permission.READ_SETTINGS" />
</application>
</manifest>
Click to expand...
Click to collapse
Is that directly from the source? Android source that is. In eclipse when you write the .xml file doesn't it convert it to binary when you compile/create the app?
That's directly from the source yes. When it's compiled it takes the xml format and turns it into binary yes.
ultra spikey said:
Is it required to set up a build environment? I researched that and only found instructions for linux/mac.
This is my understanding of baksmali/smali. I thought I could take a file(apparently a DEX file) from the Android SDK, disassemble it, edit, then assemble. I scanned through the SDK and didn't find any DEX files?
Click to expand...
Click to collapse
I believe, for right now, you need a build environment to product compiled XMLs only. Until someone releases a tool to compile them...
Your understanding is correct. The SDK does not include and .dex files. The SDK is to help you develop your own app, not edit the underlying android platform files. Even if you grab the source from using git, you wont find .dex files. They are the output of the build process...i.e. the compiled java files...
Yes, only on linux/mac. Just get VMWare or some other virtual machine program and make a linux VM to develop on. If I ever get around to finishing mine, I will give it out so that people can just get VMPlayer to run it...
VirtualBox is pretty outstanding as well as vmware.
The real fix should not be decompiling/compiling though, it really should be edits to the actual source that is pushed upstream to gerrit, so it can be reviewed and updated accordingly.
It's really kind of a sloppy backward way to do it the way how it's getting done right now - don't get me wrong it works, but it's just not best practice.
Taking anything outside of the compiled xml and dex files opens up the system for slowdowns though doesn't it?
Like if we all somehow submitted a patch to the core that made it know to look at /sdcard/theme/ for a bunch of xml files and pngs... Then joe blow comes along with his $2.99 2gig card that runs slow as s* and his whole phone because unusable...
Is it even possible to use eclipse on ubuntu? Haven't found an answer. Running ubuntu on a VM right now.
Eclipse is java... so yes. There may not be a nice windows installer for it, but it should run on any platform with a JRE...
Ohsaka said:
Eclipse is java... so yes. There may not be a nice windows installer for it, but it should run on any platform with a JRE...
Click to expand...
Click to collapse
all right then. Time to research lol. Thanks
All of the instructions for editing the browser menu reference changing InternetPortal-en-US.xml.
It's nowhere to be found on mine so I have to assume it's been changed on the latest TP2's.
Any suggestions?
Here's a link for reference:
http://www.fuzemobility.com/add-an-application-short-cut-to-the-internet-tab-2/
Nevermind. I think I found it in \windows\27c65cbd_manila.
Will post more after some playing .
FYI
Using notepad I was able to add more items to the Browser menu by editing \windows\27c65cbd_manila.
I should probably mention I had to create the .qtc image file for Google Maps.
View attachment 254663View attachment 254664
Here is my 27c65cbd_manila file now:
Code:
<?xml version="1.0" encoding="utf-16"?>
<InternetPortal>
<IncludeUserFavorites>True</IncludeUserFavorites>
<Banner
DefaultImagePath="\Windows\HTC\Assets\Images\InternetPortal\banner.qtc"
SelectedImagePath="\Windows\HTC\Assets\Images\InternetPortal\banner_selected.qtc"
Width="480"
Height="215" />
<OperatorLinks>
<Link
Text="Google Maps"
Executable="\Program Files\GoogleMaps\GoogleMaps.exe"
ImagePath="\Windows\MPI_Google Maps.qtc" />
<Link
Text="YouTube"
Executable="\windows\youtube.exe"
ImagePath="\Windows\HTC\Assets\Images\InternetPortal\youtube.qtc" />
<Link
Text="Facebook"
Executable="\windows\FACEBOOK.EXE"
ImagePath="\Windows\MPI_HTC_facebook.qtc" />
<Link
Text="Messenger"
Executable="\windows\WLMMessenger.exe"
ImagePath="\Windows\MPI_WLMMessenger.qtc" />
</OperatorLinks>
</InternetPortal>
Thanks for shareing! I was pullling my hair trying to find that file....
Im writing my first app, and right off the start, when creating a new project in eclipse, I get 2 errors in the manifest.
this is my manifest, note that I didn't change anything. The line of *'s is where eclipse gives me the error. It says;
"no resource identifier found for attribute 'allowBackup' in package 'android' ... line 11"
"no resource identifier found for attribute 'tragetSdkVersion' in package 'android' ... line 7"
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.helloworld"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk ****************************************************************************************
android:minSdkVersion="3"
android:targetSdkVersion="3" />
<application ****************************************************************************************
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.helloworld.HelloWorld"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
thanks in advance!