Konverze jar do apk

Převod souboru JAR do APK

Převeďte kompatibilní Java kód na podepsaný Android APK s omezeními pro desktopové a Java ME JAR soubory.

Převádějte soubory JAR online

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

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

Zařízení Android, emulátor nebo systém podnikové distribuce může vyžadovat instalovatelný soubor .apk, pokud je software, který máte, ve formě Java .jar. Obvykle jde o úlohu portování a sestavení pro Android, nikoli o změnu přípony souboru.

Co obsahuje soubor JAR

JAR (Java Archive) je kontejner založený na formátu ZIP, který Java vývojáři používají pro knihovny, desktopové aplikace, nástroje příkazového řádku a některý starší software Java ME. Obvykle obsahuje Java soubory .class, prostředky a metadata v adresáři META-INF; soubory JAR běžně vytvářejí Maven, Gradle, Eclipse, IntelliJ IDEA a nástroj JDK jar.

Spustitelný desktopový JAR často deklaruje Main-Class v souboru META-INF/MANIFEST.MF a spouští se prostřednictvím standardního Java runtime. Knihovní JAR poskytuje znovu použitelný kód bez vstupního bodu aplikace. Ani jeden typ sám o sobě neposkytuje komponenty Android, prostředky Android, použitelný soubor AndroidManifest.xml ani konfiguraci podepisování Android.

Co obsahuje soubor APK

APK je balíček aplikace pro Android. Obsahuje bytecode DEX pro Android Runtime (ART), manifest Android, zkompilované prostředky, volitelné nativní knihovny a podpisy balíčku.

Jeho praktickou výhodou je, že jej Android může přímo nainstalovat, ověřit jeho certifikát podpisu a zjistit deklarované aktivity, služby, oprávnění a podporovaná zařízení. Pro nové veřejné odeslání do Google Play místo něj použijte Android App Bundle (.aab); Google Play z balíčku generuje APK specifické pro jednotlivá zařízení.

Než se pokusíte o sestavení, zkontrolujte JAR

S nainstalovaným JDK vypište obsah archivu:

jar tf input.jar

Vyhledejte META-INF/MANIFEST.MF, adresáře balíčků Java, prostředky a závislosti. JAR používající Swing, AWT, JavaFX, desktopovou metodu main(), neomezené lokální cesty k souborům nebo desktopové knihovny specifické pro platformu nelze pouhým přebalením změnit na funkční aplikaci Android.

JAR, který je pouze univerzální knihovnou, lze v projektu Android možná použít. Kompletní desktopová aplikace obvykle vyžaduje úpravu zdrojového kódu pro Android.

Sestavení APK Android ze zdrojového kódu

  1. Nainstalujte Android Studio a prostřednictvím Tools → SDK Manager nainstalujte požadovanou platformu SDK.
  2. Vytvořte projekt Android prostřednictvím File → New → New Project. Pokud je stávající kód v Java, vyberte Java; podporován je také Kotlin, ale pro migraci není vyžadován.
  3. Přesuňte znovu použitelný kód Java do modulu aplikace, obvykle do app/src/main/java. Nahraďte desktopový vstupní bod main() aktivitou Android, službou, receiverem nebo jinou deklarovanou komponentou Android.
  4. Nahraďte kód desktopového uživatelského rozhraní views Android, layouts nebo Jetpack Compose; Android neposkytuje Swing, AWT ani JavaFX tak, jako desktopový Java runtime.
  5. Přizpůsobte úložiště, síťovou komunikaci, oznámení, práci na pozadí a oprávnění rozhraním API Android. Přístup k síti například vyžaduje v manifestu projektu <uses-permission android:name="android.permission.INTERNET" />.
  6. Nastavte ID aplikace, minimální verzi SDK, cílovou verzi SDK, ikony, prostředky a komponenty manifestu. Testujte v emulátoru i na skutečných zařízeních s verzemi Android, které podporujete.
  7. Vytvořte debug APK pomocí ./gradlew assembleDebug v systémech macOS/Linux nebo gradlew.bat assembleDebug v systému Windows. Obvyklý výstup je app/build/outputs/apk/debug/app-debug.apk.
  8. Vytvořte release APK pomocí Build → Generate Signed Bundle / APK → APK. Podepište jej pomocí keystore, který máte pod kontrolou, a uchovejte keystore, alias i hesla.

