Android应用如何加载framework的Class到自己的JVM?应用JVM与Zygote JVM是什么关系?

//在android.os.Build.java中添加如下方法。
static int count = 0;
static String MD5 = getMd5();
static String getMd5(){
       count++;
       return "" + count + getrandomStr();
}

在应用中,通过Build.MD5访问,写了3个测试程序,读的值中count都是1,但随机字符串有时相同,有时不同。

对于此现象我理解:
相同的情况: Build.java加载到Zygote的JVM中的时候已经初始化了。后面的App 通过Fork获取了与Zygote一样的JVM 的Build.class。并没有重新加载,所以随机字符串是一样的。

不相同的情况:app的JVM中没有Build.class,Build.java被重新加载了,MD5也就重新被赋值了,所以count依然是1,但随机数变化了。

1 请大家帮忙看看,分析的是不是对?
2 以上的不同造成的原因是什么? APP是如何处理Framework.jar中的class加载问题的? APP的JVM与Zygote的JVM有什么关系?

此问题我困扰了几天,没有进展,麻烦大家帮忙下。有任何思路,都可以告诉我。
多谢。

阅读 3.7k
1 个回答

不会吧,Android JVM高手在哪里~~~~

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题