在Java项目-RuntimeException存根中使用android.jar?

在Java项目-RuntimeException存根中使用android.jar?,java,android,Java,Android,我试图将android.jar包含到Java项目中,从构建路径中删除JRE并运行此代码。它抛出运行时异常。为什么? Exception in thread "main" java.lang.RuntimeException: Stub! at android.content.ContentValues.<init>(ContentValues.java:5) at JarTest.main(JarTest.java:5) public class JarTest {

我试图将android.jar包含到Java项目中,从构建路径中删除JRE并运行此代码。它抛出运行时异常。为什么?

Exception in thread "main" java.lang.RuntimeException: Stub!
    at android.content.ContentValues.<init>(ContentValues.java:5)
    at JarTest.main(JarTest.java:5)

public class JarTest {
    public static void main(final String[] args) {
        final ContentValues values = new ContentValues();
        values.put("test", "test");
        System.out.println(values);
    }
}
线程“main”java.lang.RuntimeException中的异常:存根! 位于android.content.ContentValues。(ContentValues.java:5) 位于JarTest.main(JarTest.java:5) 公共类测试{ 公共静态void main(最终字符串[]args){ 最终ContentValues=新ContentValues(); 值。放置(“测试”、“测试”); System.out.println(值); } }
为什么ContentValues只在Android环境中使用?

SDK中的Android.jar只包含SDK类的存根实现,而不是设备(或模拟器)上的真实实现。jar只提供类元数据,以便引用SDK类的应用程序能够正确构建


您不能创建任何引用android.jar的项目,该项目将在android设备外部运行。

android.jar仅包含存根,足以让您构建项目,正如@antlersoft所解释的那样

Robolectric项目允许您在不使用设备的情况下对Android代码运行测试。他们在Maven上有真正的构建

通过使用这个工件,我已经成功地运行了大部分Android后端代码


在您的特定情况下可能没有帮助,因为有些API仍然超出范围,但对于
java.lang.RuntimeException:Stub包括来自Robolectric的工件应该会有所帮助。

@Emerald214指出,JRE类必须在您的类路径中,并且它们不能是存根,但特定于android的类是存根。它们是一个框架,你可以使用java IDE编写和编译你的应用程序,但代码并不存在,可能其中一些甚至不是用java编写的。有人知道我在哪里可以找到真正的版本吗?@Janus Troselsen这是一个只在设备上运行的自定义二进制文件。我不会浪费时间尝试测试Android的代码,而是假设它可以工作,然后模拟并存根它。如果您必须测试输出(我可以理解为什么您希望至少确保他们的代码满足您的期望),那么请围绕这些Android API的输出编写一组功能测试,您可以在设备或模拟器上运行这些API。