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有什么关系?
此问题我困扰了几天,没有进展,麻烦大家帮忙下。有任何思路,都可以告诉我。
多谢。
虚幻之黄昏
9 years, 5 months ago