`

学习深入理解android第一章

 
阅读更多

本博客内容来自《深入理解android卷一》

 

android分为三层:java层,JNI层,Native层

 

这里以MediaScanner为例:

java层:

 

public class MediaScanner
{
      staic{
            System.loadLibrary("media_jni");
            native_init();//调用native_init函数
      }
     ...
     public void scanDirectories(String[] directories,String volumnName){
     ......
     }
     //申明一个native函数。native为java的关键字,表示它将由jni层完成
     private static native final void native_init();
     private native void processFile(String path,String mimeType,MediaScannerClient client);
}

 JNI层:

 

代码位置:android_media_MediaScanner.cpp

 

static void android_media_MediaScanner_native_init(JNIEnv *env)
{
    jclass clazz;
   clazz = env->FindClass("android/media/MediaScanner");//java层文件代码路径
    ...
   fields.context = env->GetFieldID(clazz,"mNativeContext","I");
   ...
   return;
}
//这个函数是processsFile的JNI层实现
static void android_media_MediaScanner_processFile(JNIEnv *env,jobject thiz,jstring path,jstring mimetype,jobject client){
MediaScanner *mp = (MediaScanner *)env->GetIntField(thiz,fields.contenxt);
...
const char *pathStr = env->GetStringUTFChars(path,NULL);
...
if(mimeType){
   env->ReleaseStringUTFChars(mimeType,mimeTypeStr);
}

}

 

问题:native_init();层如何知道android_media_MediaScanner_native_init的位置

android.media.MediaScanner.native_init换算成android_media_MediaScanner_native_init

答:一共有两种方式注册

1、静态方法

 先编写JAVA代码,然后编译生成.class文件

使用javah -o output packagename.classname生成的output.h文件中,就申明了JNI函数

2、动态注册

在libmedia_jni.so实现JNI_OnLoad

jclass clazz = (*env)->FindcClass(env,className);

(*env)->RegisterNatives(env,clazz,gMethods,numMethods);

jint JNI_OnLoad(JavaVm *vm,void * reserved)

{

    JNI

}

 

 

分享到:
评论

相关推荐

    深入理解Android卷1全

    深入理解Android 卷1 不是扫描版的,是全版电子书的,非PDF,可编辑,各种阅览器以打开!包括书签和同步目录! 第1章 阅读前的准备工作 / 1 1.1 系统架构 / 2 1.1.1 Android系统架构 / 2 1.1.2 本书的架构 / 3 1.2 ...

    深入理解Android 卷1.pdf

    一本以情景方式对Android的源代码进行深入分析的书。内容广泛,以对Framework层的分析为主,兼顾Native层和Application层;...通过对本书的学习,大家将能更深刻地理解Android系统,从而自如应对实际开发中遇到的难题

    深入理解Android:卷三

    根据提供的文件信息,下面详细阐述了《深入理解Android:卷三》中部分章节的知识点: 标题:“深入理解Android:卷三” 描述:“第一章:开发环境部署” 知识点: 开发环境部署是进行Android应用开发之前的准备工作...

    深入理解Android:卷2

    深入理解Android:卷2》是一本以情景方式对Android的源代码进行深入分析的书。内容广泛,以对Framework层的分析为主,兼顾Native层和Application层;分析深入,每一部分源代码的分析都力求透彻;针对性强,注重实际...

    深入理解Android II样章

    1. **第一章:准备工作** - Android 4.0源码的下载与编译 - Eclipse开发环境的搭建 - Android系统进程(system_process)的调试技巧 2. **第二章:Java Binder与MessageQueue** - Java Binder机制的深入分析 ...

    深入理解Android卷1

    深入理解Android:卷I》是一本以情景方式对Android的源代码进行深入分析的书。内容广泛,以对Framework层的分析为主,兼顾Native层和Application层;分析深入,每一部分源代码的分析都力求透彻;针对性强,注重实际...

    深入理解android 卷II 目录

    - **本章小结**:对第一章所讲的内容进行了概括性总结,强调了搭建好开发环境对于深入研究Android系统的重要性。 #### 第2章:深入理解JavaBinder和MessageQueue - **Java层中的Binder架构分析**: - **Binder...

    深入理解android-WIFI、NFC、GPS.pdf

    《深入理解Android:Wi-Fi、NFC和GPS卷》是一本全面覆盖Android平台上三大关键模块的专业书籍,不仅适合Android系统工程师、应用开发工程师和BSP开发工程师阅读,也为那些希望深入了解移动通信技术的读者提供了宝贵...

    深入理解Android:卷I--详细书签版

    深入理解Android:卷I(51CTO网站“2011年度最受读者喜爱的原创IT技术图书”) 基本信息 作者: 邓凡平 出版社:机械工业出版社 ISBN:9787111357629 上架时间:2011-9-13 出版日期:2011 年9月 开本:16开 页码:488...

    第一章,阅读前的准备 深入理解Android(卷I)

    "深入理解Android(卷I)"是一个系列教程,旨在帮助开发者建立起对Android操作系统深层次的理解。 首先,我们来谈谈"源码"这个标签。在Android开发中,源码分析是一个重要的环节,因为通过阅读源码,开发者可以更深入...

    深入理解 Android Telephony原理剖析与最佳实践

    《深入理解Android:Telephony原理剖析与最佳实践》为经典畅销书“深入理解Android”系列新作,从源码角度深入解析Telephony的架构设计与实现原理,深刻揭示Android系统的通信机制! 本书是“深入理解Android”系列...

    深入理解android 卷II 第7章

    ### 深入理解Android卷II 第7章:ContentProvider #### 一、ContentProvider概述与原理 在Android系统中,ContentProvider作为一种重要的组件之一,主要用于处理应用间的数据共享问题。它提供了一套标准接口来访问...

    深入理解Android卷 III 的SampleWindow

    《深入理解Android卷 III》是Android开发者们的重要参考资料,它深度剖析了Android系统的内部机制。在这一卷中,第四章的SampleWindow是一个关键的概念,它为我们揭示了Android窗口管理的奥秘。SampleWindow是一个...

    android软件安全与逆向分析chapter5

    在Android软件安全与逆向分析的第五...这一章的内容旨在帮助读者建立对Android应用安全性的全面理解,并掌握逆向分析的基本技能。无论是为了开发更安全的应用,还是为了检测和防御恶意软件,这些知识都将提供宝贵指导。

Global site tag (gtag.js) - Google Analytics