在阅读了无数关于如何使引用的库与 Android-Eclipse 一起工作的帖子后,我必须声明无法运行提供的示例井字游戏,该示例井字游戏分为两个项目TicTacToeLib(标记为库)和TicTacToeMain(使用 TicTacToeLib )
- 我首先将创建的 TicTacToeLib
导入Eclipse(文件->新建->其他->Android->Android 示例项目->TicTacToeLib) - 然后将创建的 TicTacToeMain
导入Eclipse (File->New->Other->Android->Android sample project->TicTacToeMain) - 按照Android 开发者网站上关于如何设置和引用库项目的说明进行操作
在这里我遇到了第一个障碍,因为一方面该站点提到<user-library>
应该使用,但TicTacToeMain的示例清单不包含任何<uses-library>
元素。
无论哪种方式,示例都不会运行。
没有<user-library>
元素,项目甚至无法编译:
如果我手动将 tictactoelib.jar 添加到构建路径 ( Add JARs...
),这不是Android 开发人员页面中指示步骤的一部分,错误就会消失,只有警告仍然存在。运行应用程序退出失败(“不幸的是井字游戏示例已停止”):
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!
我尝试了其他的东西,没有解决问题:
- 将目标井字游戏主版本改为 15,改为 10
- 在构建路径中添加 TicTacToeLib 作为用户库
- 为TicTacToeMain创建了一个libs文件夹,并复制了tictactoelib.jar,没有解决,使用Import...导入了tictactoelib.jar,没有加糖
我希望这个示例工作的原因,除了了解引用库的机制如何工作之外,我想创建一个复杂的应用程序,使用许多引用库,如果我不能让这个愚蠢的示例工作,那么我将无法到。
还有一点,将参考库项目添加到 TicTacToeMain:
它不粘,我按Apply
指示按,然后OK
。但是当我再次打开项目的属性时(不运行,不编译,只是重新打开):
也许这是真正的症状,但我不知道还能尝试什么。我使用 Eclipse 4.2.1,Android SDK 21.1,Java IDE 1.5.1
目标 Java 合规级别是 1.6
我尝试了几个 AVD 模拟器,都显示同样的问题。