问:为什么源码中很多方法就一行throw new RuntimeException("Stub!")?
- 使用的Android Studio或者其他IDE看jar包的源码的时候,编译工具只让你看到方法签名,不让你看方法的实现;
- Android SDK自带的Source源码包很小,并没有包括所有的Android Framework的源码,仅仅提供给应用开发参考用,一些比较少用的系统类的源码并没有给出,所以有时候你会看到throw new RuntimeException("Stub!")。
- 此外,在IDE里看源码的时候,有时候一些方法或者类会出现报红(找不到)的情况:这是因为这些方法或者类是被Android SDK隐藏的,出于安全或者某些原因,这些API不能暴露给应用层的开发者,所以编译完成的android.jar包里会把这些API隐藏掉,而我们的Android项目是依赖android.jar的,查看源码的时候,IDE会自动去android.jar找对应的API,自然会找不到。当然,这些API在ROM中是实际存在的,有些开发者发现了一些可以修改系统行为的隐藏API,在应用层通过反射的方式强行调用这些API执行系统功能,这种手段也是一种HACK。