在阅读了有关如何使引用库与Android-Eclipse一起工作的大量帖子之后,我必须声明无法运行提供的样本tic-tac-toe,它被分成两个项目 TicTacToeLib (标记为库)和 TicTacToeMain (使用TicTacToeLib)
这里我遇到了第一个障碍,因为一方面网站提到应该使用<user-library>
,但 TicTacToeMain 的示例清单不包含任何<uses-library>
元素。
无论哪种方式,示例都不会运行。
如果没有<user-library>
元素,项目甚至无法编译:
如果我手动将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:
它没有坚持,我按照指示按Apply
,然后按OK
。但是当我再次打开Project的属性时(没有运行,没有编译,只是重新打开):
也许这是真正的症状,但我不知道还有什么可以尝试。
我使用Eclipse 4.2.1,Android SDK 21.1,Java IDE 1.5.1
目标Java合规性级别为1.6
我尝试了几个AVD模拟器,都表现出同样的问题。
答案 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
到旧路径。
再试一次,错误就会消失。
答案 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次尝试过。