你可能没有调用这个activity或者接收这个insent的权限(或可能没有被请求的权限),许多标准的Android activities,例如打一个电话,有权限指定它去阻止任意的应用程序发送或者接收请求. 参见 Security and Permissions(安全与许可)获得更多关于Permissions信息, manifest.permission获得关于Android限制的权限列表的信息.
如果你的工程无法编译,你应该注意如下症状,例如在res/
子目录新增加的资源并没有显示在R class中,模拟器没有启动,不能运行应用程序,
甚至在运行老版本的应用程序。
要解决这类的问题,首先尝试:
Window > Open Perspective > Other
Reset ADB
,试着再次运行你的应用程序如果上面的问题依旧没解决,你可以尝试下面的步骤:
当Eclipse和模拟器之间看起来没有任何的通讯,这样的状况可能有:在你按下运行后没有反应,模拟挂起等待一个调试连接,或者Eclipse报告没有找到模拟器或者shell 最经常出现的状况时当你点了运行,模拟启动了(或者已经在运行),但是应用程序没有启动。
你会发现下面这些步骤中的内容可以修复这个问题,通过实践或许你可以知道哪一步是你的问题需要做的, 但是从现在开始,最安全可靠的选择是按照下面的顺序执行:
adb kill-server
如果你使用的是一个比较老的JDK版本,会显示这个错误。请确任你使用的是JDK5 或者JDK6 的版本。
Android 系统要求所有的应用程序必须被签名,像签名你的应用程序描述的那样。 ApiDemos应用程序包含在SDK中,预装在模拟器上,所以条码已经被编译过,并签署上了一个私有的密钥。
如果你想在Eclipse/ADT或其他IDE内运行或修改任意一个ApiDemo apps,你仅仅要做的就是通过模拟器卸载预安装app版本。 如果你没有卸载预安装版本之前,尝试在你的IDE内运行ApiDemos apps,你会得到类似下面的错误信息:[2008-08-13 15:14:15 - ApiDemos] Re-installation failed due to different application signatures. [2008-08-13 15:14:15 - ApiDemos] You must perform a full uninstall of the application. WARNING: ...This will remove the application data! [2008-08-13 15:14:15 - ApiDemos] Please execute 'adb uninstall com.android.samples' in a shell.
这个错误的发生是因为,在这个例子中,你试图在模拟器上安装ApiDemos的拷贝版本,而这个拷贝拥有一个不同证书的签名( Android IDE工具将app用一个调试证书签名,而当前存在的版本已经被一个私有的证书签名)。 系统不允许这类重安装过程。
要解决这个问题,你需要完全卸载预安装版本,然后使用adb工具重新安装它。下面告诉你该怎么做:
emulator &
命令启动模拟器.adb uninstall com.android.samples
命令卸载预安装app.adb install <ApiDemos.apk所在路径>
命令重新请安装app. 如果你工作在Eclipse/ADT上,可以通过正常的方式编译和运行app。注意,如果你有多个模拟器实例正在运行,需要在你的卸载/安装命令中指定你的模拟器实例。这样你需要在命令后增加
-s <serialNumber>
, 例如:
adb -s emulator-5556 install
获取更多关于adb的信息, 参见Android调试桥文档。
你的开发机器使用不包含非阳历日历的区域设置,你在第一次编译和运行程序时可能会遇到很多问题。确切地说, 你会发现Android编译工具无法编译你的应用程序因为调试密钥已经过期。
问题出现是因为密钥和证书管理工具— 包含在JDK里,Android 编译工具内里使用— 未能正确处理非阳历区域设置,并创建正确日期。 更确切地说,可能生成调试密钥已经过期,结果存在编译错误。
如果你遇到这样的问题,下面这些步骤可以解决它:
debug.keystore
文件。在Linux/Mac OSX操作系统上, 文件存放在 ~/.android
。在Windows XP操作系统上, 文件存放在
C:\Documents and Settings\<user>\Local Settings\Application Data\Android
。在 Windows Vista上, 文件存放在
C:\Users\<user>\AppData\Local\Android
debug.keystore
文件到你开发机器的合适位置. 这个问题已经在Windows上验证通过,可能会应用到其他平台上。
更全的关于签名Android应用程序的信息,见 签名你的应用程序.
如果你使用Eclipse/ADT开发,你可以在你的应用程序中增加JUnit测试类。因此,当你视图把一个类作为一个JUnit测试类去运行,你会得到一个错误:
Error occurred during initialization of VM java/lang/NoClassDefFoundError: java/lang/ref/FinalReference
发生这个错误是因为在android.jar仅仅包含stub类,并没有包含全部Junit.*类的实现。
要增加一个JUnit类,你必须建立一个JUnit配置:.
按照这样的方式进行配置,现在你的JUnit测试类应该可以正常运行了。