Decompile, Edit, and Recompile Android Apps with APK Studio

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 and AndroidManifest.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:
  1. Open Android Studio
  2. Go to Build > Analyze APK
  3. Select your .apk file
The APK Analyzer shows:
  • 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
Best for: inspecting APK size breakdown, reviewing manifest permissions, and comparing builds — especially handy when you’re trying to track down what changed between two releases.

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
For serious reverse-engineering work you’ll often end up using apktool and jadx together: jadx to understand the logic, apktool to make and rebuild the changes.

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.

Conclusion

The APK tooling ecosystem has matured considerably since the APKStudio days. For most workflows in 2026, apktool handles decoding and rebuilding while jadx gives you readable Java source — and Android Studio’s built-in APK Analyzer covers quick inspections without touching the command line. Pick the tool that matches your task, and you’ll have a working setup in minutes.

11 thoughts on “Decompile, Edit, and Recompile Android Apps with APK Studio”

  1. 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

  2. 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

    1. 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!………….

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.