好的,我一直在用 libgdx 做几个演示项目,但当时我没有安卓设备,所以我无法测试它们。我最近买了一台平板电脑,我决定看看我的项目是否在通过 USB 连接的设备上运行。
我启用了 USB 调试模式,创建了一个新的 libgdx 项目并进行了测试。有用。所以问题不在于连接,而是我试图运行的其他项目。
第一个项目是在阅读 libgdx 书籍时编写的。因为当我第一次编写应用程序时,我不得不重新安装我的电脑,我的 android 版本增加了,让它再次与新版本一起工作很痛苦。所以它可能是问题的根源。作为桌面运行工作正常,作为 android 运行给我以下错误:
[2015-04-19 09:08:37 - CyberGlider-android] Dx 警告:忽略不带有关联 EnclosureMethod 属性的匿名内部类 (com.sun.jna.win32.W32APIOptions$2) 的 InnerClasses 属性。此类可能是由不针对现代 .class 文件格式的编译器生成的。推荐的解决方案是从源代码重新编译类,使用最新的编译器并且不指定任何“-target”类型选项。忽略此警告的后果是此类上的反射操作将错误地指示它不是内部类。
它给了我该消息的 15 个副本,因为核心项目中有 15 个类。我尝试清理所有项目,但没有奏效。然后错误继续:
[2015-04-19 09:08:37 - CyberGlider-android] Dx 故障处理“javax/xml/namespace/QName.class”:
不构建核心库时对核心类(java.* 或 javax.*)的不明智或错误使用。
这通常是由于在使用 IDE(例如 Eclipse)时无意中在应用程序的项目中包含了核心库文件。如果您确定您不是故意定义核心类,那么这是对正在发生的事情的最可能的解释。
但是,您实际上可能正在尝试在核心命名空间中定义一个类,例如,您可能从非 Android 虚拟机项目中获取了该类的源代码。这肯定是行不通的。至少,它会危及您的应用程序与平台未来版本的兼容性。它的合法性也经常受到质疑。
如果你真的打算构建一个核心库——它只适合作为创建完整虚拟机发行版的一部分,而不是编译应用程序——然后使用“--core-library”选项来抑制这个错误消息。
如果您继续使用“--core-library”,但实际上正在构建应用程序,那么请预先警告您的应用程序在某些时候仍将无法构建或运行。请为愤怒的客户做好准备,他们会发现,例如,一旦他们升级操作系统,您的应用程序就会停止运行。你会为这个问题负责。
如果您合法地使用了一些恰好位于核心包中的代码,那么您拥有的最简单安全的替代方法是重新打包该代码。也就是说,将有问题的类移动到您自己的包命名空间中。这意味着它们永远不会与核心系统类发生冲突。JarJar 是一个可以帮助您完成这项工作的工具。如果你发现你做不到这一点,那么这表明你所走的道路最终会导致痛苦、痛苦、悲伤和悲叹。
[2015-04-19 09:08:37 - CyberGlider-android] Dx 1 错误;中止 [2015-04-19 09:08:37 - CyberGlider-android] 转换为 Dalvik 格式失败,错误 1
然后我还有第二个应用程序,它在我新安装的计算机上启动。所以我不必在此过程中更改android版本。当我尝试在 android 设备上运行该应用程序时,它会给我以下错误作为弹出窗口:
超出未处理的事件循环异常 GC 开销限制
无法执行 dex:超出 GC 开销限制 超出 GC 开销限制
控制台日志给了我这个
[2015-04-19 09:14:38 - Dex Loader] 无法执行 dex:超出 GC 开销限制 [2015-04-19 09:14:38 - PixelBoard_Launcher-android] 转换为 Dalvik 格式失败:无法执行 dex : 超出 GC 开销限制
eclipse给了我一个内存不足的错误并要求关闭自己。
启动过程也需要几分钟。
我首先想知道在 USB 调试模式下运行应用程序是否有一些限制。上面的应用程序是否可能无法在 USB 模式下运行,但如果我构建并注册 APK 它将工作。
否则,唯一的解决方案是从头开始重新编码所有内容。一次添加一个类,看看是什么导致程序失败。
有人知道我应该从哪里开始调查吗?