java to smali ? HELP - Java for Android App Development

hi =)
I need help to compile java to smali ok dex file , to patch Android app classes.dex file
These stages of the process :
apk => apktool => classes.dex => classes.jar => classes.src.zip => i edit java files to fix problem
and now must java src files => classes.dex => patch apk file with new classes.dex
4 days ago I stopped in java to classes.dex and I couldn't fix the problem.
i test baksmali , smali.jar , dex2jar tools , DX , eclipse , Android Studio ...
Is there a way?

hicham.077 said:
hi =)
I need help to compile java to smali ok dex file , to patch Android app classes.dex file
These stages of the process :
apk => apktool => classes.dex => classes.jar => classes.src.zip => i edit java files to fix problem
and now must java src files => classes.dex => patch apk file with new classes.dex
4 days ago I stopped in java to classes.dex and I couldn't fix the problem.
i test baksmali , smali.jar , dex2jar tools , DX , eclipse , Android Studio ...
Is there a way?
Click to expand...
Click to collapse
The java code generated by java decompilers such as JD-GUI is not the original code, there are errors in it because it is impossible to get the 100% accurate and original java source out of a classes.dex file.
Therefore recompiling the code generated into a classes.dex file is not possible and will give you errors. The code generated by java decompilers should be used as a guide and for reference only.

Related

[Q] How to translate settings.apk

