Download presentation
Presentation is loading. Please wait.
1
Androidソースコード公開後のJNI
株式会社 ブリリアントサービス 代表取締役 杉本 礼彦
2
■JNIはJavaとネイティブ(Javaより下の層、C言語やC++で書かれる)と連携する為に整備された仕組みです。
3
■なぜJNI? ・ネイティブに存在する資産を使えます。 ・速度が速い。
・ネイティブに存在する資産を使えます。 ・速度が速い。 ・現在のAndroidに存在しないAPIを拡張するとなると必須の技術です。 ・ AndroidのパッケージもJNIで実現されている。
4
■ハンズオンと言いながらJNIの使い方は説明しません。
使い方の参考になる資料は 2009年1月19日 日本Androidの会の勉強会で JNIによるAndroid API拡張 株式会社GClue 佐々木さん
5
■ここではAndroidのパッケージのソースコードを例にJNIの仕組みについてお話します。
ソースコードを持っている方は一緒に見ていただけると良いと思います。
6
■native という予約語 abstractとの違い
abstractもnativeも型のみ宣言(クラスやメソッドが実装されていない )と言う意味では同じだが、実体の場所が異なる。abstractは 派生クラスで実装。では native は?
7
■Androidのパッケージの場所 \\frameworks\base\core\java\android
8
■native methodを持つJavaファイル
Cameraを例に見てみてみましょう。 native の説明にあった通りです。 \\frameworks\base\core\java\android\hardware\Camera.java 178行目 public native final void startPreview();
9
■native methodの実体を持つC言語ファイル
\\frameworks\base\core\jni\android_hardware_Camera.cpp 311行目 status_t CameraService::Client::startPreview()
10
■Camera classのメソッドテーブル
\\frameworks\base\core\jni\android_hardware_Camera.cpp 450行目(同じファイル) static JNINativeMethod camMethods[] = { { "startPreview", "()V", (void *)android_hardware_Camera_startPreview },
11
■メソッドをJNIに登録している箇所 \\frameworks\base\core\jni\android_hardware_Camera.cpp 538行目(同じファイル) // Register native functions return AndroidRuntime::registerNativeMethods(env, "android/hardware/Camera", camMethods, NELEM(camMethods));
12
■VMからJNIを使われるところ dalvik\vm\Native.c 65行目からの関数
void dvmResolveNativeMethod(const u4* args, JValue* pResult, const Method* method, Thread* self) func = dvmLookupInternalNativeMethod(method); ★85行目 ~ ~ ~ dfunc(args, pResult, method, self); ★103行目 return; } dvmLookupInternalNativeMethod 85行目で発見された関数は dfunc(args, pResult, method, self); 103行目で実行されてます。
13
■nativeの実体は? nativeの予約語で宣言された実体はネイティブ(C言語やC++で書かれた部分)にあるということです。
14
■もちろんJNIを使って拡張したインターフェースはそのプラットフォームでしか動きません。
15
■JNIの話 おしまい
16
■広報 技術評論社 SoftwareDesign 2009年3月号 記事が載りました。
17
■広報 ・Androidの自社端末開発中
18
■広報 次はかっこいい端末を作りたいのでオープンハードウェアで協力者募集!(予定)
19
ありがとうございました
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.