Files
rr3-apk/APK_DECOMPILATION_METHOD.md

8.7 KiB

🔧 RR3 APK DECOMPILATION METHOD

For Discord User Asking About APK Decompilation


📋 QUESTIONS ANSWERED

A) "jadx to convert it to what?"

Answer: JADX converts DEX bytecode → Java source code (.java files)

B) "How did you circumvent apktool corrupting textures?"

Answer: I didn't use apktool for textures. I used JADX only, which doesn't reprocess resources.


🛠️ THE METHOD I USED

Tool: JADX (NOT apktool)

What JADX Does:

Input:  realracing3.apk (100 MB)
        └── classes.dex (DEX bytecode)

Output: decompiled/
        ├── sources/           (Java .java files)
        │   └── com/ea/...     (Readable source code)
        └── resources/         (Extracted AS-IS)
            ├── AndroidManifest.xml
            ├── res/           (Resources)
            └── assets/        (Game assets)

Why JADX Doesn't Corrupt Textures:

  1. JADX only decompiles CODE (DEX → Java)
  2. Resources are extracted, not converted
  3. No reprocessing/recompression of images
  4. Files stay in original format

⚠️ WHY APKTOOL CORRUPTS TEXTURES

The Problem with apktool:

apktool tries to:
├── Decode resources.arsc
├── Decompile XML files
├── Extract PNG/9-patch images
└── Reprocess drawable resources ❌

Result: Textures get corrupted during:
├── PNG recompression
├── 9-patch processing
└── Resource table rebuilding

When apktool is useful:

  • Modifying AndroidManifest.xml
  • Changing app resources (icons, strings)
  • Rebuilding APK after modifications
  • NOT for preserving original assets!

For Source Code Analysis:

# Use JADX (GUI or CLI)
jadx realracing3.apk -d decompiled/

# Result: Clean Java source code
# No corruption, just decompiled code

For Asset Extraction:

# Option 1: Unzip APK directly (APK = ZIP file)
unzip realracing3.apk -d extracted/

# Option 2: Use JADX to extract resources
jadx realracing3.apk --export-gradle

# Option 3: Manual extraction from phone (what we did!)
adb pull /sdcard/Android/data/com.ea.games.r3_row/files/

For Texture Preservation:

DON'T USE: apktool (corrupts textures)
DO USE:

  • Direct APK extraction (unzip)
  • JADX resource extraction
  • ADB pull from phone (gets runtime assets)

📦 COMPLETE WORKFLOW

Step 1: Get the APK

# From phone
adb pull /system/app/RealRacing3/base.apk

# Or from installed apps
adb shell pm path com.ea.games.r3_row
adb pull /data/app/com.ea.games.r3_row-[hash]/base.apk

# Or download from APKMirror/APKPure

Step 2: Decompile Code with JADX

# GUI method (recommended for beginners)
1. Download JADX from: https://github.com/skylot/jadx/releases
2. Run jadx-gui.exe (Windows) or jadx-gui.sh (Linux)
3. File → Open → Select realracing3.apk
4. Wait for decompilation (2-5 minutes)
5. Browse source code in GUI
6. File → Save All → Choose output folder

# CLI method (for automation)
jadx realracing3.apk -d decompiled/

Step 3: Extract Resources WITHOUT Corruption

# Method A: JADX extraction (safe)
jadx realracing3.apk --export-gradle -d output/

# Method B: Direct unzip (safest for textures)
unzip realracing3.apk -d apk-contents/

# Method C: 7-Zip (Windows)
7z x realracing3.apk -oapk-contents/

Step 4: Get Runtime Assets from Phone

# This gets assets downloaded from EA CDN
adb pull /sdcard/Android/data/com.ea.games.r3_row/files/ phone-assets/

# Also check OBB files
adb pull /sdcard/Android/obb/com.ea.games.r3_row/ obb-assets/

🎯 WHAT YOU GET FROM EACH METHOD

JADX Output:

