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

eme*_*ieu 10 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

ant*_*oft 18

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

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


sou*_*kah 7

@antlersoft解释说,android.jar只包含存根,足以让你构建你的项目.

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的工件的情况应该有所帮助.