F XML падает при компиляции в APK - PullRequest
0 голосов
/ 23 января 2020

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

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

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

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

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

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

Here is my file directory.

Как вы можете видите, у меня есть f xml в src / main / resources / scenes /...

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

  private FXMLLoader loader;

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

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

Я нашел похожий вопрос без ответа от 3 лет go:

F XML внутри проекта 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"
    }
}

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

...