您的位置:华清远见教育科技集团 >> Android资料 >> Dalvik虚拟机原生方法的注册  
 
Dalvik虚拟机原生方法的注册
分享到:

在创建Dalvik虚拟机的过程中,会调用dvmCreateJNIEnv()函数为当前进程的主线程配置运行环境,初始化可能会调用的原生方法相关的初始化配置位于gNativeInterface变量中。在配置好运行环境后,接着就调用dvmStartup()函数创建Dalvik虚拟机,并完成相关组件如内存跟踪器(Alloc-Tracker)、垃圾回收器(Garbage Collector)、主线程、DEX优化器(DEX optimizer)、Dalvik类校验器(Dalvik classfile verification)、缓冲(1024bit)、bootstrap 类加载器(bootstrap class loader)、java.lang.Thread等线程,java.lang.Thread等异常类、Hash表、原生代码加载器(native code loader)、Dalvik原生类(gDvmNativeMethodSet)、java JNI、java/lang/reflect/AccessibleObject等映射类,Profile等。

注册原生方法的过程主要是通过AndroidRuntime::startReg()在AndroidRuntime:: register_jni_procs()中完成的。注册原生方法的具体过程如下:

代码1-1 注册原生方法

static const RegJNIRec gRegJNI[]={
        REG_JNI(register_android_debug_JNITest),
        REG_JNI(register_com_android_internal_os_RuntimeInit),
        REG_JNI(register_android_os_SystemClock), //系统时钟
        REG_JNI(register_android_util_EventLog), //事件日志
        REG_JNI(register_android_util_Log), //调试Log
        REG_JNI(register_android_util_FloatMath),
        REG_JNI(register_android_text_format_Time),
        REG_JNI(register_android_pim_EventRecurrence),
        REG_JNI(register_android_content_AssetManager), //断言管理器
        REG_JNI(register_android_content_StringBlock),
        REG_JNI(register_android_content_XmlBlock),
        REG_JNI(register_android_emoji_EmojiFactory),
        REG_JNI(register_android_security_Md5MessageDigest),
        REG_JNI(register_android_text_AndroidCharacter),
        REG_JNI(register_android_text_KeyCharacterMap), //按键映射
        REG_JNI(register_android_os_Process),
        REG_JNI(register_android_os_Binder), //IBinder通信
        REG_JNI(register_android_os_Hardware),
        REG_JNI(register_android_view_Display),
        REG_JNI(register_android_nio_utils),
        REG_JNI(register_android_graphics_PixelFormat),
        REG_JNI(register_android_graphics_Graphics),
        REG_JNI(register_android_view_Surface), //渲染管理
        REG_JNI(register_android_view_ViewRoot),
        REG_JNI(register_com_google_android_gles_jni_EGLImpl), //OpenGL ES
        REG_JNI(register_com_google_android_gles_jni_GLImpl),
        REG_JNI(register_android_graphics_Bitmap), //2D图像
        REG_JNI(register_android_graphics_BitmapFactory),
        REG_JNI(register_android_graphics_Camera),
        REG_JNI(register_android_graphics_Canvas),
        REG_JNI(register_android_graphics_ColorFilter),
        REG_JNI(register_android_graphics_DrawFilter),
        REG_JNI(register_android_graphics_Interpolator),
        REG_JNI(register_android_graphics_LayerRasterizer),
        REG_JNI(register_android_graphics_MaskFilter),
        REG_JNI(register_android_graphics_Matrix), //矩阵
        REG_JNI(register_android_graphics_Movie), //动画
        REG_JNI(register_android_graphics_NinePatch), // NinePatch
        REG_JNI(register_android_graphics_Paint),
        REG_JNI(register_android_graphics_Path),
        REG_JNI(register_android_graphics_PathMeasure),
        REG_JNI(register_android_graphics_PathEffect),
        REG_JNI(register_android_graphics_Picture),
        REG_JNI(register_android_graphics_PorterDuff),
        REG_JNI(register_android_graphics_Rasterizer),
        REG_JNI(register_android_graphics_Region),
        REG_JNI(register_android_graphics_Shader),
        REG_JNI(register_android_graphics_Typeface),
        REG_JNI(register_android_graphics_Xfermode),
        REG_JNI(register_com_android_internal_graphics_NativeUtils),
        REG_JNI(register_android_database_CursorWindow),
        REG_JNI(register_android_database_SQLiteDatabase), //SQL
        REG_JNI(register_android_database_SQLiteDebug),
        REG_JNI(register_android_database_SQLiteProgram),
        REG_JNI(register_android_database_SQLiteQuery),
        REG_JNI(register_android_database_SQLiteStatement),
        REG_JNI(register_android_os_Debug),
        REG_JNI(register_android_os_Exec),
        REG_JNI(register_android_os_FileObserver), //文件系统
        REG_JNI(register_android_os_FileUtils),
        REG_JNI(register_android_os_ParcelFileDescriptor),
        REG_JNI(register_android_os_Power), //电源管理
        REG_JNI(register_android_os_StatFs),
        REG_JNI(register_android_os_SystemProperties),
        REG_JNI(register_android_os_UEventObserver),
        REG_JNI(register_android_net_LocalSocketImpl),
        REG_JNI(register_android_net_NetworkUtils), //网络管理
        REG_JNI(register_android_net_wifi_WifiManager), //WIFI管理器
        REG_JNI(register_android_os_MemoryFile),
        REG_JNI(register_com_android_internal_os_ZygoteInit), //Zygote虚拟机
        REG_JNI(register_android_hardware_Camera),
        REG_JNI(register_android_hardware_SensorManager), //传感器管理器
        REG_JNI(register_android_media_AudioRecord), // AudioRecord
        REG_JNI(register_android_media_AudioSystem), // AudioSystem
        REG_JNI(register_android_media_AudioTrack), // AudioTrack
        REG_JNI(register_android_media_JetPlayer),
        REG_JNI(register_android_media_ToneGenerator),
        REG_JNI(register_android_opengl_classes), //3D渲染
        REG_JNI(register_android_bluetooth_Database), //BT
        REG_JNI(register_android_bluetooth_HeadsetBase),
        REG_JNI(register_android_bluetooth_BluetoothAudioGateway),
        REG_JNI(register_android_bluetooth_RfcommSocket),
        REG_JNI(register_android_bluetooth_ScoSocket),
        REG_JNI(register_android_server_BluetoothDeviceService),
        REG_JNI(register_android_server_BluetoothEventLoop),
        REG_JNI(register_android_server_BluetoothA2dpService),
        REG_JNI(register_android_message_digest_sha1),
        REG_JNI(register_android_ddm_DdmHandleNativeHeap),
        REG_JNI(register_android_util_Base64),
        REG_JNI(register_android_location_GpsLocationProvider),
    };

这些原生方法均为Java与底层原生服务的接口,只有对原生方法进行注册,Dalvik虚拟机才能具备利用底层原生服务的能力。

 更多相关文章

·Android Dalvik虚拟机启动
·Android服务管理器守护进程
·Android init.rc脚本语
·Android开机启动过程
·Android进程的生命周期