前言

这大雾何时会散去!?


实践

注册native方法有两种实现方法,一种是默认的,如JNIEXPORT void JNICALL Java_com_code_jsk_handlenative_MainActivity_checkSign ,在JNI_OnLoad 会自动识别该方法,从而进行注册。这种方式虽然方便了编程,但同时也让破坏者找到了进攻的路口。
手动注册的好处是native方法的命名可以随意。
参考文章

代码

public native int  obviousEqual();
public native void checkJSK();
#include <assert.h>
#define JNIREG_CLASS "com/code/jsk/handlenative/MainActivity"//指定要注册的类
static JNINativeMethod gmethod[] = {{"obviousEqual","()I",(void*)jiangsikang},
};
/*
* Register several native methods for one class.
*/
static int registerNativeMethods(JNIEnv* env, const char* className,JNINativeMethod* gmethod, int numMethods)
{jclass clazz;clazz = env->FindClass(className);if (clazz == NULL) {return JNI_FALSE;}if (env->RegisterNatives(clazz, gmethod, numMethods) < 0) {return JNI_FALSE;}return JNI_TRUE;
}
/*
* Register native methods for all classes we know about.
*/
static int registerNatives(JNIEnv* env)
{if (!registerNativeMethods(env,JNIREG_CLASS, gmethod,sizeof(gmethod) / sizeof(gmethod[0])))return JNI_FALSE;JNINativeMethod smethod[] = {{"checkJSK","()V",(void*)checkJSK},};if (!registerNativeMethods(env,JNIREG_CLASS, smethod,sizeof(smethod) / sizeof(smethod[0])))return JNI_FALSE;return JNI_TRUE;
}
/*
* Set some test stuff up.
*
* Returns the JNI version on success, -1 on failure.
*/JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved)
{JNIEnv* env = NULL;jint result = -1;if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {return -1;}assert(env != NULL);if (!registerNatives(env)) {//注册return -1;}result = JNI_VERSION_1_4;return result;
}

我们只需要修改static int registerNatives(...)这个函数即可.
原理我不懂,拿这个模板套吧。

总结

给自己点压力,真的!

手动注册native方法相关推荐

  1. Android NDK之静态/动态注册Native方法

    一.简介 关于NDK有两种方法注册:静态注册和动态注册. 静态注册: 就是直接在Java文件里写个native方法 然后再c/c++文件中实现这个方法就行了: 动态注册: 就是为了不要写很长的方法名, ...

  2. android 动态注册,Android studio实现动态注册Native方法

    说到动态就有静态,但是静态的注册在上一篇文章中已经包含了,这里就不在赘述了,直接说动态实现. 这里我们分步走. 1.创建android工程 选择普通工程 项目命名 不出意外,项目一会就建立完成. 2. ...

  3. 安卓 jni 开发之 native 方法的动态注册

    博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 最近一直在搞 jni 开发,里面坑挺多,其实都是自己不注意导致的.如果你不知道 jni,但是你又想了解这个坑,请先到隔壁 ...

  4. JNI中Native方法的注册方式

    文章目录 JNI中native方法注册 native方法静态注册 native方法动态注册 数据类型转换 方法签名: 使用javap自动生成方法签名 JNIEnv JNI中native方法注册 jni ...

  5. 【Android 内存优化】Android 原生 API 图片压缩原理 ( 图片质量压缩方法 | 查找 Java 源码中的 native 方法对应的 C++ 源码 )

    文章目录 一. 图片质量压缩方法 二. 查找对应的 Native 方法源码 三. 分析 Bitmap.cpp 中动态注册 Native 方法 在博客 [Android 内存优化]图片文件压缩 ( An ...

  6. java类sample是公共的_应在名samle.java的文件_Andoid NDK编程 1 - 注册native函数

    打算对Android的NDK的开发做一总结,首先是JNI部分,接下来是NDK的内容.今天首先介绍一下JNI的第一部分:注册native函数. 当java代码中执行native的代码时候,首先是通过一定 ...

  7. JNI查找 native 方法的规则(静态、动态注册)

    转载自:JNI查找 native 方法的规则 通过上一篇文章,大家明白了调用 native 方法之前,首先要调用 System.loadLibrary 接口加载一个实现了native 方法的动态库才能 ...

  8. 手动更改oracle监听,详解Oracle数据库手动注册监听的方法

    本文主要介绍了为一个Oracle数据库(t02)配置多个监听(listener)的实验,过程有点小曲折.通过这个实验让我们来学习一下如何手动注册监听.以下是演示的过程. 1.新增两个测试的监听,lis ...

  9. oracle rac添加监听,【学习笔记】Oracle 10G RAC增加节点时手动注册监听服务的案例步骤...

    [学习笔记]Oracle 10G RAC增加节点时手动注册监听服务的案例步骤 时间:2016-10-22 22:53   来源:Oracle研究中心   作者:HTZ   点击: 次 天萃荷净 Ora ...

  10. Arthas 定位 Dubbo 手动注册 Eureka 异常

    作者 | java_keith 来源|阿里巴巴云原生公众号 很久没有写技术分享博客,因为发现一个好的工具确实有点忍不住分享一下,毕竟独乐乐不如众乐乐.> 这里需要说的主角就是 Artahs.&g ...

最新文章

  1. endl在c语言中的作用,C++中的endl
  2. VS2010 调用RFC 时注意(.net4.0) 使用nco
  3. externn C解析
  4. forget password of WEBLOGIC user
  5. .net SerialPort
  6. 开通qq邮箱的smtp服务的流程详情
  7. 使用SQL Server 2017 Docker容器在.NET Core中进行本地Web API开发
  8. 树莓派4B Ubuntu20.04 ROS2 RTABMAP realsense d455
  9. 高效地获取XMLhttp对象
  10. LeetCode题目Java代码解答 (详细解释!!!)
  11. 2021年9月再次更新-日立电梯,艾默生变频器维修图纸,原理图
  12. 视频教程-汇编语言程序设计III-其他
  13. 扫描之王——NAMP
  14. 空域、频域、时域的解释
  15. idea git切换分支、拉取最新代码 自己的代码被覆盖怎么办
  16. 使用EasyExcel的模板导出复杂表头的Excel- 先单组数据填充,再多组数据填充
  17. 思科cisco交换机如何查找环路及解决方法
  18. 长波猝灭剂QSY 21NHS,304014-13-9,QSY21 活性酯特点有哪些
  19. 为什么后浪不能让我产生共鸣
  20. 原根的存在性 几道例题

热门文章

  1. 论文中三线式表格的快速插入(word)
  2. 架构思维成长系列教程(十)- 电商搜索引擎架构设计
  3. 兼容IE8使用ajax上传文件
  4. 热门好用的空号检测API推荐
  5. azw3 netty权威指南_小程序,巧应用(pdf+epub+mobi+txt+azw3)
  6. 金万维异速联远程接入解决方案
  7. 雷赛服务器信号er020,伺服与雷赛控制卡配套的小技巧
  8. Mac M系列电脑 模拟器运行时 pods库 YYkit库报错
  9. Libxml2的简单介绍及应用
  10. java修改文件后缀_java批量修改文件后缀的方法介绍