0

gradle と javafxport を使用して JavaFX アプリをビルドできましたが、apk をデバイスにインストールできません。

これが私のbuild.gradleです:

task wrapper(type: Wrapper) {
    gradleVersion = '2.4'
}

buildscript {
    repositories {
        jcenter()
    }

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

apply plugin: 'org.javafxports.jfxmobile'

mainClassName = 'java.Main'

repositories {
    jcenter()
}

jfxmobile {
    ios {
        forceLinkClasses = ['java.**.*']
    }
    android {
        applicationPackage = 'com.superflush.java'
    androidSdk = 'C:/Users/USERNAME/AppData/Local/Android/android-sdk'
    }
}

私のデバイスは、ストック Android 5.0 を実行している Asus Zenfone2 です。

これは x86_64 であるため、問題であると思われますが、診断方法がわかりません。この問題を解決する方法はありますか?

標準の 4.4.2 ARM 電話をなんとか手に入れたので、インストールはできますが、実行されません (ブラックスクリーン)。実行時の logcat エラー出力は次のとおりです。

E/DalvikLauncher(12088): java.lang.ClassNotFoundException: Didn't find class "application.Main" on path: DexPathList[[zip file "/data/app/com.superflu
sh.java-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.superflush.java-2, /vendor/lib, /system/lib]]
E/DalvikLauncher(12088):        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
E/DalvikLauncher(12088):        at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
E/DalvikLauncher(12088):        at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
E/DalvikLauncher(12088):        at javafxports.android.DalvikLauncher.resolveApplicationClass(DalvikLauncher.java:232)
E/DalvikLauncher(12088):        at javafxports.android.DalvikLauncher.launchApp(DalvikLauncher.java:134)
E/DalvikLauncher(12088):        at javafxports.android.FXDalvikEntity.getLauncherAndLaunchApplication(FXDalvikEntity.java:118)
E/DalvikLauncher(12088):        at javafxports.android.FXDalvikEntity.surfaceCreated(FXDalvikEntity.java:144)
E/DalvikLauncher(12088):        at android.view.SurfaceView.updateWindow(SurfaceView.java:572)
E/DalvikLauncher(12088):        at android.view.SurfaceView.access$000(SurfaceView.java:86)
E/DalvikLauncher(12088):        at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:175)
E/DalvikLauncher(12088):        at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:847)
E/DalvikLauncher(12088):        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1871)
E/DalvikLauncher(12088):        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
E/DalvikLauncher(12088):        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
E/DalvikLauncher(12088):        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
E/DalvikLauncher(12088):        at android.view.Choreographer.doCallbacks(Choreographer.java:574)
E/DalvikLauncher(12088):        at android.view.Choreographer.doFrame(Choreographer.java:544)
E/DalvikLauncher(12088):        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
E/DalvikLauncher(12088):        at android.os.Handler.handleCallback(Handler.java:733)
E/DalvikLauncher(12088):        at android.os.Handler.dispatchMessage(Handler.java:95)
E/DalvikLauncher(12088):        at android.os.Looper.loop(Looper.java:136)
E/DalvikLauncher(12088):        at android.app.ActivityThread.main(ActivityThread.java:5149)
E/DalvikLauncher(12088):        at java.lang.reflect.Method.invokeNative(Native Method)
E/DalvikLauncher(12088):        at java.lang.reflect.Method.invoke(Method.java:515)
E/DalvikLauncher(12088):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
E/DalvikLauncher(12088):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
E/DalvikLauncher(12088):        at dalvik.system.NativeStart.main(Native Method)

これが私のプロジェクト構造で、 Main.java がメインです。

Eclipse でのプロジェクト構造

4

2 に答える 2

1

まず第一に、パッケージを含むmainClassNameメイン クラスの名前 (たとえば ) を追加する必要があります。JavaFXAppこのようなもの:

mainClassName = 'com.superflush.java.JavaFXApp'

の内部androidでは、行は必要ありませんapplicationPackage

apk のビルドに成功したら、デバイスにインストールする場合は、実行してみます。接続したままにし、コマンドラインで実行adb logcatして、すべての出力を確認し、機能しない場合は例外を見つけます。

編集

OP回答の最後の変更に基づいて、これはより適切な回答です。

まず、メイン Java クラスは、適切な名前のパッケージ内にある必要があります。Android パッケージの命名規則に従う必要があるため、次のようなものが機能します。

package com.julioqc.superflush;

また、これらのフォルダーの下にメイン クラスがあることにも注意してください。

src/main/java/com/julioqc/superFlush/Main.java

(注意main/javaはパッケージの名前の一部ではありません)。

したがって、同じフォルダー構造の下にリソースを配置する必要があります。

src/main/resources/com/julioqc/superFlush/application.css
src/main/resources/com/julioqc/superFlush/Image.jpg ...

最後に、これはBuild.gradleファイルである必要があります。

buildscript {
    repositories {
        jcenter()
    }

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

apply plugin: 'org.javafxports.jfxmobile'

mainClassName = 'com.julioqc.superflush.Main'

repositories {
    jcenter()
}

jfxmobile {
    ios {
        forceLinkClasses = ['com.julioqc.superflush.**.*']
    }
    android {
        androidSdk = 'C:/Users/<user>/AppData/Local/Android/android-sdk'
    }
}
于 2015-07-05T22:19:20.890 に答える