在android sdk的sources目录下有EGLContext.java源文件,如下:
package javax.microedition.khronos.egl;
import javax.microedition.khronos.opengles.GL;
public abstract class EGLContext
{
private static final EGL EGL_INSTANCE = new com.google.android.gles_jni.EGLImpl();
public static EGL getEGL() {
return EGL_INSTANCE;
}
public abstract GL getGL();
}
然而在android.jar包中,反编译EGLContext.class,却是如下代码:
package javax.microedition.khronos.egl;
import javax.microedition.khronos.opengles.GL;
public abstract class EGLContext
{
public EGLContext()
{
throw new RuntimeException("Stub!"); }
public static EGL getEGL() { throw new RuntimeException("Stub!");
}
public abstract GL getGL();
}
所以我不解:在android.jar包中的EGLContext.class里面,getEGL()函数没做任何事情啊,
那为什么单步调试的时候,getEGL()会返回一个确切的值呢?而且还可以通过这个值,调用eglGetDisplay()呢?
------解决方案--------------------
public static EGL getEGL() {
return EGL_INSTANCE;
}
getEGL方法返回了一个EGL_INSTANCE变量 而EGL_INSTANCE = new com.google.android.gles_jni.EGLImpl(); 这句是通过底层jni获得EGL的一个实现类的实例~~~ 亲,记得给分哦~
------解决方案--------------------
反编译的出来的代码,是由反编译工具解密能力而获得 部分反编译工具,编译出来的源码是有误差 缺省的.. 较强大的反编译工具,可以直接获得源码本身...