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

时间:2011-08-30 17:46:14

标签: java android

我尝试将android.jar 包含到Java项目中,从Build Path中删除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);
    }
}

为什么ContentValues仅在Android环境中使用?

2 个答案:

答案 0 :(得分:18)

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

您无法创建任何引用将在Android设备外部运行的android.jar的项目。

答案 1 :(得分:7)

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

Robolectric项目http://robolectric.org/允许您在不使用设备的情况下对Android代码运行测试。他们在Maven http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.robolectric%22

上提供了真实版本

我使用android-all工件成功运行了大部分Android后端代码。

在你的特定情况下可能没有帮助,因为一些API仍然不在界限范围内,但对于java.lang.RuntimeException: Stub!的大多数其他情况,包括来自Robolectric的工件应该会有所帮助。