---nvm got it working myself
pretty simple actually. Download the baksmali and the smali .jar files and just execute them on the appropriate files. Baksmali is icelandic i believe for diassembler whereas smali is icelandic for assmebler.
Syntax: java -jar baksmali.jar xxxx
haven't used smali to reassemble yet but will write the syntax when I get that.
You should post up how/what you did.
[Guide] baksmali guide howto example
This is a lame quick way to unpack and pack a apk a bunch of apks using baksmali current as of 8:34 AM 2/9/2010
hxxp://rmccurdy.c0m/scripts/ quickbaksmali.zip
Code:
* requires java ! in %PATH% !
* just place the java_ee_sdk-5 folder to make it portable !
* put the APKS files in the folder APKS
* you (can) edit the job2.bat with your keytool/key info etc ..
* run the baksmali.bat
* make your changes etc
* run the smali.bat
you should see the updated \META-INF folder in the 'new' apk
and the classes.dex should be new.
-rmccurdy.com
reference:... NM can't post urls
interesting and very handy. thanks,
Related
I'm using a custom rom,and now that stock rom for my region is published,I want to extract language files (system and dictionaries+keyboards and fonts) from stock rom and inject them to the custom rom that I'm using,so any help is appreciated to find which files do I need to extract from stock rom.
Theoretically, however, reminds you that the app I am not alone but also the framework apk etc. .. must pay attention.. Help to get into a rom, and can for example extract the launcher or gps.conf or apk predefinit of the Rom and then copy them to root through esplorer in our folder system / app . -1.extract the file from system.rfs -2 and install magic iso and go to open the rfs .. app folder you will find the system app .. conf files in the etc etc for gps. APKTool is able to reverse engineer the binaries of Android applications. With it you can de-compile and get an apk files that make up the apk.
Beware though that being a compiled language java bytecode, executable in the case of the Android Dalvik machine, do not get the files. Class with the java code readable plaintext file but. Smali containing assembly code of the virtual machine (assembler / disassmbler smali) . Will be easier to understand and modify resource files in the directory / res, usually they are xml files and png images that you can modify and then recompile the apk...download Apk tool here: http://www.androidlab.it/wp-content/plugins/download-monitor/download.php?id=13 .. 1. Unpack the zip file you just downloaded and APKTool.zip command prompt / shell posizioniamoci within the directory APKtool 2. execute the following command:
apktool framework-if res.apk
we get the result back edge
I: Framework installed to: C: \ Users \ username \ apktool \ framework \ 1.apk. 3. Now we copy the apk in the same folder that we want to de-compile and impart the following command
apk apktool d-name-it-de-compilare.apk
upon completion of the directory APKtool find a folder with the same name of the app that we have de-populated.
We can now go take a look at the file and change where we see fit. 4. To translate the application should modify the files in / res / values-en, if the folder is not present we should create and copy into a folder other values-xx files arrays.xml strings.xml and then edit translating the texts into Italian. 5. after making the changes we should rebuild our apk with the following
apktool b-name-from-complete apk
in the directory with the same name of the app that we previously de-compiled find two new folders
dist / build / ..--- 6. in the / dist find our apk, remember that the resulting file has no signature, to sign our package we can use this. sign or unsign” i file Apk download here: http://goo.gl/9aWVM
not so understandable , but thx anyways.which files do I need to extract for samsung keyboard (AxT9IME) to work??
Re ad this guide: http://forum.xda-developers.com/showthread.php?t=1511730
---------- Post added at 07:30 PM ---------- Previous post was at 07:02 PM ----------
Try this method- Make a backup of the applications that you want to move , the phone will put the apk 'in the path sd>backups>apps, from here you take them and bring them in another rom...
amir_s_m said:
not so understandable , but thx anyways.which files do I need to extract for samsung keyboard (AxT9IME) to work??
Click to expand...
Click to collapse
my question exists!!
NOTE: If you want to edit framework-res.apk or systemui.apk, follow this guide, it's the best available:good:
http://forum.xda-developers.com/showthread.php?t=2086771
Now, lets start
smali, dex....whaaat?
It's simple our odexed ROMs have .apk which use .odex files which contain cache. When the ROM is deodexed the .apk contains classes.dex which now contains information present in the .odex files!:good:
Smali is nothing but disassembled .dex file! The .dex file is disassembled into java code which can be edited via Notepad ++( simple notepad works too)
WHY?
Why do you need to edit classes.dex !
For me, i was trying to make CRT on/off animation which required editing classes.dex in service.jar!
More edits where classes.dex inside services.jar is needed
- Changing status bar clock color
- Changing text color in notification bar
- More? Tell Me!:highfive:
HOW?
Requirements: Java SDK!
I have APK Multi Tool, although it decompiles .apk and .dex files inside the apk, it doesn't provide option to decompile a separate classes.dex!
Still it's best software for decompiling apks and more!
Smali-Me 1.0
Download and Instructions:
http://www.wrapcode.com/android/baksmali-smali-dex-files/
ROM Tools by iamareebjamal - More noob friendly
http://forum.xda-developers.com/showthread.php?t=2163286
Once you have decompiled classes.dex, you'll get various folder with various files. Edit the files required and then recompile!
So after generating new classes.dex, put it back to services.jar by opening the file in winzip!:good:
ONE MORE THING
Make your own flashable zip
The recompiled systemui.apk or framework-res.apk, when pushed via root explorer give lot of force closes. This is normal, however if u wish to avoid it u can create a cwm flashable zip for the same!:good:
I'm attaching the sample.zip here and u can add your files in the specified folders. For more details read the source forum:
http://forum.xda-developers.com/showthread.php?t=1721680
Reserved- for more stuff!
Subscribed.. will see what it is later
Hey, add this to your guide, i far more easier and nice to look at too than smali me
http://forum.xda-developers.com/showthread.php?p=40435351#post40435351
Hello Guyzzz.....This Is My First Theming Guide Fro Mt65XX Devices
In This Guide I Will Tell You How To Do The Following Things:-
##Making Settings Holo Light##
##Changing The Switch##
##Changing The Spinners##
Requirements:-
##APKTOOL##
##NOTEPAD++##
##Knowledge About Decompiling And Recompiling##
##Time,Patience And Most Important Of All............A Working Brain--------- ##
OK......So Lets Get Started.......
For Making Settings Holo Light
Decompile Settings.apk
Open Android Manifest.xml Using NotePad++
Search For This Line
Code:
<application android:hardwareAccelerated="true" android:icon="@mipmap/ic_launcher_settings" android:label="@string/settings_label" android:supportsRtl="true" android:taskAffinity="" android:theme="@android:style/Theme.Holo" android:uiOptions="splitActionBarWhenNarrow">
Change
Code:
android:theme="@android:style/Theme.Holo"
TO
Code:
android:theme="@android:style/Theme.Holo.Light"
Save And Exit Android Manifest.xml
Recompile Your Settins
Sign It Manually
MOVING ONNNN.......
For Changing The Switch
Decompile framework-res.apk
Download Any Switch Resource From Below
Copy The Items From The "res/drawable" Folder Of The Downloaded Folder And Replace Those Files In framework-res "res/drawable" Folder
Now Goto drawable-hdpi{depending on ur device}And Delete All The Switch Pngs Present There{NORMALLY THE NAME STARTS WITH "switch_...9.png"}
Thats IT.....Now Recompile And Sign framework-res
AGAIN......MOVING ONNNN.......
For Changing The Spinners
Decompile framework-res.apk
Download Any Of The Spinner Resources From The Second Post
Extract The File And Open the Folder
Copy All The Contents from The Drawable Folder And Paste It In Your Folder{You Will be Asked To Replace The Files....Just Do It}
Now Open The Downloaded Resource Folder And Copy All The PNG'S In The FOlder And Paste It In "drawable-hdpi" Folder Of Your framework-res{Replace All The Files.....IF ASKED!!}
Thats IT.....Now Recompile And Sign The APK
ENJOY.....-HIT THANKS IF YOU LIKE MY WORK!!
Chetan Lodha said:
Hello Guyzzz.....This Is My First Theming Guide Fro Mt65XX Devices
In This Guide I Will Tell You How To Do The Following Things:-
##Making Settings Holo Light##
##Changing The Switch##
##Changing The Spinners##
Requirements:-
##APKTOOL##
##NOTEPAD++##
##Knowledge About Decompiling And Recompiling##
##Time,Patience And Most Important Of All............A Working Brain--------- ##
OK......So Lets Get Started.......
For Making Settings Holo Light
Decompile Settings.apk
Open Android Manifest.xml Using NotePad++
Search For This Line
Code:
<application android:hardwareAccelerated="true" android:icon="@mipmap/ic_launcher_settings" android:label="@string/settings_label" android:supportsRtl="true" android:taskAffinity="" android:theme="@android:style/Theme.Holo" android:uiOptions="splitActionBarWhenNarrow">
Change
Code:
android:theme="@android:style/Theme.Holo"
TO
Code:
android:theme="@android:style/Theme.Holo.Light"
Save And Exit Android Manifest.xml
Recompile Your Settins
Sign It Manually
MOVING ONNNN.......
For Changing The Switch
Decompile framework-res.apk
Download Any Switch Resource From Below
Copy The Items From The "res/drawable" Folder Of The Downloaded Folder And Replace Those Files In framework-res "res/drawable" Folder
Now Goto drawable-hdpi{depending on ur device}And Delete All The Switch Pngs Present There{NORMALLY THE NAME STARTS WITH "switch_...9.png"}
Thats IT.....Now Recompile And Sign framework-res
AGAIN......MOVING ONNNN.......
For Changing The Spinners
Decompile framework-res.apk
Download Any Of The Spinner Resources From The Second Post
Extract The File And Open the Folder
Copy All The Contents from The Drawable Folder And Paste It In Your Folder{You Will be Asked To Replace The Files....Just Do It}
Now Open The Downloaded Resource Folder And Copy All The PNG'S In The FOlder And Paste It In "drawable-hdpi" Folder Of Your framework-res{Replace All The Files.....IF ASKED!!}
Thats IT.....Now Recompile And Sign The APK
ENJOY.....-HIT THANKS IF YOU LIKE MY WORK!!
Click to expand...
Click to collapse
Good Job Bro I Think It Will Be Hard But It's Easy Good Job :laugh:
lol... this is all so NOT easy.
you missed few important parts in between your Simple Guide.
But Catchy Topic Header...
Add more Basic But important Steps
Dude.. you missed a lot of things in that tutorial ! i Hope in futute you will add more Things in that tutorial !
dare2know said:
lol... this is all so NOT easy.
you missed few important parts in between your Simple Guide.
But Catchy Topic Header...
Add more Basic But important Steps
Click to expand...
Click to collapse
SDShukla said:
Dude.. you missed a lot of things in that tutorial ! i Hope in futute you will add more Things in that tutorial !
Click to expand...
Click to collapse
I Dont Think bro...bcoz i followed these steps and everything worked!!
@chetan ,
it was jUST A POINTER nothing to make u feel bad,
Screenshots?
download from below!?!?!?
There is no resources to download in the 2nd post !!!
I am facing issues in compiling systemui.apk and systemUI.odex files. I was porting Pixel Navigation bar for AOSP ROM of @Santhosh M. There is any to combine both the files?
If i remember right i made the Pixel navbar for Santhosh M ROM. Doesn't it work anymore? If you don't like the home button just decompile the apk and go to drawable-xxhdpi-v4 and change the ic_sysbar_home icon.
Anyway in order to combine them
1. Download baksmali. Make new folder and put the baksmali.jar and SystemUI.odex there.
2. Open command prompt in the folder where baksmali is located. Type in command prompt "adb pull /system/framework/arm" to extract the required files from the phone.
3. Type "java -jar baksmali.jar deodex SystemUI.odex -l" in the command prompt and if it successful there should be an output folder called "out". Copy it and paste it to the decompiled SystemUI.apk then rename it "smali"
4. Get the required odex files from Pixel's SystemUI(tho' i would recommend you to get them from the already modified systemUI as it usually generates the same number IDs so you wont have to deal with odex file changes).
5. Paste them to smali/com/google/android/systemui(if i remember right you had to create google/android/systemui folders so no worries if they are missing)
6.Recompile
I'd advise you to use this tutorial as it is way more detailed.
Sashko98 said:
If i remember right i made the Pixel navbar for Santhosh M ROM. Doesn't it work anymore? If you don't like the home button just decompile the apk and go to drawable-xxhdpi-v4 and change the ic_sysbar_home icon.
Anyway in order to combine them
1. Download baksmali. Make new folder and put the baksmali.jar and SystemUI.odex there.
2. Open command prompt in the folder where baksmali is located. Type in command prompt "adb pull /system/framework/arm" to extract the required files from the phone.
3. Type "java -jar baksmali.jar deodex SystemUI.odex -l" in the command prompt and if it successful there should be an output folder called "out". Copy it and paste it to the decompiled SystemUI.apk then rename it "smali"
4. Get the required odex files from Pixel's SystemUI(tho' i would recommend you to get them from the already modified systemUI as it usually generates the same number IDs so you wont have to deal with odex file changes).
5. Paste them to smali/com/google/android/systemui(if i remember right you had to create google/android/systemui folders so no worries if they are missing)
6.Recompile
I'd advise you to use this tutorial as it is way more detailed.
Click to expand...
Click to collapse
Thanks! I will be trying this out today. You developed Pixel Nav bars and the thing is you made it for January build. This is April so I have seen that it doesn't works. We need to decompile the systemui.apk again and again Change the ID and other things.
I have ported pixel Navbars for LineageOS. It was easy and today, I stuck in this steps.
I just followed your tutorial and I got this error
C:\Users\Xaif\Desktop\Baksmali\framework>java -jar baksmali.jar deodex SystemUI.
odex -x
usage: java -jar baksmali.jar [options] <dex-file>
disassembles and/or dumps a dex file
-?,--help prints the help message then exits.
Specify twice for debug options
-a,--api-level <API_LEVEL> The numeric api-level of the file
being disassembled. If not
specified, it defaults to 15 (ICS).
-b,--no-debug-info don't write out debug info (.local,
.param, .line, etc.)
-c,--bootclasspath <BOOTCLASSPATH> A colon-separated list of
bootclasspath jar/oat files to use
for analysis. Add an initial colon
to specify that the jars/oats should
be appended to the default
bootclasspath instead of replacing
it
-d,--bootclasspath-dir <DIR> the base folder to look for the
bootclasspath files in. Defaults to
the current directory
-e,--dex-file <DEX_FILE> looks for dex file named DEX_FILE,
defaults to classes.dex
-f,--code-offsets add comments to the disassembly
containing the code offset for each
address
-i,--resource-id-files <FILES> the resource ID files to use, for
analysis. A colon-separated list of
prefix=file pairs. For example
R=res/values/public.xml:android.R=$A
NDROID_HOME/platforms/android-19/dat
a/res/values/public.xml
-j,--jobs <NUM_THREADS> The number of threads to use.
Defaults to the number of cores
available, up to a maximum of 6
-k,--check-package-private-access When deodexing, use the
package-private access check when
calculating vtable indexes. It
should only be needed for 4.2.0
odexes. The functionality was
reverted for 4.2.1.
-l,--use-locals output the .locals directive with
the number of non-parameter
registers, rather than the .register
directive with the total number of
register
-m,--no-accessor-comments don't output helper comments for
synthetic accessors
-n,--normalize-virtual-methods Normalize virtual method references
to the reference the base method.
-o,--output <DIR> the directory where the disassembled
files will be placed. The default is
out
-p,--no-parameter-registers use the v<n> syntax instead of the
p<n> syntax for registers mapped to
method parameters
-r,--register-info <REGISTER_INFO_TYPES> print the specificed type(s) of
register information for each
instruction. "ARGS,DEST" is the
default if no types are specified.
Valid values are:
ALL: all pre- and post-instruction
registers.
ALLPRE: all pre-instruction
registers
ALLPOST: all post-instruction
registers
ARGS: any pre-instruction registers
used as arguments to the instruction
DEST: the post-instruction
destination register, if any
MERGE: Any pre-instruction register
has been merged from more than 1
different post-instruction register
from its predecessors
FULLMERGE: For each register that
would be printed by MERGE, also show
the incoming register types that
were merged
-s,--sequential-labels create label names using a
sequential numbering scheme per
label type, rather than using the
bytecode addressQA
-t,--implicit-references Use implicit (type-less) method and
field references
-v,--version prints the version then exits
-X,--experimental enable experimental opcodes to be
disassembled, even if they aren't
necessarily supported in the Android
runtime yet
-x,--deodex deodex the given odex file. This
option is ignored if the input file
is not an odex file
Click to expand...
Click to collapse
I also tried doing like the above given command so I followed this steps:
C:\Users\Xaif\Desktop\Baksmali\framework>java -jar baksmali.jar --deodex SystemU
I.odex -l
Error occurred while loading boot class path files. Aborting.
org.jf.util.ExceptionWithContext: Cannot locate boot class path file /system/fra
mework/core.jar
at org.jf.dexlib2.analysis.ClassPath.loadClassPathEntry(ClassPath.java:2
96)
at org.jf.dexlib2.analysis.ClassPath.fromClassPath(ClassPath.java:207)
at org.jf.baksmali.baksmali.disassembleDexFile(baksmali.java:67)
at org.jf.baksmali.main.main(main.java:305)
C:\Users\Xaif\Desktop\Baksmali\framework>
Click to expand...
Click to collapse
I have used ApkTool for Android to deodex that file and it did it successfully. Now, I am porting again
Quick Intro :
Let me answer that question, an apk, first of all, is the format of Android apps, as .exe would be for Windows, apk means Android Package by the way.
But what’s the big deal?
Well an apk contain a lot of things into it.
When you open it as an archive, you might get those files:
AndroidManifest.xml
assets
res
META-INF
resources.arsc
classes.dex
AndroidManifest.xml is the file that contains the information about the app itself: the list of all activities, all permissions, the name of the app’s package, and the software/hardware requirements. To be able to read it, you’ll need to decompile the apk file.
Assets and res folders are meant for resources. Most often, you won’t see the assets folder because its usage is limited, (explanations here). We’ll focus on res since asset isn’t used so often.
META-INF contains CERT.RSA and CERT.SF (certificate) as well as MANIFEST.MF (a manifest)
Those files are the app signature, and META-INF is the folder that contains signature.
The resources.arsc file is the file holding most of the resources that were originally in the res folder. After compiling the code, Android Studio (or others software) compile resources into this file. You won’t be able to open it with an archive explorer. We’ll need to decompile the apk to get the resources back into the res folder.
And, finally, the classes.dex file contains the every smali files of the app. A smali file contains the java code for a specific part of the app. To be able to have the smali files (into the smali folder), you’ll have to baksmali your app.
Hopefully, apktool (a reverse engineering tool) does it for you.
Let’s decompile the apk using apktool (a popular tool used to decompile apps):
Once apktool is installed (see the apktool web page to know how to install), you’ll need to use the command prompt to decompile the apk:
Code:
java -jar apktool.jar d [name of the apk].apk
(I advise to create a folder and to put every file needed in it: the apk, the apktool.jar file, and the apktool script).
You’ll have an out folder, and when you browse it, you’ll have most of the time:
AndroidManifest.xml
original (a folder)
res (a folder)
smali (a folder)
The AndroidManifest.xml that you see here is the translated one.
In the “original” folder rest the META-INF folder and the original AndroidManifest.xml file (untranslated). As you can guess by its name, this folder contains unchanged original files.
The res folder is now full, because every resource from the resources.arsc file are now back into the res folder
Same for the smali folder, this folder contains every piece of code contained into the classes.dex file.
We will now focus on the res folder. Now that it’s complete, we can see those folders (it depends on your apk, but here is the list of the most common ones):
anim (other animation stuff, see the links at the end of the thread)
animator (animation properties)
color (color state list: in which condition this color is used for a particular element)
drawable (can be pictures or xml files, it contains a lot of things)
layout (contains the files that define the layouts of the app)
mipmap (icons for different screen densities)
values (xml files that contains values, that will be referenced in other xml files in other folders)
xml (every other unclassified xml files)
Those folders contain files that will be named following their resource ID.
So how does all of this work together?
Well, the java code written in the smali files will call resources with their IDs. This way, the app will show you the write thing at the right moment, following the code. The layouts are already described in the layout folder. What the code really do is analyzing the action of the end user and calling other resources in consequence.
For example, I’m using the XDA Labs app on my phone. I’m in my phone’s section, and I’m about to click on a thread to open it.
I clicked on the thread, so the code loaded the thread layout with every post in it, and other resources such as the little arrows at the top to jump to the end/beginning of the thread, the reply button, its color, … That’s how to work if I want to keep it simple.
I tried, in this guide, to simplify android app basic for beginners. Feel free to ask any question, I’ll be glad to answer.
If you want to go further into it, you can read a very complete guide about app basics by google (it’s a bit complicated to read, assuming you’re just starting to understand).
Here are the links:
https://developer.android.com/guide
If you have any question about that guide, you can also ask me (with the quote you didn’t understood).
Keep at mind that mastering app basics is really important if you ever want to theme/create an app. So, this guide and the google one is a good place to start.
Have fun reading
Hello Raiz,
I decompiled the apk of an androind app from playstore using dex jar and apktool however I can't find the scripts anywhere in the resulting files. Where should I look? Or is there something more that I have to do? I'm trying to edit something for personal use to make the game more enjoyable. I saw a .unity3D file in there so I presume it was made in unity if this helps.
Good tutorial about concepts of APK file. The details you share are so educational. Thanks for sharing