Přeskočit na obsah

Převod souboru APK do JAR

Extrahujte Android DEX bytecode do JAR pro kontrolu tříd, s nástroji a omezeními kompatibility.

Převádějte soubory APK online

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

Chcete převádět APK na JAR?

Dejte nám vědět. Podle zájmu vybíráme, které převody přidáme jako další.

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

Desktopový nástroj může pro kontrolu nebo analýzu souborů tříd vyžadovat bytecode aplikace Android ve formátu JAR. Konverze extrahuje a překládá kód z APK; nepřevádí aplikaci Android na přenositelný Java program.

Co je formát APK

APK je instalační formát balíčků pro aplikace Android. Android Studio a Gradle vytvářejí APK prostřednictvím Android SDK a uživatelé je získávají z obchodů s aplikacemi, záloh zařízení nebo přímého stahování.

APK je archiv založený na formátu ZIP, který obsahuje jeden nebo více souborů .dex s bytecodem Dalvik nebo ART, zkompilované prostředky, soubor AndroidManifest.xml, assets, nativní knihovny .so a metadata podepisování. Android jej instaluje do telefonů, tabletů, emulátorů a dalších zařízení Android.

Co je formát JAR

JAR je archiv Java založený na formátu ZIP, který obvykle distribuuje soubory tříd JVM a prostředky. Typický JAR obsahuje cesty jako com/example/App.class a může obsahovat META-INF/MANIFEST.MF; systémy sestavení Java, jako jsou Maven a Gradle, vytvářejí JAR pro desktopové aplikace a knihovny.

JAR vytvořený z APK obsahuje přeložené soubory tříd ve stylu JVM určené k analýze. Obvykle postrádá použitelný vstupní bod desktopové aplikace, runtime Androidu, balení Androidu a prostředky potřebné ke spuštění původní aplikace.

Jak převést APK na JAR

  1. Stáhněte aktuální verzi dex2jar z jeho oficiálního repozitáře pxb1988/dex2jar na GitHubu a rozbalte ji. APK jednoduše nepřejmenovávejte.
  2. Spusťte přiložený skript s APK jako vstupem. V Linuxu nebo macOS použijte ./d2j-dex2jar.sh -o app.jar app.apk; ve Windows použijte d2j-dex2jar.bat -o app.jar app.apk. V případě potřeby nahraďte názvy souborů úplnými cestami.
  3. Pokud výstupní soubor již existuje, použijte v dex2jar volbu force, obvykle -f, nebo zvolte jiný název výstupu. Nástroj načte bytecode DEX uvnitř APK a pokusí se do JAR zapsat přeložené soubory tříd.
  4. Výsledek ověřte pomocí jar tf app.jar. Chcete-li zkontrolovat třídu ze seznamu, použijte javap -classpath app.jar com.example.SomeClass a příklad nahraďte skutečným názvem třídy.

Pro kontrolu zdrojového kódu je JADX obvykle užitečnější než převod na JAR: otevřete APK v grafickém rozhraní JADX a použijte File → Save all nebo jeho možnost exportu projektu. JADX vytváří zdrojový kód podobný Javě, výstupem je však dekompilovaný kód, nikoli původní projekt, a nemusí být možné jej znovu sestavit.

Pokud potřebujete kontrolovat nebo dekódovat prostředky, manifest a kód smali namísto vytváření JAR, použijte Apktool. Apktool je určen k dekódování a opětovnému sestavení obsahu APK; nenahrazuje dex2jar, pokud je vyžadován JAR obsahující přeložené soubory tříd.

Omezení kvality a kompatibility

Změna .apk na .jar pouze změní příponu souboru. Skutečná konverze musí přeložit bytecode DEX obsažený v APK a nepřevádí prostředky, položky manifestu, data podepisování, nativní knihovny ani chování frameworku Androidu na běžné ekvivalenty v Javě.

Obfuskace odstraňuje smysluplné názvy tříd a metod. APK s multidexem, neobvyklý bytecode, novější jazykové funkce, kód generovaný kompilátorem a chráněné nebo poškozené balíčky mohou způsobit, že dex2jar některé třídy vynechá, selže u některých souborů nebo vytvoří výstup, který dekompilátory zobrazí nekvalitně. Ponechte si původní APK a zkontrolujte vytvořený archiv, místo abyste jej považovali za kompletní zdrojový projekt.

Třídy závislé na android.*, aktivitách, službách, kontextu aplikace, oprávněních, prostředcích nebo chování životního cyklu Androidu se nespustí na běžném JVM jen proto, že jsou uloženy v JAR. Výsledek je obecně určen ke kontrole, nikoli ke spuštění nebo čisté rekompilaci.

Neexistuje spolehlivá online služba pro převod APK na JAR, která by zachovala tuto sémantiku. Online konvertory archivů mohou soubory pouze přejmenovat nebo rozbalit, zatímco nahrání APK může odhalit proprietární kód, vložené přihlašovací údaje, certifikáty nebo osobní údaje; pro aplikace, které máte oprávnění kontrolovat, používejte lokální nástroje dex2jar, JADX nebo Apktool.

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

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

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

Informace o příponách a typech souborů poskytuje File-Extensions.org

Často kladené otázky

Zachová převod APK na JAR původní aplikaci pro Android?

Ne, převod APK na JAR je obvykle spíše proces dekompilace nebo inspekce než čistý převod formátu. Soubor JAR může obsahovat obnovené třídy podobné třídám Java, zatímco manifest APK, prostředky, nativní knihovny, informace o podpisu a některá data specifická pro Android nejsou zachována jako ekvivalentní aplikace JAR.

Bude kód APK převedený do JAR upravitelný jako zdrojový kód?

Ne, výsledkem nemusí být původní zdrojový kód a může obsahovat pouze rekonstruované třídy nebo dekompilovaný kód. Obfuskace, optimalizovaný bytecode, chybějící informace pro ladění a změny provedené kompilátorem mohou způsobit, že názvy, struktura a komentáře nebudou dostupné.

Mohu APK převedené do JAR spustit jako běžný program Java?

Obvykle ne, protože bytecode Androidu závisí na běhovém prostředí Androidu a rozhraních API Androidu, nikoli na standardním běhovém prostředí Java. Výsledný soubor JAR je obecně užitečný pro kontrolu nebo opětovné použití některých tříd, nikoli jako přímá náhrada souboru APK.

Proč převod APK na JAR selhává nebo vytváří neúplné třídy?

Může selhat, když APK používá více souborů DEX, silnou obfuskaci, nepodporované funkce bytecode nebo nativní kód. I když se převod podaří, dynamicky načítaný kód, optimalizované instrukce a komponenty specifické pro Android mohou chybět nebo být reprezentovány nesprávně.

Soubor už byl stažen

Tento soubor už byl stažen. Kvůli ochraně soukromí jsme ho hned po stažení smazali ze serveru, takže ho nejde stáhnout znovu. Pokud ho potřebujete ještě jednou, převeďte soubor znovu.