java.lang.NoClassDefFoundError: javafxports.android.FXDalvikEntity$2

Получение следующей ошибки при запуске приложения на телефоне Android

FATAL EXCEPTION: main
Process: ie.murphysoftware.games.magnatron, PID: 17378
java.lang.NoClassDefFoundError: javafxports.android.FXDalvikEntity$2
    at javafxports.android.FXDalvikEntity.jfxEventsLoop(FXDalvikEntity.java:484)
    at javafxports.android.FXDalvikEntity.<init>(FXDalvikEntity.java:118)
    at javafxports.android.FXActivity.onCreate(FXActivity.java:140)
    at android.app.Activity.performCreate(Activity.java:5426)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
    at android.app.ActivityThread.access$900(ActivityThread.java:161)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:157)
    at android.app.ActivityThread.main(ActivityThread.java:5356)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
    at dalvik.system.NativeStart.main(Native Method)

Эта ошибка отображается при запуске приложения на Android версии KitKat API Level 19 и, возможно, более низких версиях Android.

В APK есть 2 класса dex

  • classes.dex
  • classes2.dex

Кажется, проблема в том, что первичный файл dex classes.dex содержит класс FXDalvikEntity, а classes2.dex содержит его подклассы, которые

  • FXDalvikEntity $ 1
  • FXDalvikEntity $ 2
  • FXDalvikEntity $ InternalSurfaceView
  • FXDalvikEntity $ InternalTextureView
  • FXDalvikEntity $ SurfaceDetails

Когда приложение запускается, классы, содержащиеся в classes.dex, загружаются, а классы из classes2.dex - нет, и это вызывает ошибку.

Есть ли способ заставить dex создать только один файл dex?

Моя среда сборки

Eclipse - Neon
Gradle 3.1
compileSdkVersion = 25
minSdkVersion = 17
buildToolsVersion = "25.0.0"
applicationPackage = 'org.javafxports.ensemble'

2 ответа

Пока нет решения, но причина проблемы.

  1. Размер приложения требует 2 файла dex.
  2. Android SDK версии 20 или ниже не поддерживает мультидексные файлы естественным образом и требует дополнительной библиотеки Android "multidex.jar". Для реализации библиотеки multidex требуется дополнительный код, который подробно описан по этой ссылке. Использование multidex, когда minSdkVersion установлен на 20 или ниже
  3. Эти подробные инструкции не учитывают иерархию javafxports и требуют, чтобы класс был необходим для реализации функциональности multidex. extends android.support.multidex.MultiDexApplication или переопределяет Application.attachBaseContext(...),

Таким образом, решение теперь, кажется, состоит в том, чтобы найти способ javafx.application.Application позвонить Multidex.install(this); ведущий к новому вопросу о stackru javafxports multidex minSdkVersion установлен на 20 или меньше

Вот что указывает исключение, полученное вами:

Брошенный, если виртуальная машина Java или экземпляр ClassLoader пытается загрузить определение класса (как часть обычного вызова метода или как часть создания нового экземпляра с использованием нового выражения), и определение класса не может быть найдено.

(источник: https://docs.oracle.com/javase/7/docs/api/java/lang/NoClassDefFoundError.html)

Это означает, что класс, к которому осуществляется доступ (прямо или косвенно) в вашем приложении, не существует в среде выполнения. Поэтому, вероятно, вам нужно выбрать более новую версию в качестве среды выполнения. Альтернативная причина может заключаться в том, что используемых вами зависимостей нет (я не уверен, как приложения Android справляются со сторонними зависимостями), и вам нужно включить их в свое приложение.

Другие вопросы по тегам