我正在使用Gluon的JavaFXPorts在Android上尝试我的第一个JavaFX应用程序。不幸的是我无法构建包含应用程序代码的apk。对于我自己的项目和例如Jose Pereda的http://jperedadnr.blogspot.com/2015/03/javafx-on-mobile-dream-come-true.html的2048FX这样的例子,都是如此。
当我检查生成的apks时,我找不到我在项目中创建的任何类。我找到任何必需的SDK类和应用程序资源文件。但是,没有特定于应用程序的* .class文件。
我正在使用gradle' android'来创建apks。任务。
以下是我的两个gradle文件的示例。 Displays是TickerUI的依赖项。
显示 - build.gradle
group 'com.androidtest'
version '1.0'
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'me.tatarka:gradle-retrolambda:3.2.4'
}
}
apply plugin: 'idea'
apply plugin: 'java'
apply plugin: 'me.tatarka.retrolambda'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testCompile 'org.testng:testng:6.9.9'
}
retrolambda {
jdk 'C:\\Program Files\\Java\\jdk1.7.0_75\\bin'
oldJdk 'C:\\Program Files\\Java\\jdk1.8.0_65\\bin'
defaultMethods true
incremental false
}
TickerUI - build.gradle
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'org.javafxports:jfxmobile-plugin:1.0.6'
}
}
apply plugin: 'org.javafxports.jfxmobile'
apply plugin: 'idea'
repositories {
jcenter()
}
mainClassName = 'com.androidtest.ticker.tickerui.Main'
dependencies {
compile files('../../Displays/Displays/build/libs/Displays-1.0.jar')
}
jfxmobile {
android {
androidSdk = 'C:\\Program Files (x86)\\Android\\android-sdk'
compileSdkVersion = 23
manifest = 'src/android/AndroidManifest.xml'
}
}
注意 我正在家中迁移我的个人Nexus,这就是我使用本地文件依赖的原因。
Java版本 这是我的Java版本。 Intellij:1.8.0_65 x64 Gradle:1.8.0_65 x64 SDK:1.8.0_65 x64。 Android SDK:24.4.1(x86?) 我尝试切换到x86版本的java,但我收到了一个dex错误。 "无法初始化vm,没有足够的空间用于对象堆。"。
如果有人有任何建议我会非常感激。提前谢谢你,
JEC
修改1 我没有在./gradlew.bat --info android命令中看到任何错误。但是,当我在手机上安装TickerUI应用程序并连接调试器时,我收到以下错误:
12-18 08:33:33.237 18295-18295/com.androidtest.tickerui E/DalvikLauncher﹕ Launch failed with exception.
java.lang.ClassNotFoundException: Didn't find class "com.androidtest.tickerui.Main" on path: DexPathList[[zip file "/data/app/com.androidtest.tickerui-2/base.apk"],nativeLibraryDirectories=[/data/app/com.androidtest.tickerui-2/lib/arm, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at javafxports.android.DalvikLauncher.resolveApplicationClass(DalvikLauncher.java:264)
at javafxports.android.DalvikLauncher.launchApp(DalvikLauncher.java:164)
at javafxports.android.FXDalvikEntity.getLauncherAndLaunchApplication(FXDalvikEntity.java:119)
at javafxports.android.FXDalvikEntity.surfaceCreated(FXDalvikEntity.java:145)
at android.view.SurfaceView.updateWindow(SurfaceView.java:607)
at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:184)
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:921)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2164)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1191)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6642)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:777)
at android.view.Choreographer.doCallbacks(Choreographer.java:590)
at android.view.Choreographer.doFrame(Choreographer.java:560)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:763)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5951)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
Suppressed: java.lang.ClassNotFoundException: com.androidtest.tickerui.Main
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
... 23 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
我检查了我的TickerUI.apk,我确实看到了包中的两个.dex文件。我不确定为什么android没有找到我的Main类。
修改2
我开始怀疑我的Android清单是个问题。它在下面:
<?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.androidtest.tickerui" android:versionCode="1" android:versionName="1.0">
<supports-screens android:xlargeScreens="true"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="23"/>
<application android:label="TickerUI" android:name="android.support.multidex.MultiDexApplication" android:icon="@mipmap/ic_launcher">
<activity android:name="javafxports.android.FXActivity" android:label="TickerUI" android:configChanges="orientation|screenSize">
<meta-data android:name="main.class" android:value="com.androidtest.tickerui.Main"/>
<meta-data android:name="debug.port" android:value="0"/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
答案 0 :(得分:0)
我的android清单中指定了错误的主类。谢谢你的帮助José。