Существует ли универсальный или "толстый" файл класса для Java?
Жирный двоичный файл - это двоичный файл, который может быть запущен на нескольких архитектурах. По сути, он состоит из программы, скомпилированной дважды, один раз для каждой архитектуры, затем записанной в один и тот же файл. Вероятно, наиболее известным примером являются "универсальные" двоичные файлы Apple, позволяющие компилировать программы для архитектур Intel и Power PC и запускать их из одного исполняемого файла.
Это никогда не было проблемой для Java, поскольку Java работает на JVM, что позволяет запускать его с любого компьютера, поддерживаемого JVM. Однако Android сейчас очень популярен, а виртуальная машина Android (Dalvik) не совместима с JVM. Есть ли способ дважды скомпилировать код и создать файл класса, который может быть выполнен как JVM, так и Dalvik? А если нет, возможно ли это?
1 ответ
Ответ: да.
Вы можете создать универсальный .jar
файл, который содержит как JVM-дружественных .class
файлы и Android-дружественных classes.dex
файл. dx
инструмент, включенный в Android SDK, будет испускать такие файлы, если вы используете --keep-classes
опция командной строки.
Обратите внимание, что хотя такое .jar
Файлы могут использоваться на JVM и на Android, поэтому упаковывать код не очень полезно. Приложения для Android упакованы как .apk
файлы включают XML-файл манифеста Android. Они используют специальные API для Android, такие как Activity
которые не доступны на JVM.
Универсальный .jar
Файл будет в основном полезен, если вы хотите выполнить загрузку классов во время выполнения библиотеки.