decompiled/
├── sources/
│   └── com/ea/nimble/          (Network code)
│   └── com/firemonkeys/        (Game logic)
│   └── com/ea/games/r3/        (RR3 specific)
└── resources/
    ├── AndroidManifest.xml     (App config)
    ├── res/                    (App resources)
    │   ├── drawable/           (Icons, UI)
    │   ├── layout/             (UI layouts)
    │   └── values/             (Strings, configs)
    └── assets/                 (Base game assets)

APK Direct Extraction (unzip):

apk-contents/
├── AndroidManifest.xml         (Binary XML)
├── classes.dex                 (Bytecode)
├── res/                        (Resources - intact!)
│   ├── drawable/               (PNG files - NOT corrupted)
│   └── layout/                 (Binary XML)
├── assets/                     (Game base assets)
│   └── (whatever APK contains)
├── lib/                        (Native libraries)
│   ├── armeabi-v7a/
│   └── arm64-v8a/
└── META-INF/                   (Signatures)

Phone Asset Pull (ADB):

phone-assets/
├── pak files                   (3D models)
├── pka files                   (Archives)
├── z files                     (Compressed textures)
├── audio/                      (Sound files)
└── data/                       (Game data)

Size: 1.44 GB (full game content)

💡 TELL YOUR DISCORD FRIEND

Quick Answer:

Q: How did you decompile without corruption?

A: I used JADX, not apktool.

JADX = Decompiles code only, extracts resources AS-IS
apktool = Tries to decode/rebuild everything (corrupts textures)

For RR3:
1. Use JADX for source code
2. Use unzip/7-zip for APK resources
3. Use ADB to pull runtime assets from phone (best quality)

DO NOT use apktool if you want intact textures!

Detailed Answer:

The "res.zip" I extracted came from:
1. Install RR3 on phone
2. Let it download assets from EA CDN (1.44 GB)
3. ADB pull from phone storage
4. These are the ACTUAL game assets, not APK resources

For source code analysis:
1. Use JADX to decompile DEX → Java
2. No corruption, clean code output
3. Resources extracted as-is (no reprocessing)

apktool is NOT needed for RR3 preservation!

Alternative Tools

APK Sources


📊 COMPARISON TABLE

Method Source Code Resources Texture Quality Use Case
JADX Clean Java Intact Perfect Analysis
apktool Smali only ⚠️ Decoded Corrupted Modding
unzip/7-zip Bytecode Binary Perfect Extraction
ADB pull N/A Runtime Perfect Preservation

MY FINAL WORKFLOW FOR RR3

1. Decompile with JADX:
   jadx realracing3.apk -d E:\rr3\decompiled\
   
2. Extract APK resources:
   unzip realracing3.apk -d E:\rr3\apk-contents\
   
3. Pull runtime assets from phone:
   adb pull /sdcard/Android/data/com.ea.games.r3_row/files/ E:\rr3\phone-assets-full\
   
4. Analyze source code:
   - Read decompiled Java in E:\rr3\decompiled\sources\
   - Find network endpoints in com/ea/nimble/
   - Map API calls to server implementation
   
5. Preserve assets:
   - Use phone-pulled assets (best quality)
   - Extract .z files with custom tools
   - Archive everything for preservation

Result: No corruption, complete preservation, full source access


🚨 TL;DR FOR DISCORD

Tell them:

"I used JADX (not apktool) to decompile the APK. JADX only decompiles the code (DEX → Java) and extracts resources without reprocessing them, so nothing gets corrupted.

For the actual game assets (textures, models, audio), I pulled them directly from my phone using ADB after letting the game download everything from EA's CDN. That's 1.44 GB of pristine assets.

Don't use apktool for RR3 - it tries to decode and rebuild resources, which corrupts textures. Use JADX for code analysis and ADB for asset preservation.

Tools:

Method: jadx realracing3.apk -d output/ - done!"


This is the RIGHT way to preserve RR3 without corruption. 🏁