我正在尝试使用these instructions在dalvikvm上运行一个简单的命令行java应用程序。我以root身份运行,因此它不是权限问题。
以下是应用程序代码:
import android.os.SystemClock;
/**
* Command that sends key events to the device, either by their keycode, or by
* desired character output.
*/
public class MWE {
public static void main(String[] args) {
System.out.println(SystemClock.uptimeMillis());
}
}
当我在dalvikvm上运行时,收到以下错误消息:
java.lang.NoClassDefFoundError: android.os.SystemClock
at MWE.main(MWE.java:8)
at dalvik.system.NativeStart.main(Native Method)
这是我运行的命令,适用于上述应用程序的正常Hello World版本。
/system/bin/dalvikvm -Xbootclasspath:/system/framework/core.jar -classpath /data/local/tmp/MWE.jar MWE
我目前的结论是android.os.SystemClock
不住在core.jar
内。我推测性地尝试添加framework.jar
和framework-res.jar
,但我也遇到了相同的错误。
/system/framework
下的哪个坛子持有班级android.os.SystemClock
?答案 0 :(得分:1)
在我的设备(HTC One M8)上,android.os.SystemClock位于/system/framework/framework3.jar中。我认为框架被分成多个jar,因为classes.dex上有65k方法限制。 android.os.SystemClock可能在不同的Android设备上的不同jar中。
我曾经找到android.os.SystemClock所在的步骤:
adb pull /system/framework/<filename>.jar
然后我将classes.dex反编译为一个带DexToJar的jar并使用JD-GUI查看jar中的包(你可以将它打开为ZIP文件,jd-gui不是必需的仅限Windows)