Skip to content

[core] Jadx does not decompile APK if the XAPK contains APK+OBB #2834

Description

@AndroidMaster25

Issue details

Jadx can decompile an APK if the XAPK contains split APKs, but not if the XAPK contains both APK and OBB file. I know I could simply extract the APK from the XAPK, but I'm lazy to do it

XAPK with APK+OBB

Image

XAPK with split APKs

Image

Relevant log output or stacktrace

====================================================================================================
INFO : output directory: com.my.hawk.air.shooter_42.4.31686
INFO : loading ...
WARN : Failed to load XApk file: F:\Android apps\HAWK Airplane games. Shoot em up\com.my.hawk.air.shooter_42.4.31686.xapk
java.nio.file.NoSuchFileException: C:\Users\xxxxx\AppData\Local\Temp\jadx-instance-6153344598230684411\plugins-data\xapk-input\com.my.hawk.air.shooter_42.4.31686.xapk_1774628062895\Android\obb\com.my.hawk.air.shooter\main.31686.com.my.hawk.air.shooter.obb
	at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:85)
	at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103)
	at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:108)
	at java.base/sun.nio.fs.WindowsFileSystemProvider.newByteChannel(WindowsFileSystemProvider.java:236)
	at java.base/java.nio.file.spi.FileSystemProvider.newOutputStream(FileSystemProvider.java:484)
	at java.base/java.nio.file.Files.newOutputStream(Files.java:228)
	at java.base/java.nio.file.Files.copy(Files.java:3160)
	at jadx.plugins.input.xapk.XApkLoader.unpackXApk(XApkLoader.java:91)
	at jadx.plugins.input.xapk.XApkLoader.checkAndLoad(XApkLoader.java:68)
	at jadx.plugins.input.xapk.XApkCustomInput.loadFiles(XApkCustomInput.java:32)
	at jadx.api.JadxDecompiler.loadInputFiles(JadxDecompiler.java:166)
	at jadx.api.JadxDecompiler.load(JadxDecompiler.java:125)
	at jadx.gui.JadxWrapper.open(JadxWrapper.java:82)
	at jadx.gui.ui.MainWindow.lambda$loadFiles$6(MainWindow.java:542)
	at jadx.core.utils.tasks.TaskExecutor.wrapTask(TaskExecutor.java:198)
	at jadx.core.utils.tasks.TaskExecutor.runStages(TaskExecutor.java:173)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:842)
WARN : Failed to load XApk file: F:\Android apps\HAWK Airplane games. Shoot em up\com.my.hawk.air.shooter_42.4.31686.xapk
java.nio.file.NoSuchFileException: C:\Users\xxxxx\AppData\Local\Temp\jadx-instance-6153344598230684411\plugins-data\xapk-input\com.my.hawk.air.shooter_42.4.31686.xapk_1774628062985\Android\obb\com.my.hawk.air.shooter\main.31686.com.my.hawk.air.shooter.obb
	at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:85)
	at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103)
	at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:108)
	at java.base/sun.nio.fs.WindowsFileSystemProvider.newByteChannel(WindowsFileSystemProvider.java:236)
	at java.base/java.nio.file.spi.FileSystemProvider.newOutputStream(FileSystemProvider.java:484)
	at java.base/java.nio.file.Files.newOutputStream(Files.java:228)
	at java.base/java.nio.file.Files.copy(Files.java:3160)
	at jadx.plugins.input.xapk.XApkLoader.unpackXApk(XApkLoader.java:91)
	at jadx.plugins.input.xapk.XApkLoader.checkAndLoad(XApkLoader.java:68)
	at jadx.plugins.input.xapk.XApkCustomInput.load(XApkCustomInput.java:46)
	at jadx.api.ResourcesLoader.loadFile(ResourcesLoader.java:191)
	at jadx.api.ResourcesLoader.load(ResourcesLoader.java:59)
	at jadx.api.JadxDecompiler.getResources(JadxDecompiler.java:469)
	at jadx.api.JadxDecompiler.load(JadxDecompiler.java:131)
	at jadx.gui.JadxWrapper.open(JadxWrapper.java:82)
	at jadx.gui.ui.MainWindow.lambda$loadFiles$6(MainWindow.java:542)
	at jadx.core.utils.tasks.TaskExecutor.wrapTask(TaskExecutor.java:198)
	at jadx.core.utils.tasks.TaskExecutor.runStages(TaskExecutor.java:173)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:842)
INFO : Loaded classes: 1, methods: 3, instructions: 42
INFO : Found 1 classes in disk cache, time: 2ms, dir: C:\Users\xxxxx\AppData\Local\skylot\jadx\cache\projects\com.my.hawk.air.shooter_42.4.31686-8342bf8c06bffe4e5610e14ca1734d19\code

Provide sample and class/method full name

XAPK link: https://apkcombo.com/hawk-airplane-space-games/com.my.hawk.air.shooter/

Jadx version

r2631.dcce3aa

Metadata

Metadata

Assignees

Labels

CoreIssues in jadx-core modulebug

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions