没有合适的资源?快使用搜索试试~ 我知道了~
Android深入研究JNI详解.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 89 浏览量
2022-07-13
23:30:30
上传
评论
收藏 145KB PDF 举报
温馨提示
试读
17页
Android深入研究JNI详解.pdf
资源推荐
资源详情
资源评论
Java Native Interface (JNI) java Java
JNI Java (VM) Java
( CC++ )
1. .so
Android Java Java Dex Bytecode
Dalvik (VM: Virtual Machine) VM Android
Java Java C VM C
Java C VM Java
C JNI
Java (VM: Vitual Machine) C VM
Java VM (Load) C
System.loadLibrary(*.so );
Android MediaPlayer.java
java
1. public class MediaPlayer{
2. static {
3. System.loadLibrary( media_jni );
4. }
5. }
VM Android /system/lib/libmedia_jni.so *.so Java
*.so
2. *.so
JNI_OnLoad() JNI_OnUnload()
Android VM(Virtual Machine) System.loadLibrary()
C JNI_OnLoad()
(1) VM C JNI *.so JNI_OnLoad()
VM *.so JNI 1.1 JNI
JNI JNI 1.4 java.nio.ByteBuffer, JNI_OnLoad()
VM
(2) VM System.loadLibrary() JNI_OnLoad()
C JNI_OnLoad() C (Initialization)
Android /system/lib/libmedia_jni.so JNI_OnLoad()
java
1. //#define LOG_NDEBUG0
2. #define LOG_TAGMediaPlayer-JNI
3. jint JNI_OnLoad(JavaVM* vm, void* reserved)
4. {
5. JNIEnv* env = NULL;
6. jint result = -1;
7. if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
8. LOGE(ERROR: GetEnv failed\n );
9. goto bail;
10. }
11. assert(env != NULL);
12. if (register_android_media_MediaPlayer(env) < 0) {
13. LOGE("ERROR: MediaPlayer native registration failed\n");
14. goto bail;
15. }
16. if (register_android_media_MediaRecorder(env) < 0) {
17. LOGE("ERROR: MediaRecorder native registration failed\n");
18. goto bail;
19. }
20. if (register_android_media_MediaScanner(env) < 0) {
21. LOGE("ERROR: MediaScanner native registration failed\n");
22. goto bail;
23. }
24. if (register_android_media_MediaMetadataRetriever(env) < 0) {
25. LOGE("ERROR: MediaMetadataRetriever native registration failed\n");
26. goto bail;
27. }
28. /* success -- return valid version number */
29. result = JNI_VERSION_1_4;
30. bail:
31. return result;
32. }
JNI_VERSION_1_4 VM VM JNI
( )
java
1. if (register_android_media_MediaPlayer(env) < 0) {
2. LOGE("ERROR:MediaPlayer native registration failed\n");
3. goto bail;
4. }
(Native Function) VM
JNI_OnUnload() JNI_OnLoad() C JNI_OnLoad()
VM C JNI_OnUnload()
VM JNI_OnLoad() JNI_Unload() VM (Pointer)
java
1. jint JNI_OnLoad(JavaVM* vm, void* reserved) { }
2. jint JNI_OnUnload(JavaVM* vm, void* reserved){ }
JNI_OnLoad() VM JNIEnv env
java
1. jint JNI_OnLoad(JavaVM* vm, void* reserved){
2. JNIEnv* env = NULL;
3. jint result = -1;
4. if (vm->GetEnv ((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
5. LOGE(ERROR: GetEnv failed\n );
6. goto bail;
7. }
8. }
VM (Multi-threading)
JNI_OnLoad() JNIEnv
JNIEnv
Android VM
C JNIEnv
java
1. jint JNI_OnLoad(JavaVM* vm, void* reserved)
2. {
3. JNIEnv* env = NULL;
4. if (register_android_media_MediaPlayer(env) < 0) {
5. }
6. }
JNI_OnLoad() register_android_media_MediaPlayer(env) env
register_android_media_MediaPlayer()
register_android_media_MediaPlayer()
java
1. if ((*env)->MonitorEnter(env, obj) != JNI_OK) {
2. }
java
1. if ((*env)->MonitorExit(env, obj) != JNI_OK) {
2. }
3.registerNativeMethods()
Java VM VM *.so
VM
Android /system/lib/libmedia_jni.so
java
1. //#define LOG_NDEBUG0
2. #define LOG_TAGMediaPlayer-JNI
剩余16页未读,继续阅读
资源评论
- qq_369330232024-04-03内容与描述一致,超赞的资源,值得借鉴的内容很多,支持!
wxj15659998286
- 粉丝: 1
- 资源: 10万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功