值得一提的是,反射确实是个很强大很灵活的东西, 借助哈希、红黑树等高度优化的数据结构让反射的代价降到了极低,通过反射+JNI, 可以做到几乎任何你想做的东西。
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *unused)
{
JNIEnv *env;
jvm->GetEnv(reinterpret_cast<void **>(&env), JNI_VERSION_1_6);
jclass clsContextImpl = env->FindClass("android/app/ContextImpl");
jfieldID mPackageInfoFieldID = env->GetFieldID(clsContextImpl, "mPackageInfo", "Landroid/app/LoadedApk;");
jobject mPackageInfo = env->GetObjectField(ActivityThread::getSystemContext(env), mPackageInfoFieldID);
jclass mPackageInfoClass = env->GetObjectClass(mPackageInfo);
jfieldID mClassLoaderFieldID = env->GetFieldID(mPackageInfoClass, "mClassLoader", "Ljava/lang/ClassLoader;");
jobject mClassLoader = env->GetObjectField(mPackageInfo, mClassLoaderFieldID);
LOGI("original loader = %p", mClassLoader);
jclass clsS