Android frameworksbasecorejavaandroid native methodJava Camera native frameworksbasecorejavaandroidhardwareCam era
■Androidのパッケージの場所 \frameworksbasecorejavaandroid
■native methodを持つJavaファイル Cameraを例に見てみてみましょう。 native の説明にあった通りです。 \frameworksbasecorejavaandroidhardwareCam era. java 178行目 public native final void start. Preview();
■native methodの実体を持つC言 語ファイル \frameworksbasecorejniandroid_hardware_Ca mera. cpp 311行目 status_t Camera. Service: : Client: : start. Preview()
■Camera classのメソッドテーブル \frameworksbasecorejniandroid_hardware_Camera. cpp 450行目(同じファイル) static JNINative. Method cam. Methods[] = { { "start. Preview", "()V", (void *)android_hardware_Camera_start. Preview },
■メソッドをJNIに登録している箇所 \frameworksbasecorejniandroid_hardware_Camera. cpp 538行目(同じファイル) // Register native functions return Android. Runtime: : register. Native. Methods(env, "android/hardware/Camera", cam. Methods, NELEM(cam. Methods));
■VMからJNIを使われるところ dalvikvmNative. c 65行目からの関数 void dvm. Resolve. Native. Method(const u 4* args, JValue* p. Result, const Method* method, Thread* self) func = dvm. Lookup. Internal. Native. Method(method); ~ ~ ~ dfunc(args, p. Result, method, self); return; } ★85行目 ★103行目 dvm. Lookup. Internal. Native. Method 85行目で発見された関数は dfunc(args, p. Result, method, self); 103行目で実行されてます。
- Slides: 19