So I wish to translate the English CM7 to my language, but i can't decompile the settings file without errors. I know i need strings.xml fro the res/values folder inside the apk but with apk_manager_4.9 I can't decompile this system file without errors. It seams it only extracts the file ...
Anyone can help me out here
use apktool.
to load framework file use apktool if "framework file".apk (if you do not input framework it send error message), after that you can load settings.apk and translate it to your language.
I tried it and it should work.
sry cause bad Eng...
This sounds like a lot of modding ... A d that apktool is not very userfriendly
Source: http://www.miui-au.com/add-ons/apktool/
Use APKTool to Decompile, Edit, Translate and Recompile an APK
APKTool is an application (made by Brut.all) which decompiles and recompiles android APKs. If you know what you are doing, it also allows you to debug the smali code step by step. In our case it will enable us to build a language pack by translating the .xml strings inside APK files.
This tutorial is for the Windows version of APKtool.
The Google.Code page for APKTool is here, however, we have prepackaged everything you need and uploaded it here
The Video Tutorial is Below:
The Supplementary guide to common errors in APKTool is below:
You need to do the following preparations (the video outlines these steps anyway):
Download the prepackaged APKTool zip.
Extract them to a directory you will remember.
Extract framework-res.apk AND apk files you want to decompile from the MIUI_Au ROM and copy them to the root directory of APKTool.
This step must be completed every time you are dealing with APKTool:
Open a command window
Navigate to the root directory of APKtool and type the following command:
apktool if framework-res.apk
The output should be:
I: Framework installed to: C:\Users\Josh\apktool\framework\1.apk
This step does the actual decompiling of the APK (I will assume that the chosen APK is Settings.apk):
apktool d Settings.apk
The output should be:
I: Loading resource table…
I: Decoding resources…
I: Copying assets and libs…
After doing that, a new directory with the name of the APK you decompiled should have been created. You need to:
Change into the newly created directory.
Change into the /res folder
Check to see if a values-xx folder exists, where xx is the two letter code of the target language to be translated into. For example, if you are aiming to translate into German, check for a values-de folder. If it does not exist (and chances are that if you are translating into a new language, that it will not exist), you need to create it. Then, copy the arrays.xml and strings.xml files from the /values folder into the folder you just created.
Open these two files (in Notepad ++) and alter the strings (the text inBLACK ONLY). Look out for things that look like %d and %s /’ - Don’t edit these, as they are variables. Also, if you see &, it represents the ‘&’ sign, so feel free to change it. Finally, you MUST be sure to place a backslash ‘\’ before an apostrophe, for example Proxy\’s would be the equivalent of Proxy’s.
Once you have translated and edited your arrays.xml and strings.xml files, save them, and return to the root directory of APKTool.
Open a command prompt to that directory
Enter the following command to recompile your edited and translated APK (assuming that Settings.apk is the chosen APK):
apktool b Settings
The output should be:
I: Checking whether sources has changed…
I: Smaling…
I: Checking whether resources has changed…
I: Building resources…
I: Building apk file…
You may get a couple of these messages:
aapt: warning: string ‘app_killed_message’ has no default translation in C:\Users\Josh\Desktop\NF\framework-res\res; found: fr it ja
aapt: warning: string ‘global_action_reboot’ has no default translation in C:\Users\Josh\Desktop\NF\framework-res\res; found: fr it ja
aapt: warning: string ‘reboot_system’ has no default translation in C:\Users\Josh\Desktop\NF\framework-res\res; found: fr it ja
aapt: warning: string ‘toast_reboot_recommend’ has no default translation in C:\Users\Josh\Desktop\NF\framework-res
However, it will build the apk anyway. These messages mean that some strings don’t have values. It is only an issues if the text im blue includes your translation language.
Once that is done, two directories will have been created within the decompilation directory. One will be called “dist”, and this is where it will place a built, but not signed, apk file. The other one is called “build”, and here it will place everything “loose” (the contents of the APK).
I have trouble using the APK files it spits out in the /dist folder ( they force closes if they are an application, or bootloop it a framework-res.apk; I think the reason is because Android will not accept APK files that are not signed). Instead, copy the resources.arsc from the /build directory into the original framework-res from the rom (just overwrite the old resources.arsc one with the new one).
This tutorial is for the Windows version of APKtool.
teneke said:
So I wish to translate the English CM7 to my language, but i can't decompile the settings file without errors. I know i need strings.xml fro the res/values folder inside the apk but with apk_manager_4.9 I can't decompile this system file without errors. It seams it only extracts the file ...
Anyone can help me out here
Click to expand...
Click to collapse
The true way -- build settings youself from source with new language in res
The prepackaged link is not working.
Does anyone have the file?
Cheers
Great tutorial. I will need them to translate chinese .apk to english
Can't you use the Lauguage and Input settings?
Sent from my Nexus 4
Wonderful post!
underlines said:
Source: http://www.miui-au.com/add-ons/apktool/
Use APKTool to Decompile, Edit, Translate and Recompile an APK
APKTool is an application (made by Brut.all) which decompiles and recompiles android APKs. If you know what you are doing, it also allows you to debug the smali code step by step. In our case it will enable us to build a language pack by translating the .xml strings inside APK files.
This tutorial is for the Windows version of APKtool.
The Google.Code page for APKTool is here, however, we have prepackaged everything you need and uploaded it here
The Video Tutorial is Below:
The Supplementary guide to common errors in APKTool is below:
You need to do the following preparations (the video outlines these steps anyway):
Download the prepackaged APKTool zip.
Extract them to a directory you will remember.
Extract framework-res.apk AND apk files you want to decompile from the MIUI_Au ROM and copy them to the root directory of APKTool.
This step must be completed every time you are dealing with APKTool:
Open a command window
Navigate to the root directory of APKtool and type the following command:
apktool if framework-res.apk
The output should be:
I: Framework installed to: C:\Users\Josh\apktool\framework\1.apk
This step does the actual decompiling of the APK (I will assume that the chosen APK is Settings.apk):
apktool d Settings.apk
The output should be:
I: Loading resource table…
I: Decoding resources…
I: Copying assets and libs…
After doing that, a new directory with the name of the APK you decompiled should have been created. You need to:
Change into the newly created directory.
Change into the /res folder
Check to see if a values-xx folder exists, where xx is the two letter code of the target language to be translated into. For example, if you are aiming to translate into German, check for a values-de folder. If it does not exist (and chances are that if you are translating into a new language, that it will not exist), you need to create it. Then, copy the arrays.xml and strings.xml files from the /values folder into the folder you just created.
Open these two files (in Notepad ++) and alter the strings (the text inBLACK ONLY). Look out for things that look like %d and %s /’ - Don’t edit these, as they are variables. Also, if you see &, it represents the ‘&’ sign, so feel free to change it. Finally, you MUST be sure to place a backslash ‘\’ before an apostrophe, for example Proxy\’s would be the equivalent of Proxy’s.
Once you have translated and edited your arrays.xml and strings.xml files, save them, and return to the root directory of APKTool.
Open a command prompt to that directory
Enter the following command to recompile your edited and translated APK (assuming that Settings.apk is the chosen APK):
apktool b Settings
The output should be:
I: Checking whether sources has changed…
I: Smaling…
I: Checking whether resources has changed…
I: Building resources…
I: Building apk file…
You may get a couple of these messages:
aapt: warning: string ‘app_killed_message’ has no default translation in C:\Users\Josh\Desktop\NF\framework-res\res; found: fr it ja
aapt: warning: string ‘global_action_reboot’ has no default translation in C:\Users\Josh\Desktop\NF\framework-res\res; found: fr it ja
aapt: warning: string ‘reboot_system’ has no default translation in C:\Users\Josh\Desktop\NF\framework-res\res; found: fr it ja
aapt: warning: string ‘toast_reboot_recommend’ has no default translation in C:\Users\Josh\Desktop\NF\framework-res
However, it will build the apk anyway. These messages mean that some strings don’t have values. It is only an issues if the text im blue includes your translation language.
Once that is done, two directories will have been created within the decompilation directory. One will be called “dist”, and this is where it will place a built, but not signed, apk file. The other one is called “build”, and here it will place everything “loose” (the contents of the APK).
I have trouble using the APK files it spits out in the /dist folder ( they force closes if they are an application, or bootloop it a framework-res.apk; I think the reason is because Android will not accept APK files that are not signed). Instead, copy the resources.arsc from the /build directory into the original framework-res from the rom (just overwrite the old resources.arsc one with the new one).
This tutorial is for the Windows version of APKtool.
Click to expand...
Click to collapse
Is this still valid for New Android OS?! like 5.0 or 6.0 and above?

