Konverze apk do java

Převod souboru APK do JAVA

Extrahujte zdrojový kód ve stylu Javy a resources ze souborů Android APK pomocí JADX a Apktool.

Převádějte soubory APK online

Pro převod APK do JAVA zatím vlastní online konvertor nemáme, ale soubory APK můžete online převést do těchto formátů:

Jak převést soubor apk do formátu java

Lidé extrahují zdrojový kód podobný Java z APK, aby mohli prozkoumat vydanou Android aplikaci, provést audit jejího chování nebo obnovit logiku, když není k dispozici původní projekt. Výsledkem je dekompilovaný kód určený k analýze, nikoli původní strom zdrojového kódu ani spolehlivě sestavitelný projekt Android Studio.

APK a soubory Java

APK je balíček aplikace pro Android. Jde o archiv ve formátu ZIP používaný zařízeními Android, vývojáři, testery, obchody s aplikacemi a instalačními programy balíčků; obvykle obsahuje manifest Androidu, resources, assets, nativní knihovny, zkompilovaný bytecode, například classes.dex, a podpisová data.

Kód APK je zkompilován do instrukcí Dalvik Executable (DEX) pro Android Runtime a není uložen jako soubory .java. Google Play často přijímá Android App Bundles (.aab) a vytváří APK specifická pro jednotlivá zařízení, ale vývojáři a testeři mohou stále pracovat přímo se soubory APK.

Java soubor je zdrojový kód v prostém textu s příponou .java. Dekompilovaný výstup podobný Java se snadněji prohledává, čte, porovnává a kontroluje než instrukce DEX; může odhalit strukturu tříd, řetězce, volání API, oprávnění a logiku aplikace. Nezachovává komentáře, formátování, původní názvy proměnných, nastavení projektu ani všechny informace na úrovni jazyka.

Extrahování zdroje podobného Java z APK

Pro dekompilaci DEX do Java použijte JADX. Čte soubory APK přímo, zobrazuje dekódovaný kód a resources a obecně je užitečnější než starší workflow dex2jar spolu s Java decompilerem. JADX získávejte z jeho oficiálních vydání na GitHubu, nikoli pomocí zastaralých nástrojů, jako je Xenotix APK Reverser.

  1. Zkopírujte APK do samostatné pracovní složky.
  2. Otevřete jej v grafickém rozhraní pomocí jadx-gui app.apk nebo vyberte File → Open.
  3. Procházejte balíčky a vyhledávejte názvy tříd, URL, oprávnění, metody, řetězce nebo položky manifestu.
  4. Exportujte zobrazený zdrojový kód a dekódované resources pomocí File → Save All.
  5. Pro výstup z příkazového řádku spusťte jadx -d decoded_app app.apk. Dekompilovaný zdrojový kód se obvykle zapisuje do decoded_app/sources a resources do decoded_app/resources.

Pokud je vyžadováno dekódování resources nebo nízkoúrovňová kontrola, použijte Apktool. Spusťte apktool d app.apk -o app_decoded; výsledné adresáře smali obsahují Smali, čitelnou reprezentaci bytecode DEX. Pokud výstup JADX vypadá neúplně, porovnejte sporný výstup se Smali, zejména u řídicího toku nebo těl metod.

Nenahrávejte proprietární APK, APK dodané zákazníkem ani APK obsahující citlivé údaje do veřejných online decompilerů. APK může obsahovat kód, certifikáty, vložené endpointy, API keys, assets a konfigurační data. Pro zpracování v prohlížeči použijte interní nebo samostatně hostovanou službu schválenou organizací; místní JADX je bezpečnější výchozí volba.

Omezení kompatibility a kvality

Dekompilace není bezeztrátový převod. Kompilátor odstraňuje komentáře a formátování a může odstranit informace o generických typech a lokální názvy. Obfuskace pomocí R8 nebo ProGuard může nahradit smysluplné názvy krátkými identifikátory, například a a b.

APK může obsahovat více souborů DEX, kód Kotlin, generovaný kód nebo nativní knihovny C/C++. JADX dokáže zobrazit DEX jako kód podobný Java, ale zdrojový kód Kotlin nebude obnoven jako původní Kotlin a nativní knihovny .so vyžadují samostatnou analýzu nativního kódu namísto dekompilace Java.

Generované soubory .java mohou obsahovat neplatnou syntaxi, chybějící typy, nepřesný řídicí tok nebo zástupné metody, zejména v případě obfuskace, reflexe, nepodporovaných vzorů bytecode nebo poškozených balíčků. S dekompilovaným výstupem je třeba zacházet jako s podkladem pro kontrolu, nikoli jako s autoritativním zdrojovým kódem.

Sestavení aplikace vyžaduje nový projekt Gradle, dependencies, manifesty, resources a konfiguraci podpisu. Původní soukromý podpisový klíč APK nelze obnovit; znovu sestavené APK musí být podepsáno klíčem, který ovládáte, a neaktualizuje nainstalovanou aplikaci podepsanou jiným klíčem. Software kontrolujte pouze tehdy, pokud to umožňují autorská práva, licenční podmínky, smlouvy a oprávnění.

APK vs JAVA: srovnání formátů

Jak si formáty APK a JAVA stojí v nejdůležitějších vlastnostech pro tento převod.

Srovnání souborových formátů APK a JAVA
Vlastnost .APK Android Package .JAVA Java source code file
Otevřený standard Ne Částečně otevřený
Komprese Obojí Bez komprese
Typická velikost souboru Střední Malé
Otevírá se ve webovém prohlížeči Ne Ne
Další úpravy Nelze přímo upravovat Snadné
Podpora metadat Základní Základní
Čitelný jako prostý text Ne Ano
Nejvhodnější pro Vkládání do aplikací Profesionální produkce
Zavedeno 2008 1995
Vývojář Google Oracle (Java platform; originally Sun Microsystems)
MIME typ application/vnd.android.package-archive text/x-java-source

Často kladené otázky

Lze APK převést zpět do původního zdrojového kódu v Javě?

Ne, APK lze obvykle pouze dekompilovat do zdrojového kódu podobného Javě, který se původnímu kódu přibližuje. Komentáře, smysluplné názvy odstraněné obfuskací, nastavení sestavení a část struktury zdrojového kódu se obvykle ztratí.

Převedou se zdroje Androidu a manifest na soubory Java?

Ne, zdroje, jako jsou obrázky, rozvržení, řetězce a manifest, se obvykle extrahují jako samostatné soubory, místo aby se převáděly na zdrojový kód Java. Zkompilované zdroje mohou být rekonstruovány nepřesně a některé podrobnosti zdrojů mohou být sloučeny nebo přejmenovány.

Proč se převedený kód v Javě nedaří zkompilovat?

Dekompilovaný kód v Javě se často nedaří zkompilovat, protože APK obsahuje bajtový kód místo původního zdrojového kódu a dekompilátory mohou složitý tok řízení rekonstruovat nepřesně. Výsledek mohou znemožnit sestavit také chybějící knihovny, generované třídy, obfuskace a nativní kód.

Obnoví převod APK do Javy nativní kód a veškeré funkce aplikace?

Ne, dekompilace do Javy neobnoví nativní kód obsažený v binárních knihovnách a nezahrnuje dynamicky načítané funkce ani funkce na straně serveru. Výsledek je užitečný pro kontrolu, ale nelze zaručit, že půjde o kompletní, upravitelný projekt Androidu.