当前位置: 首页 > news >正文

网站专题页设计环保部网站官网建设项目限批办法

网站专题页设计,环保部网站官网建设项目限批办法,养一个空壳公司的好处,wordpress 腾讯视频插件在android代码中,经常可以看到native方法,需要查看其对应的C方法,这些方法是一一对应的,对应关系是在jni注册里关联起来的。 比较直观的是这样的例子, Parcel.java //Java层的方法里调用了native方法nativeWriteInt…

在android代码中,经常可以看到native方法,需要查看其对应的C++方法,这些方法是一一对应的,对应关系是在jni注册里关联起来的。

比较直观的是这样的例子,

Parcel.java

//Java层的方法里调用了native方法nativeWriteInt(mNativePtr, val)

    public final void writeInt(int val) {

        nativeWriteInt(mNativePtr, val);

    }

//Java层中声明了native方法

    private static native void nativeWriteInt(long nativePtr, int val);

    private static native void nativeWriteLong(long nativePtr, long val);

以 nativeWriteInt方法为例,进而会调用到frameworks/base/core/jni/android_os_Parcel.cpp中的android_os_Parcel_writeInt方法。

搜nativeWriteInt,可以看到{"nativeWriteInt",            "!(JI)V", (void*)android_os_Parcel_writeInt}

以{"nativeWriteInt",            "!(JI)V", (void*)android_os_Parcel_writeInt}为例,

nativeWriteInt是Java层Parcel.java中声明的函数名称,而android_os_Parcel_writeInt是JNI层android_os_Parcel.cpp中对应的函数。

"!(JI)V"是函数签名,对函数的参数和返回值进行标记,采用了函数签名,即便是重载了的同名函数,都可以通过函数签名来进行区分。

通过这样的映射处理,Java层就和Native层关联起来了。

通过RegisterMethodsOrDie(env, kParcelPathName, gParcelMethods, NELEM(gParcelMethods))调用最终来实现了JNI方法的关联。android.os.Parcel类中的nativeWriteInt方法对应着android_os_Parcel.cpp中的static void android_os_Parcel_writeInt(JNIEnv* env, jclass clazz, jlong nativePtr, jint val)方法。

static void android_os_Parcel_writeInt(JNIEnv* env, jclass clazz, jlong nativePtr, jint val) {

    Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);

    if (parcel != NULL) {

        const status_t err = parcel->writeInt32(val);

        if (err != NO_ERROR) {

            signalExceptionForError(env, clazz, err);

        }

    }

}

android_os_Parcel_writeInt方法中又调用了C++层的Parcel类,进而通过JNI实现了Java层对C++层方法的调用。

gParcelMethods是JNINativeMethod类型的数组,存储了Java层函数和native函数的映射关系。

还有一种不太直观的描述,

比如libcore/ojluni/src/main/java/java/net/NetworkInterface.java

里的

393    private static NetworkInterface[] getAll() throws SocketException {
394        // Group Ifaddrs by interface name.
395        Map<String, List<StructIfaddrs>> inetMap = new HashMap<>();
396
397        StructIfaddrs[] ifaddrs;
398        try {
399            ifaddrs = Libcore.os.getifaddrs();
400        } catch (ErrnoException e) {
401            throw e.rethrowAsSocketException();
402        }

这里查找getifaddrs方法的实现,找到Libcore.java

继续找到libcore/luni/src/main/java/libcore/io/Linux.java

    public native StructIfaddrs[] getifaddrs() throws ErrnoException;

是个native方法,具体的实现是哪里呢,

可以搜到

libcore/luni/src/main/native/libcore_io_Linux.cpp

   NATIVE_METHOD(Linux, getifaddrs, "()[Landroid/system/StructIfaddrs;"),

这个跟上面的不一样,看不出来对应的方法,

原来,NATIVE_METHOD是个宏,

在libnativehelper/include/nativehelper/JniConstants.h

里有 


82#define NATIVE_METHOD(className, functionName, signature) \
83    { #functionName, signature, reinterpret_cast<void*>(className ## _ ## functionName) }

这个宏里进行了字符串拼接,展开这个宏,

{ "getifaddrs", "()[Landroid/system/StructIfaddrs;", reinterpret_cast<void*>(Linux_getifaddrs) }

 所以,是Linux_getifaddrs方法

1517static jobjectArray Linux_getifaddrs(JNIEnv* env, jobject) {
1518    static jmethodID ctor = env->GetMethodID(JniConstants::structIfaddrs, "<init>",
1519            "(Ljava/lang/String;ILjava/net/InetAddress;Ljava/net/InetAddress;Ljava/net/InetAddress;[B)V");
1520    if (ctor == NULL) {
1521        return NULL;

http://www.yayakq.cn/news/243862/

相关文章:

  • 盟族网站建设上海市干部公示
  • 网站开发 后端东莞网络优化调查公司
  • 中山公众号平台商场网站建设郑州汉狮做网站好不
  • 网站制作合同网站管理后台源码
  • 网网站设计网网站建设报价明细
  • 网站建设资金管理办法网站建设吴中区
  • 芜湖酒店网站建设郑州做网站zzmshl
  • 如何创建网站页面宣传片制作公司业务
  • 网站语言那种好建设网站的虚拟机配置
  • 商业网站的后缀asp.net做的网站模板下载
  • 大学生电子商务专业网站设计3D特效做首页的网站
  • 想建立自己的网站软件上传到那个网站做宣传
  • 做网站图怎样让网站显示网站建设中
  • 做网站连接数据库怎么显示图片丰县徐州网站开发
  • 建设网站的注意事项网站建设怎么样找客户快
  • 学什么可以做视频网站精品源码分享免费下载
  • 做简历最好的网站购物分享网站怎么做的
  • 网站建设中 很快回来eclipse开发安卓app
  • 广州建设网站公司哪个济南兴田德润有活动吗国外学校网站设计
  • 手机版网站嵌入代码如何在手机上开自己的网站
  • 周杰伦做的广告网站自己做网站需要做服务器
  • 怎么做电商网站php网站代做是什么意思
  • 深圳网站制作 公司南宁网吧
  • 濮阳免费网站建设定制微信小程序多少钱
  • 印刷网站模板下载wordpress网站关键词
  • 网站建设方向课程为什么要选择做花卉网站
  • 世界经理人网站手机版中华住房与城乡建设厅网站
  • wordpress怎么更换主题灰色行业seo
  • 济南快速网站制作公司朝阳专业网站建设公司
  • 受雇去建设网站类网站2018网站开发