Updated: The original APKStudio download link (CodePlex, 2014) is dead — CodePlex shut down in 2017. This post has been updated with current tools for decompiling and recompiling Android APK files.
Decompiling an Android APK lets you inspect an app’s resources, understand its structure, perform security audits, or modify open-source applications for personal use. Whether you’re a developer reverse-engineering a library, a security researcher auditing an app’s permissions, or just curious how an app works under the hood, there are several mature tools available in 2026 to get the job done. This guide walks you through each one so you can pick the right tool for your situation.
APKStudio (Original Tool — Legacy)
APKStudio is a GUI-based IDE for reverse-engineering Android APKs, originally created by XDA user Vaibhav. It was hosted on CodePlex (now shut down), but the current source lives on GitHub and is still actively maintained — the repo has seen commits as recently as mid-2026. GitHub: https://github.com/vaibhavpandeyvpz/apkstudio That said, the broader community has largely rallied around the standalone tools below, which tend to have larger user bases and more documentation. APKStudio is worth a look if you prefer an integrated GUI, but either way you’ll want to get familiar with apktool and jadx.apktool — The Reference Disassembler/Reassembler
If you’re going to do one thing with an APK — modify its resources and put it back together — apktool is the tool for the job. It’s the most widely used open-source tool for decoding and rebuilding APK resources andAndroidManifest.xml. Under the hood it uses smali (an assembler for Dalvik bytecode), giving you full access to decoded resources and the raw bytecode of every class.
Website: https://apktool.org/GitHub: https://github.com/iBotPeaches/Apktool Installation: Pick the method that matches your system:
# macOS (Homebrew)
brew install apktool
# Linux (Debian/Ubuntu)
sudo apt install apktool
# All platforms: download wrapper script from https://apktool.org/
Decode an APK:
This is your starting point. Run the decode command and apktool will create a folder named after your APK, containing all the resources, the manifest, and smali bytecode files ready to edit.
apktool d yourapp.apk
# Creates yourapp/ directory with decoded resources and smali/
Edit resources: Once the decode finishes, you’ll find a fully navigable folder. Edit strings in res/values/strings.xml, tweak the manifest at AndroidManifest.xml, or dive into the bytecode in the smali/ directory. Any standard text editor works fine here.
Rebuild after editing:
When you’re done editing, one command reassembles everything back into an APK:
apktool b yourapp -o yourapp-modified.apk
# Then re-sign the APK before installing
Important: the rebuilt APK isn’t signed yet, so Android will refuse to install it as-is. You’ll need to re-sign it with a keystore — see the FAQ below for the exact command.
jadx — Java Decompiler (GUI + CLI)
Where apktool gives you smali bytecode, jadx goes a step further and decompiles DEX bytecode all the way back to readable Java source code. If your goal is understanding what an app actually does — reading its logic rather than editing its resources — jadx is usually the faster path. GitHub: https://github.com/skylot/jadx Installation: Download the latest release from https://github.com/skylot/jadx/releases — the zip includes both the GUI (jadx-gui) and the command-line tool (jadx).
Open an APK in the GUI:
The GUI is the quickest way to start exploring. Launch it with your APK and you’ll get a class browser where you can navigate packages and read decompiled Java directly.
jadx-gui yourapp.apk
# Opens a GUI browser showing decompiled Java classes
Decompile to Java source files via CLI:
If you’d rather work in your own editor, the CLI dumps the entire app as .java files to a directory of your choice:
jadx -d output_dir yourapp.apk
# Writes .java files to output_dir/sources/
# Writes resources to output_dir/resources/
Best for: reading app logic as Java, understanding library usage, security analysis.
Android Studio — Built-in APK Analyzer
If you already have Android Studio installed, you have a capable APK inspector built right in — no extra tools required. The APK Analyzer won’t let you edit and rebuild like apktool, but it’s the fastest way to get a high-level picture of what’s inside an APK. How to use:- Open Android Studio
- Go to Build > Analyze APK
- Select your
.apkfile
- The APK contents and file sizes
- The
AndroidManifest.xml(decoded) - Resources in
res/ - DEX class list (browse classes and methods)
- A comparison feature to compare two APK versions side-by-side
Choosing the Right Tool
Each tool has a sweet spot, so the “right” choice depends on what you’re actually trying to do:- apktool — best when you need to decode, modify resources/manifest, and rebuild (repackage)
- jadx — best when you need to read the Java source logic (read-only decompilation)
- Android Studio APK Analyzer — best for quick inspection and size analysis with no CLI
- APKStudio — still maintained and available if you prefer a GUI; for most workflows the tools above cover more ground
Frequently Asked Questions
Is it legal to decompile an APK?
It depends on where you are and what you’re doing with it. In general, reverse-engineering for interoperability, security research, and educational purposes is permitted under fair use principles in many countries. Decompiling to copy proprietary code or bypass licensing restrictions may be a terms-of-service violation or illegal. The short version: inspecting an app you own for personal or research purposes is typically fine; redistributing modified versions of someone else’s paid app is not. Always review the app’s license and the laws in your jurisdiction if you’re unsure.Can I install a rebuilt APK on my phone?
Yes, but you must re-sign it first. Android requires all APKs to be signed with a certificate, and the rebuild process strips the original signature. After rebuilding with apktool, sign it with a debug key like this:apksigner sign --ks ~/.android/debug.keystore --out signed.apk yourapp-modified.apk
You will also need to uninstall the original app first — Android won’t update an existing installation when the signatures don’t match, so uninstall then install the signed APK fresh.
Thank you for your article!
You may also use online apk decompilers.
This one uses the method you described: http://www.decompileandroid.com/
An this site utilizes direct apk decompiler Jadx: http://www.javadecompilers.com/apk/
Regards,
Andrew
dear,
can you show me where’s the beginner like me can learn on how to made android apps, i want to have my own apps.
not working ..recompile.. error
I: Using Apktool 2.0.2
I: Smaling smali folder into classes.dex…
Exception in thread “main” java.lang.OutOfMemoryError: Java heap space
at java.util.AbstractList.listIterator(Unknown Source)
at com.google.common.collect.Lists$TransformingSequentialList.listIterator(Lists.java:575)
at java.util.AbstractList.listIterator(Unknown Source)
at java.util.AbstractList.equals(Unknown Source)
at org.jf.util.CharSequenceUtils.listEquals(CharSequenceUtils.java:48)
at org.jf.dexlib2.base.reference.BaseMethodReference.equals(BaseMethodReference.java:55)
at java.util.concurrent.ConcurrentHashMap.get(Unknown Source)
at org.jf.dexlib2.writer.builder.BuilderMethodPool.internMethod(BuilderMethodPool.java:56)
at org.jf.dexlib2.writer.builder.DexBuilder.internMethodReference(DexBuilder.java:170)
at org.jf.smali.smaliTreeWalker.insn_format35c_method(smaliTreeWalker.java:5978)
at org.jf.smali.smaliTreeWalker.instruction(smaliTreeWalker.java:4549)
at org.jf.smali.smaliTreeWalker.ordered_method_items(smaliTreeWalker.java:3549)
at org.jf.smali.smaliTreeWalker.method(smaliTreeWalker.java:2176)
at org.jf.smali.smaliTreeWalker.methods(smaliTreeWalker.java:951)
at org.jf.smali.smaliTreeWalker.smali_file(smaliTreeWalker.java:440)
at brut.androlib.mod.SmaliMod.assembleSmaliFile(SmaliMod.java:97)
at brut.androlib.src.SmaliBuilder.buildFile(SmaliBuilder.java:70)
at brut.androlib.src.SmaliBuilder.build(SmaliBuilder.java:55)
at brut.androlib.src.SmaliBuilder.build(SmaliBuilder.java:41)
at brut.androlib.Androlib.buildSourcesSmali(Androlib.java:378)
at brut.androlib.Androlib.buildSources(Androlib.java:305)
at brut.androlib.Androlib.build(Androlib.java:288)
at brut.androlib.Androlib.build(Androlib.java:261)
at brut.apktool.Main.cmdBuild(Main.java:225)
at brut.apktool.Main.main(Main.java:84)
Process exited with code 1
plzzz help
use latest one bro
My source code when complied it creates error in installing apk
use latest version
I: Loading resource table…
Exception in thread “main” brut.androlib.AndrolibException: Could not decode arsc file
at brut.androlib.res.decoder.ARSCDecoder.decode(ARSCDecoder.java:54)
at brut.androlib.res.AndrolibResources.getResPackagesFromApk(AndrolibResources.java:604)
at brut.androlib.res.AndrolibResources.loadMainPkg(AndrolibResources.java:74)
at brut.androlib.res.AndrolibResources.getResTable(AndrolibResources.java:66)
at brut.androlib.Androlib.getResTable(Androlib.java:49)
at brut.androlib.ApkDecoder.decode(ApkDecoder.java:93)
at brut.apktool.Main.cmdDecode(Main.java:169)
at brut.apktool.Main.main(Main.java:85)
Caused by: java.io.IOException: Expected: 0x001c0001, got: 0x00000000
at brut.util.ExtDataInput.skipCheckInt(ExtDataInput.java:48)
at brut.androlib.res.decoder.StringBlock.read(StringBlock.java:43)
at brut.androlib.res.decoder.ARSCDecoder.readPackage(ARSCDecoder.java:95)
at brut.androlib.res.decoder.ARSCDecoder.readTable(ARSCDecoder.java:81)
at brut.androlib.res.decoder.ARSCDecoder.decode(ARSCDecoder.java:49)
… 7 more
GIVE A DOWNLOAD LINK PLS.NEW VERSION ONLY READY..PLS GIVE ME A RECOMPILE VERSION.
Hello i get email and follow but cant get help from you.
brother give me a apk studio recompile version because new version only ready!………….
thx admin this was very well explained guide for editing android applications.
Thanks admin for providing this article. It is very helpful for all those guys who are learning to edit android apks.