APK Tool Studio {{ currentTabLabel }} • {{ userUsername }}
{{ authMessage }}
{{ toastTitle }} {{ toastMessage }}

Dashboard

Overview of your APK Tool workspace

You have reached one or more usage limits. Upgrade Plan
Decompile
{{ limits.decompile_usage || 0 }} / {{ limits.decompile_limit || 0 }}
Remaining: {{ Math.max(0, (limits.decompile_limit || 0) - (limits.decompile_usage || 0)) }}
Compile
{{ limits.compile_usage || 0 }} / {{ limits.compile_limit || 0 }}
Remaining: {{ Math.max(0, (limits.compile_limit || 0) - (limits.compile_usage || 0)) }}
Key Generation
{{ limits.generate_key_usage || 0 }} / {{ limits.generate_key_limit || 0 }}
Remaining: {{ Math.max(0, (limits.generate_key_limit || 0) - (limits.generate_key_usage || 0)) }}
Sign APK
{{ limits.sign_apk_usage || 0 }} / {{ limits.sign_apk_limit || 0 }}
Remaining: {{ Math.max(0, (limits.sign_apk_limit || 0) - (limits.sign_apk_usage || 0)) }}

My Projects

Manage your decompiled APK projects

Upload & Create New Project

Upload an APK to auto-create and decompile a new project workspace.

Drop your APK here or click to browse

Supported: .apk files
Selected: {{ uploadFile.name }}
{{ uploadStatus }}{{ uploadProgress }}%
{{ proj.project_name }}

Last updated:

{{ new Date(proj.updated_at).toLocaleString() }}

No projects found. Create a new project to get started.

Project Editor

{{ workflow.project_name }} - Edit, Build, and Sign your APK

{{ step.num }} {{ step.label }}
AI Settings (Gemini)

Add your own Google Gemini API key to unlock AI error-fixing and AI-generated launcher icons. Your key is only used server-side to call Gemini on your behalf.

Key saved ({{ aiMaskedKey }})
1. Project Info
Project Decompiled & Ready: {{ workflow.project_display }}

Source APK: {{ basename(workflow.source_apk) }}

2. Edit Strings

Edit app strings, Firebase values, and upload google-services.json to auto-fill.

{{ firebaseFile.name }}
Saving strings...{{ stringSaving ? 'Saving…' : 'Saved' }}
{{ row.name }} Firebase
No matching strings found.
5. Build APK

Compile the edited project into an unsigned APK.

Built: {{ basename(workflow.unsigned_apk) }} Download
{{ buildStatus }}{{ buildProgress }}%
Build Failed

Use Gemini to analyze the build error{{ editorFile ? ' against the currently open file (' + basename(editorFile.path) + ')' : '' }} and suggest a fix.

Add a Gemini API key above first.
AI Explanation
{{ aiFix.explanation }}
6. Select or Create Keystore

Select an existing key or generate a new signing key for your APK.

Or Create New Keystore
{{ keystoreStatus }}{{ keystoreProgress }}%
Currently Selected Keystore
Alias: {{ workflow.keystore_alias }} {{ basename(workflow.keystore_path) }}
7. Sign APK

Sign the APK with your keystore to produce the final release.

Please build the APK first.
Please select or create a keystore first (Step 6).
Align
Sign
Verify
Signed: {{ basename(workflow.signed_apk) }} Download Signed APK
{{ signStatus }}{{ signProgress }}%
8. Cloud Debug Logs (recommended)

Injects a tiny crash/error reporter into the app during build. Once enabled and rebuilt, the app reports its own crashes straight to this server over the internet from ANY phone it's installed on - no USB, no ADB, no network configuration, no port forwarding.

Cloud logging is wired into this project - rebuild & reinstall the APK for it to take effect.
Backend changes detected - a newer build is ready.

Reinstall the APK (or, on paired phones, open the companion app and tap Check for Update) to reload the latest changes. Devices with auto-check enabled will flag this automatically within a minute.

Pair the companion app

Open the companion app, tap Scan QR Code, and point the camera here. That's it - no typing, no long codes.

Fallback for devices with no camera access - paste this in the companion app's "Connect" field instead.

9. Developer Tools
{{ l }}
No network requests captured yet. They'll appear here once the rebuilt app makes an HTTP(S) call. Note: this only sees calls made through Java code (HttpURLConnection / OkHttp / Retrofit) - traffic made from inside a WebView's own JS (fetch/XHR) isn't visible to this hook. Tell me if that's your case and I'll build a WebView-specific capture instead.
{{ l }}
No device logs received yet. They'll appear here in realtime once the rebuilt app is installed somewhere and runs.

Connect an Android device via USB (with USB debugging enabled) or wireless ADB to this server/PC, install the APK directly, and watch its logs in realtime.

On the phone: Settings > Developer options > Wireless debugging > turn it on, note the IP:port shown there (both devices must be on the same Wi-Fi/network). Some Android versions require pairing first with a pairing code - if connect is refused, use "Pair device with pairing code" on the phone and pair from a terminal first, then connect here.

No devices detected yet. Use "Connect Wireless ADB" above, or (if you have shell access to this server) plug a device into USB with USB debugging enabled, then Refresh.
{{ l.text }}
No log output yet.
My Keystores

All keystores you've generated.

No keystores found.
AliasFileCreatedActions
{{ ks.key_alias }} {{ basename(ks.file_name) }} {{ new Date(ks.created_at).toLocaleDateString() }}
Registered Users
Create New User
UserEmailRoleStatusLimitsActions
{{ user.username }} {{ user.email }} {{ user.user_type }} {{ user.email_verified ? '✅ Verified' : '⏳ Pending' }} D:{{ user.decompile_usage }}/{{ user.decompile_limit }}
C:{{ user.compile_usage }}/{{ user.compile_limit }}
K:{{ user.generate_key_usage }}/{{ user.generate_key_limit }}
S:{{ user.sign_apk_usage }}/{{ user.sign_apk_limit }}
No users found.
Edit Limits for {{ editingUser.username }}