FXML аварийно завершает работу при компиляции в APK

Я пытаюсь создать приложение с javaFX, используя javaFXPorts, и это последнее препятствие, которое мне нужно преодолеть.

Мой запуск ./gradlew работает нормально - все функции есть, как я и ожидал. Однако, когда я создаю APK и запускаю его на своем телефоне, всякий раз, когда я пытаюсь получить доступ к меню «Профиль», которое является единственным меню для использования файлов fxml в этой новой сборке моего приложения, программа падает.

Моя программа также использует файлы CSV для хранения информации. У меня была аналогичная проблема при попытке загрузить их - мое приложение загружало его сразу после запуска, что приводило к черному экрану.

Однако, просто добавив «сырую» подпапку в мой каталог ресурсов и обновив расположение CSV-файла, это исправили — и все это несмотря на то, что на моей машине разработки все работало нормально, когда я запускал ./gradlew. Я подозреваю, что это связано с тем, что APK не упаковывал CSV-файлы, поэтому при попытке доступа к ним произошел естественный сбой.

Я подозреваю, что здесь происходит нечто подобное, в том смысле, что APK на самом деле не упаковывает файлы fxml и дает сбой при попытке доступа к нему.

Вот мой каталог файлов.

Вот мой каталог файлов.

Как видите, у меня есть файл fxml в папке src/main/resources/scenes/...

И загрузите его в мою программу, используя:

  private FXMLLoader loader;

  loader = new FXMLLoader(getClass().getResource("/scenes/profile.fxml"));
  loader.setController(this);
  mainPane.setCenter(loader.load());

И это работает на моей машине разработки.

Я нашел аналогичный вопрос без ответа 3 года назад:

файл FXML внутри проекта javafxports

Мой build.gradle выглядит следующим образом:

    /*
 * This build file was generated by the Gradle 'init' task.
 *
 * This generated file contains a sample Java project to get you started.
 * For more details take a look at the Java Quickstart chapter in the Gradle
 * user guide available at https://docs.gradle.org/4.1/userguide/tutorial_java_projects.html
 */

 buildscript {
     repositories {
         jcenter()
     }

     dependencies {
         classpath 'org.javafxports:jfxmobile-plugin:1.3.17'
     }
 }

 plugins {
     id 'java'
     id 'application'
     //id 'org.openjfx.javafxplugin' version '0.0.8'

 }

apply plugin:'org.javafxports.jfxmobile'

 mainClassName = "src.main.java.MainScreen"

 jfxmobile {

 javafxportsVersion = '8.60.12'

 android {
 applicationPackage = 'org.javafxports.ensemble'
  compileSdkVersion = '27'
  androidSdk = 'C:/Users/Luke/AppData/Local/Android/Sdk'

  packagingOptions {
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
    }
 }

     ios {
         forceLinkClasses = ['ensemble.**.*']
     }
 }


repositories {
jcenter()
maven {
     url 'http://nexus.gluonhq.com/nexus/content/repositories/releases/'
 }
 mavenCentral()
}

dependencies {
    // This dependency is found on compile classpath of this component and consumers.
    compile 'com.google.guava:guava:22.0'

    // Use JUnit test framework
    testCompile 'junit:junit:4.12'
    testCompile 'org.testfx:testfx-junit:4.0.15-alpha'
    testCompile 'org.hamcrest:hamcrest-all:1.3'
      compile "com.opencsv:opencsv:4.0"
    compile 'com.gluonhq:charm:5.0.0'
}

allprojects {
    tasks.withType(JavaCompile) {
        options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
    }
}

Какой должна быть правильная файловая структура для упаковки FXML? Я пытался поместить его в исходную папку и просто подтолкнуть в папку основных ресурсов, но безрезультатно.


person Link    schedule 23.01.2020    source источник
comment
Прежде всего, перестаньте гадать/подозревать и используйте adb logcat, чтобы узнать об исключениях, которые вы получаете при запуске вашего приложения, которые вызывают сбои или черный экран. Затем посмотрите, можете ли вы их исправить, иначе опубликуйте их здесь.   -  person José Pereda    schedule 23.01.2020
comment
минимальный воспроизводимый пример, пожалуйста..   -  person kleopatra    schedule 23.01.2020
comment
Вы можете попробовать этот минимальный шаблон JavaFX в качестве основы и просто расширить остальной код. Он включает базовую конфигурацию JavaFXPorts для Android и поддержку таблиц стилей Sass.   -  person Küroro    schedule 11.02.2020