2015-07-05 66 views
0

我設法使用gradle和javafxport構建JavaFX應用程序,但是apk無法安裝在我的設備上。無法在Android x86_64上安裝JavaFX應用程序

這裏是我的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' 
    } 
} 

我的設備是華碩Zenfone2運行普通的Android 5.0

這是一個x86_64的,所以我懷疑可能是一個問題,但不是即時通訊確定如何診斷。任何建議如何解決這個問題?

我設法讓我的手在標準4.4.2 ARM電話,以便它安裝,但它不會跑(blackscreen),這裏是在執行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是主要的:

所有的

Project structure in Eclipse

回答

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' 
    } 
} 
+0

是的!它試圖在等待回覆時等待logcat,並確實發現了你說的問題! java.lang.ClassNotFoundException:找不到類「application.Main」 我該如何弄清楚「mainClassName」究竟是什麼?多數民衆贊成在什麼我似乎不明白:( – JulioQc

+0

你有沒有改變'mainClassName'? –

+0

我嘗試了很多事情......我不知道它應該是什麼樣子,那就是問題.java項目主類位於「\ src \ application \ Main.java「。這是否意味着什麼? – JulioQc

1

這是一個x86_64所以我懷疑這可能是一個問題,但我不知道如何 來診斷。

要診斷應用程序無法安裝,執行指示是否在設備上安裝的安裝通過命令提示符下使用ADB

adb install myapp.apk 

你會得到輸出已經失敗了原因失敗。

如果您的應用程序在ARM設備上正確安裝,但不是x86設備,那麼很可能您的adb沒有運送所有必需的本機庫。如果是這種情況,則adb install命令將返回錯誤INSTALL_FAILED_NO_MATCHING_ABIS

+0

我得到錯誤'失敗[INSTALL_FAILED_DEXOPT]' – JulioQc

相關問題