Android 安装在错误的地方寻找 类
Android installation is looking for classes in the wrong place
为了解决更大的问题,我创建了一个示例应用程序,我可以在上面测试问题出在哪里。代码与单视图向导生成的代码基本一致
当我通过 appliaction > run
在桌面上启动它时,它工作正常。当我通过 other > androidInstall
从我的设备 运行 它时,我得到一个黑屏(我也事先 运行 clean
)。所以我启动了 adb logcat
并发现了这个错误:
E DalvikLauncher: java.lang.ClassNotFoundException: Didn't find class
"com.gluonapplication.GluonApplication" on path: DexPathList[[zip file
"/data/app/com.gluonapplication-1/base.apk"],nativeLibraryDirectories=[/data/app/com.gluonapplication-1/lib/arm,
/data/app/com.gluonapplication-1/base.apk!/lib/armeabi, /vendor/lib,
/system/lib]]
这并不奇怪,因为那里没有 class。主要的 class 位于 main.GluonApplication
(可能是错误的包名,但它是测试应用程序)。 build.gradle
具体指定 mainClassName = 'main.GluonApplication'
。那么为什么 Android 版本在其他地方呢?有我需要 edit/recreate 的清单吗?是否在以前版本的应用程序可能驻留并影响当前版本的地方进行了某种缓存?
每当您使用 IDE 插件创建项目时,都会有一个默认清单 AndroidManifest.xml
,添加到 src/android/
文件夹中。
如果你打开它,你会找到分配的包名,这将匹配主class的包及其全名。
根据您在日志中找到的内容,这将是您当前的清单:
<?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gluonapplication"
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="21"/>
<application android:label="GluonApplication" android:name="android.support.multidex.MultiDexApplication" android:icon="@mipmap/ic_launcher">
<activity android:name="javafxports.android.FXActivity" android:label="GoNative" android:configChanges="orientation|screenSize">
<meta-data android:name="main.class" android:value="com.gluonapplication.GluonApplication"/>
<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>
请确保包名称与真实包名称相符,否则进行必要的更改。
另请注意,在 Android 上,您至少需要两个单词和一个点来表示有效的包名称,例如 com.gluonapplication
。
为了解决更大的问题,我创建了一个示例应用程序,我可以在上面测试问题出在哪里。代码与单视图向导生成的代码基本一致
当我通过 appliaction > run
在桌面上启动它时,它工作正常。当我通过 other > androidInstall
从我的设备 运行 它时,我得到一个黑屏(我也事先 运行 clean
)。所以我启动了 adb logcat
并发现了这个错误:
E DalvikLauncher: java.lang.ClassNotFoundException: Didn't find class "com.gluonapplication.GluonApplication" on path: DexPathList[[zip file "/data/app/com.gluonapplication-1/base.apk"],nativeLibraryDirectories=[/data/app/com.gluonapplication-1/lib/arm, /data/app/com.gluonapplication-1/base.apk!/lib/armeabi, /vendor/lib, /system/lib]]
这并不奇怪,因为那里没有 class。主要的 class 位于 main.GluonApplication
(可能是错误的包名,但它是测试应用程序)。 build.gradle
具体指定 mainClassName = 'main.GluonApplication'
。那么为什么 Android 版本在其他地方呢?有我需要 edit/recreate 的清单吗?是否在以前版本的应用程序可能驻留并影响当前版本的地方进行了某种缓存?
每当您使用 IDE 插件创建项目时,都会有一个默认清单 AndroidManifest.xml
,添加到 src/android/
文件夹中。
如果你打开它,你会找到分配的包名,这将匹配主class的包及其全名。
根据您在日志中找到的内容,这将是您当前的清单:
<?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gluonapplication"
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="21"/>
<application android:label="GluonApplication" android:name="android.support.multidex.MultiDexApplication" android:icon="@mipmap/ic_launcher">
<activity android:name="javafxports.android.FXActivity" android:label="GoNative" android:configChanges="orientation|screenSize">
<meta-data android:name="main.class" android:value="com.gluonapplication.GluonApplication"/>
<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>
请确保包名称与真实包名称相符,否则进行必要的更改。
另请注意,在 Android 上,您至少需要两个单词和一个点来表示有效的包名称,例如 com.gluonapplication
。