我尝试将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环境中使用?
答案 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的工件应该会有所帮助。