[Q] Recompile XML's?

Hello, i have decompiled an app using apktool which had some errors and im missing the apktool file so i cant re-compile it, however the XML's are readable and i have made some tweaks.
Is there any other way to convert the human readable XML to android binary code?
I tried AXMLPrinter2, but it cant compile the XML
The only way I can think of to do this without apktool is to build a dummy project in eclipse, then add your xml to the project, and export it. You can then extract the xml byte code from the apk.

What software do I need to decompile a apk?

I need a program to decompile a apk for cm7, to make a rom and my question is what program do I need? from already thank :laugh:
frixed said:
I need a program to decompile a apk for cm7, to make a rom and my question is what program do I need? from already thank :laugh:
Click to expand...
Click to collapse
Try this guide: http://forum.xda-developers.com/showthread.php?t=1989533
you mean like extracting the files from apk file...........you can always use 7zip or winrar
it will extract the file in it like as if unzipping any file.....there you will find the xml files and any media and metadata folder dont know what else
you can use ApkMultiTool to decompile, edit, sign and install apks
apktool & the likes will generate smali code, which is a real mess. Here's how you should proceed to get readable java sources from an apk (for educational purposes only!)
Use apktool only to extract the /res folder from an apk
Extract the classes.dex from your apk (either with an archive manager or in terminal with the following command) :
Code:
unzip yourapp.apk classes.dex
Download dex2jar, put your classes.dex in the same folder and cd to it, then :
Code:
bash d2j-dex2jar.sh classes.dex
Download JD-GUI, put it in the same folder as dex2jar & classes.dex and cd to it, then :
Code:
./jd-gui classes.dex.dex2jar.jar /[COLOR="Green"]/or whatever the generated .jar file's name is[/COLOR]
This will open the jd-gui IDE with all the java sources of your apk, hit source/export all sources (or something like that, I don't remember exactly)
Add the /res folder you extracted with apktool to the /src folder you extracted with dex2jar/jd-gui and import the whole thing as existing Android code into Eclipse
There you go, you now have a full eclipse project out of an apk, the decompilation might have generated a few errors in the code during the process though, you'll need to fix them to be able to rebuild the apk.

[Utility][Tool]baksmali/smali

- What is baksmali/smali?
smali/baksmali is an assembler/disassembler for the dex format used by dalvik, Android's Java VM implementation. The syntax is loosely based on Jasmin's/dedexer's syntax, and supports the full functionality of the dex format (annotations, debug info, line info, etc.)
The names "smali" and "baksmali" are equivalents of "assembler" and "disassembler" respectively.
- Author of the tool
JesusFreke
- Why we need it?
Android apk and jar files will include java classes to execute certain functionality. With baksmali, you will be able to disassemble the java classes into editable form (smalis) so you can do your editing and modding involving java script. Once you done changing, you need to assemble all classes to a readable form for android, i.e, classes.dex and here comes the role of assembler (Smali).
Since we have apk manager, do we still need this tool?
Yes and No!!! Because some apk managers even if they do support jar files but once they decompile smalis, they will remove some lines (.line, .parameter, ...etc) which are in my opinion are useful to locate some codes. So the choice is yours.
- What does this tool do?
Simply it baksmali classes.dex of android apk and jar files into editable form (smalis) to do your changes; then assemble it back (smali).
- Will it affect apk and jar original signature?
No, it will preserve original signature.
- Got problem?
During assembling (smali), you may got error message. You can check log file to locate what is wrong that make the manager stop assembling the file or post the log file for developers to look into it.
- What are the steps to work with this tool?
Run Baksmali_tool.bat file, this will create all needed folders in the first run.
1. Put android apk or jar file in "put-file-here" folder. If Current-file status is set to None, then either you need to set a file in option #3 or you forget putting valid file in "put-file-here" folder.
2. When Current-file status is set to your file, you can disassemble its classes.dex by option #1.
3. Classout folder with name of file project will be created in "project" folder; make your changes there.
4. If finished your changes, assemble classout folder by option #2.
5. If everything is OK, a new file will be created in "finish" folder with tag (Modded_) in its name, push it to your device by option #3 if it was system apk or jar; and if it was non system apk file, install it by option #4.
- Latest stable version
Latest stable baksmali/smali version: 2.2.2 (30.10.2017)
baksmali v. 2.2.2 - Download (bitbucket.org)
smali v. 2.2.2 - Download (bitbucket.org)
baksmali/smaly previous versions - Download (bitbucket.org)
- Latest beta version
Latest beta baksmali/smali version:
- Changelog
baksmali/smali wiki and changelog (github)
- Where can I download latest source code?
You can visit
baksmali/smali source page (github)
and you can download the latest smali and baksmali code versions.
- Special Thanks to XDA Portal Team
Special thanks to XDA Portal Team for featuring this utility
XDA Portal Team
..
hi m8,
thanks for this nice tool
will try it next time I make a new theme
sent from my G-Note
great work majd keep it up
no credit to the author of smali/baksmali? :/
iBotPeaches said:
no credit to the author of smali/baksmali? :/
Click to expand...
Click to collapse
I think the authers are these guys ([email protected], [email protected], JesusFr.. @gmail.com) from project page.. aren't they??? if so I will update OP
majdinj said:
I think the authers are these guys ([email protected], [email protected], JesusFr.. @gmail.com) from project page.. aren't they??? if so I will update OP
Click to expand...
Click to collapse
Yes, thats the same person. I'd just put JesusFreke, as thats his username.
Version 1.1 is online
version 1.2 is online
some bugs fixed
Grate dev, Great tool...tnx majdini:fingers-crossed:
What a great idea to simplify life ^^.
Thanks majdinj.
majdinj said:
Backsmali / Smali Manager​
What is Backsmali / Smali?
smali/baksmali is an assembler/disassembler for the dex format used by dalvik, Android's Java VM implementation. The syntax is loosely based on Jasmin's/dedexer's syntax, and supports the full functionality of the dex format (annotations, debug info, line info, etc.)
The names "smali" and "baksmali" are equivalents of "assembler" and "disassembler" respectively.
Why we need it?
Android apk and jar files will include java classes to execute certain functionality. With backsmali, you will be able to disassemble the java classes into editable form (smalis) so you can do your editing and modding involving java script. Once you done changing, you need to assemble all classes to a readable form for android, i.e, classes.dex and here comes the role of assembler (Smali).
Since we have apk manager, do we still need this tool?
Yes and No!!! Because some apk managers even if they do support jar files but once they decompile smalis, they will remove some lines (.line, .parameter, ...etc) which are in my opinion are useful to locate some codes. So the choice is yours.
What does this tool do?
Simply it backsmali classes.dex of android apk and jar files into editable form (smalis) to do your changes; then assemble it back (smali).
Will it affect apk and jar original signature?
No, it will preserve original signature.
Got problem?
During assembling (smali), you may got error message. You can check log file to locate what is wrong that make the manager stop assembling the file or post the log file for developers to look into it.
What are the steps to work with this manager?
Run Backsmali_tool.bat file, this will create all needed folders in the first run..
1. Put android apk or jar file in "put-file-here" folder. If Current-file status is set to None, then either you need to set a file in option #3 or you forget putting valid file in "put-file-here" folder.
2. When Current-file status is set to your file, you can disassemble its classes.dex by option #1.
3. Classout folder with name of file project will be created in "project" folder; make your changes there.
4. If finished your changes, assemble classout folder by option #2.
5. If everything is OK, a new file will be created in "finish" folder with tag (Modded_) in its name, just rename it to its original name and push it to your device; don't forget to fix permissions as well.
If backsmali and smali code are outdated, what to do?
Just visit codes owner page, and download the latest smali and backsmali code versions and put them in "tools" folder (make sure to rename them to baksmali and smali without version number)
Future development?
Feel free to report any bugs or suggestion to improve upcoming releases :good:
Download
- Backsmali-Manager_v1.2 @ 11/June/2013 (The most recent one)
- Backsmali-Manager_v1.1 @ 7/June/2013 (old)
- Backsmali-Manager_v1 @ 6/June/2013 (old)
Change-log:
@ 11/June/2013 (v1.2):
- Fixed bug of file path in Read Log option.
- Fixed number 10 file that was not shown in Set Current-file option.
@ 7/June/2013 (v1.1):
- Deleting the folder and file in project and finish folder of same project name before backsmali or smali (no more overlapping :fingers-crossed.
- Added Read log file functionality in the main menu.
- Ability to open classout folder after backsmali.
- Ability to open finish folder after smali.
- Ability to renamed finished modded file to its original name.
- Neat smali and compression processing (i.e, hidden processing ).
- Fixed set Current-file option to visualize only apk and jar files.
@ 6/June/2013 (v1.0):
- First release of Backsmali / smali manager
Click to expand...
Click to collapse
i don't know how to start editing this smali file
badagila said:
i don't know how to start editing this smali file
Click to expand...
Click to collapse
Editing smali means to modify your jar or apk file to do certain new function, check the second thread in my signature in OP... you will find a lot editing tutorials of smalis of some android apps :laugh:
majdinj said:
Editing smali means to modify your jar or apk file to do certain new function, check the second thread in my signature in OP... you will find a lot editing tutorials of smalis of some android apps :laugh:
Click to expand...
Click to collapse
ok dude thanks
Hi, your work is featured here: http://ajqi.com/baksmali-smali-manager-windows-tool/
Keep it up!
VERY NICE!
Good Work..
I dont know much about smali backsmali.. but one confusion..
Is this tool also applicable if the files (apks or jars) we want to modify are odexed?
OJ said:
Good Work..
I dont know much about smali backsmali.. but one confusion..
Is this tool also applicable if the files (apks or jars) we want to modify are odexed?
Click to expand...
Click to collapse
No, actually classes.dex are made from the odex files.
If files are odexed, then there will be no classes.dex in apks or jar files. That's why it won't be applicable then
Version 1.3 is online
Change log:
- Added adb push finished file to device system partition (for system files).
- Ability to choose whether to reboot device after pushing files to device.
- Added adb install finished apk (for non-system files).
- Adjustable Java heap memory size.
- Adjustable finished file compression level.
- Updated Smali and Backsmali codes (date 15/6/2013).
@ 23/June/2013 (v1.4):
- Added Pull apk or jar From Android Device to the main menu.
- Added zipaligning process during Smali (better RAM management).
- Fixed apk installing process (added signing process step for installing apk process).
- Added direct link to this xda page in update option.
- More script polishing...
@ 29/June/2013 (v1.5-FINAL):
- Fixed adb remount bug for some ROMs in push option.
- Baksmali argument is updated; now you can choose whether to baksmali with x argument (retain .line, .parameter, .prologue, and .local) or b argument (remove .line, .parameter, .prologue, and .local).
Hi,
i've XP&Backsmali / Smali Manager v1.5 and i want baksmali framework.jar but i got error message(attachment)
I think wrong is slash (should be a backslash)
the same error is after i select 1(baksmali*)and then x and Y or
--------------------------------------------------------------and then b and Y
*baksmali or backsmali?

[Q] Disregard imports when compiling Java to be converted to Smali.

Every source I can find on how to convert Java code to Smali says I should compile the file with javac, which would be fine if it wasn't for the imports.
What I'm trying to compile is a modified version of a decompiled file from an APK, so it still has all the imports which are no longer in the classpath. How can I still convert this code to smali? Note it doesn't have to run, just compile.

Categories

Resources