一步一步Tic Tac Toe Android示例失败

时间:2013-04-08 16:36:09

标签: android eclipse

在阅读了有关如何使引用库与Android-Eclipse一起工作的大量帖子之后,我必须声明无法运行提供的样本tic-tac-toe,它被分成两个项目 TicTacToeLib (标记为库)和 TicTacToeMain (使用TicTacToeLib)

  1. 我首先导入创建了TicTacToeLib到Eclipse(文件 - > New->其他 - > Android-> Android示例项目 - > TicTacToeLib)
  2. 然后导入创建了TicTacToeMain到Eclipse(文件 - > New->其他 - > Android-> Android示例项目 - > TicTacToeMain)
  3. 按照Android Developers site上关于如何设置和引用库项目的说明进行操作
  4. 这里我遇到了第一个障碍,因为一方面网站提到应该使用<user-library>,但 TicTacToeMain 的示例清单不包含任何<uses-library>元素。
    无论哪种方式,示例都不会运行。

    如果没有<user-library>元素,项目甚至无法编译:

    enter image description here

    如果我手动将tictactoelib.jar添加到构建路径(Add JARs...),这是 Android开发者页面中指示步骤的一部分,则错误消失,只有警告仍然存在。运行应用程序退出失败(&#34; 不幸的是Tic Tac Toe示例已停止&#34;):

    04-08 16:05:24.762: E/dalvikvm(3741): Could not find class 'com.example.android.tictactoe.library.GameActivity', referenced from method com.example.android.tictactoe.MainActivity.startGame
    04-08 16:05:24.762: W/dalvikvm(3741): VFY: unable to resolve const-class 17 (Lcom/example/android/tictactoe/library/GameActivity;) in Lcom/example/android/tictactoe/MainActivity;
    04-08 16:05:24.767: D/dalvikvm(3741): VFY: replacing opcode 0x1c at 0x0002
    04-08 16:05:24.877: V/PhoneStatusBar(166): setLightsOn(true)
    04-08 16:05:24.937: D/gralloc_goldfish(3741): Emulator without GPU emulation detected.
    04-08 16:05:25.017: I/Process(89): Sending signal. PID: 3741 SIG: 3
    04-08 16:05:25.027: I/dalvikvm(3741): threadid=3: reacting to signal 3
    04-08 16:05:25.037: I/dalvikvm(3741): Wrote stack traces to '/data/anr/traces.txt'
    04-08 16:05:25.058: I/ActivityManager(89): Displayed com.example.android.tictactoe/.MainActivity: +1s368ms
    04-08 16:05:25.317: W/NetworkManagementSocketTagger(89): setKernelCountSet(10013, 0) failed with errno -2
    04-08 16:05:27.857: D/AndroidRuntime(3741): Shutting down VM
    04-08 16:05:27.857: W/dalvikvm(3741): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
    04-08 16:05:27.918: E/AndroidRuntime(3741): FATAL EXCEPTION: main
    04-08 16:05:27.918: E/AndroidRuntime(3741): java.lang.NoClassDefFoundError: com.example.android.tictactoe.library.GameActivity
    04-08 16:05:27.918: E/AndroidRuntime(3741):     at com.example.android.tictactoe.MainActivity.startGame(MainActivity.java:51)
    04-08 16:05:27.918: E/AndroidRuntime(3741):     at com.example.android.tictactoe.MainActivity.access$0(MainActivity.java:50)
    04-08 16:05:27.918: E/AndroidRuntime(3741):     at com.example.android.tictactoe.MainActivity$1.onClick(MainActivity.java:38)
    04-08 16:05:27.918: E/AndroidRuntime(3741):     at android.view.View.performClick(View.java:3511)
    04-08 16:05:27.918: E/AndroidRuntime(3741):     at android.view.View$PerformClick.run(View.java:14105)
    

    将以下行添加到TicTacToeMain清单:

    <uses-library android:name="com.example.android.tictactoe.library"/>
    

    甚至没有启动该应用:

    [2013-04-08 19:13:03 - TicTacToeMain] Android Launch!
    [2013-04-08 19:13:03 - TicTacToeMain] adb is running normally.
    [2013-04-08 19:13:03 - TicTacToeMain] Performing com.example.android.tictactoe.MainActivity activity launch
    [2013-04-08 19:13:03 - TicTacToeMain] Automatic Target Mode: using existing emulator 'emulator-5554' running compatible AVD 'Smartphone_ics'
    [2013-04-08 19:13:03 - TicTacToeMain] Uploading TicTacToeMain.apk onto device 'emulator-5554'
    [2013-04-08 19:13:03 - TicTacToeMain] Installing TicTacToeMain.apk...
    [2013-04-08 19:13:06 - TicTacToeMain] Installation error: INSTALL_FAILED_MISSING_SHARED_LIBRARY
    [2013-04-08 19:13:06 - TicTacToeMain] Please check logcat output for more details.
    [2013-04-08 19:13:06 - TicTacToeMain] Launch canceled!
    

    我尝试过其他事情,没有解决问题:

    • 将目标TicTacToeMain版本更改为15,为10
    • 在构建路径中添加了TicTacToeLib作为用户库
    • 为TicTacToeMain创建了一个libs文件夹,并复制了tictactoelib.jar,没有解决,导入了tictactoelib.jar uising Import ...,没有糖

    我希望这个示例工作的原因,除了强调如何使引用库的机制工作,我想创建一个复杂的应用程序,使用许多引用的库,如果我不能使这个愚蠢的样本工作,那么我将不能。

    还有一点,将参考库项目添加到TicTacToeMain:

    enter image description here

    它没有坚持,我按照指示按Apply,然后按OK。但是当我再次打开Project的属性时(没有运行,没有编译,只是重新打开):

    enter image description here

    也许这是真正的症状,但我不知道还有什么可以尝试。 我使用Eclipse 4.2.1,Android SDK 21.1,Java IDE 1.5.1
    目标Java合规性级别为1.6
    我尝试了几个AVD模拟器,都表现出同样的问题。

3 个答案:

答案 0 :(得分:0)

只是做一个新项目-android-&gt; Android Sample Project-&gt; Tictactoemain / lib。不要导入,只是一个新项目,它的工作原理。无论如何,右键单击项目名称 - &gt; Android工具 - &gt;修复项目属性,然后在菜单Project-&gt;中找到清洁。 也许另一个干净的工作区或新的模拟器设备(它是否正确设置?)?你有java,android sdk,adt等等吗?我没有这样的问题。

答案 1 :(得分:0)

关于参考图书馆

此错误表示您的TicTacToLib正在使用其他项目,以解决此错误:

  • 复制tictactolib

  • 删除使用tictactolib的项目并检查remove from the hard disk

  • 经过tictactolib到旧路径。

再试一次,错误就会消失。

注意:

ofc,您可以立即从正在使用它的项目中导入库而不删除该项目。

答案 2 :(得分:0)

这个伏都教过程最终得到了正确编译和运行的项目 我仍然不知道是什么造成了不同,所以如果你理解,请编辑这个并完成解释。

<强>过程
经过许多不合理的尝试后,我决定从TicTacToeLib项目中导出JAR文件,并将导出的JAR添加到TicTacToeMain项目中。这样做解决了ClassNotFound异常但创建了一个新问题:重复资源ID(see this post)。
所以我从libs目录和构建路径中删除了导入的JAR,只是通过绝望的行为我去了TicTacToeMain propeties-&gt; Android并添加了TicTacToeLib作为参考。我至少在这之前已经完成了4次而且它没有用。我不知道为什么我再试一次。
这一次,我注意到在我的愿景的边缘,Eclipse中的Package Explorer窗格中发生了一些变化。我发现在TicTactToeMain / gen下添加了一些东西。一个com.example.tictactoe.library文件夹,其中包含一个带有重新编号ID的R.java文件,该文件与主项目的ID不冲突。以前从未在我的其他尝试中添加参考库。所以我运行应用程序,这次它运行正常。
就像我说的那样,在这一点上,这对我来说是伏都教,我不知道我现在做了什么不同,而不是之前的4次尝试过。