Použití kompatibilního JAR jako knihovny

Zkopírujte knihovní JAR do adresáře app/libs a přidejte jej do závislostí Gradle modulu aplikace:

implementation(files("libs/library.jar"))

Android Gradle Plugin během sestavení převádí kompatibilní soubory tříd Java na DEX. Požadované závislosti třetích stran přidávejte samostatně prostřednictvím Gradle; nepředpokládejte, že každá závislost používaná původním JAR je v něm vložena nebo že funguje v Androidu.

Soubory JAR Java ME a online převodníky

Starší hry a aplikace Java ME běžně používají soubor .jar spolu s volitelným deskriptorem .jad. J2ME Loader dokáže mnoho z nich spouštět prostřednictvím emulace, ale nepřevádí původní program na nativní samostatný APK. Nativní verze pro Android vyžaduje zdrojový kód a přepsání pro Android.

Žádná renomovaná online služba nedokáže libovolný JAR spolehlivě převést na funkční APK, protože vstupní body Android, uživatelské rozhraní, oprávnění, závislosti a náhrady rozhraní API jsou specifické pro danou aplikaci. Vyhněte se online převodníkům typu „one-click“, které vyžadují nahrání souboru, zejména u proprietárního kódu; nedokážou bezpečně vytvořit udržovatelnou aplikaci ani zachovat výhradní kontrolu nad vaším klíčem pro podepisování release verzí.

Omezení kompatibility a vydávání

ART spouští DEX, nikoli běžné soubory tříd JVM. D8 dokáže převést kompatibilní bytecode, ale nezpřístupní v Androidu desktopová rozhraní API Java SE. JAR zkompilované pro nepodporovanou verzi formátu tříd Java může být nutné znovu sestavit ze zdrojového kódu; některé jazykové funkce a knihovny vyžadují desugaring Android nebo náhrady specifické pro Android.

Reflexe, dynamicky načítané třídy, zmenšování kódu, nativní knihovny a architektury CPU specifické pro zařízení vyžadují explicitní konfiguraci sestavení a testování. Dekompilovaný kód může někdy pomoci obnovit ztracený projekt, ale může být neúplný, obtížně udržovatelný a omezený licencí softwaru.

Nainstalovanou aplikaci lze aktualizovat pouze pomocí stejného ID aplikace a podpisového klíče. Změna kteréhokoli z nich způsobí, že Android bude APK považovat za jinou aplikaci, nikoli za aktualizaci.

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

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

Srovnání souborových formátů JAR a APK
Vlastnost .JAR Java Archive .APK Android Package
Otevřený standard Ano Ne
Komprese Obojí Obojí
Typická velikost souboru Střední Střední
Otevírá se ve webovém prohlížeči Ne Ne
Další úpravy Omezeně Nelze přímo upravovat
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 1996 2008
Vývojář Oracle (originally Sun Microsystems) Google
MIME typ application/java-archive application/vnd.android.package-archive

Často kladené otázky

Lze přímo převést soubor JAR na APK?

Obvykle ne; JAR je archiv Java, zatímco APK je balíček aplikace pro Android s kódem zkompilovaným specificky pro Android, prostředky a konfigurací. JAR je obecně nutné pro Android portovat nebo znovu sestavit, nikoli jej pouze přejmenovat nebo znovu zabalit.

Bude můj kód JAR po převodu na APK fungovat?

Pouze pokud je kód kompatibilní s Androidem a je kolem něj doplněna struktura aplikace pro Android. JARy závislé na desktopových Java API, nepodporovaných knihovnách nebo nativních komponentách mohou vyžadovat změny zdrojového kódu nebo náhradu závislostí.

Lze převést APK zpět na původní JAR?

Možná se vám podaří extrahovat část kódu nebo prostředků souvisejících s Javou, ale původní strukturu JAR a zdrojový kód nemusí být možné obnovit. Kompilace pro Android, zpracování prostředků, optimalizace a podepisování mohou změnit nebo odstranit informace.