手动注册native方法
前言
这大雾何时会散去!?
实践
注册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方法相关推荐
- Android NDK之静态/动态注册Native方法
一.简介 关于NDK有两种方法注册:静态注册和动态注册. 静态注册: 就是直接在Java文件里写个native方法 然后再c/c++文件中实现这个方法就行了: 动态注册: 就是为了不要写很长的方法名, ...
- android 动态注册,Android studio实现动态注册Native方法
说到动态就有静态,但是静态的注册在上一篇文章中已经包含了,这里就不在赘述了,直接说动态实现. 这里我们分步走. 1.创建android工程 选择普通工程 项目命名 不出意外,项目一会就建立完成. 2. ...
- 安卓 jni 开发之 native 方法的动态注册
博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 最近一直在搞 jni 开发,里面坑挺多,其实都是自己不注意导致的.如果你不知道 jni,但是你又想了解这个坑,请先到隔壁 ...
- JNI中Native方法的注册方式
文章目录 JNI中native方法注册 native方法静态注册 native方法动态注册 数据类型转换 方法签名: 使用javap自动生成方法签名 JNIEnv JNI中native方法注册 jni ...
- 【Android 内存优化】Android 原生 API 图片压缩原理 ( 图片质量压缩方法 | 查找 Java 源码中的 native 方法对应的 C++ 源码 )
文章目录 一. 图片质量压缩方法 二. 查找对应的 Native 方法源码 三. 分析 Bitmap.cpp 中动态注册 Native 方法 在博客 [Android 内存优化]图片文件压缩 ( An ...
- java类sample是公共的_应在名samle.java的文件_Andoid NDK编程 1 - 注册native函数
打算对Android的NDK的开发做一总结,首先是JNI部分,接下来是NDK的内容.今天首先介绍一下JNI的第一部分:注册native函数. 当java代码中执行native的代码时候,首先是通过一定 ...
- JNI查找 native 方法的规则(静态、动态注册)
转载自:JNI查找 native 方法的规则 通过上一篇文章,大家明白了调用 native 方法之前,首先要调用 System.loadLibrary 接口加载一个实现了native 方法的动态库才能 ...
- 手动更改oracle监听,详解Oracle数据库手动注册监听的方法
本文主要介绍了为一个Oracle数据库(t02)配置多个监听(listener)的实验,过程有点小曲折.通过这个实验让我们来学习一下如何手动注册监听.以下是演示的过程. 1.新增两个测试的监听,lis ...
- oracle rac添加监听,【学习笔记】Oracle 10G RAC增加节点时手动注册监听服务的案例步骤...
[学习笔记]Oracle 10G RAC增加节点时手动注册监听服务的案例步骤 时间:2016-10-22 22:53 来源:Oracle研究中心 作者:HTZ 点击: 次 天萃荷净 Ora ...
- Arthas 定位 Dubbo 手动注册 Eureka 异常
作者 | java_keith 来源|阿里巴巴云原生公众号 很久没有写技术分享博客,因为发现一个好的工具确实有点忍不住分享一下,毕竟独乐乐不如众乐乐.> 这里需要说的主角就是 Artahs.&g ...
最新文章
- endl在c语言中的作用,C++中的endl
- VS2010 调用RFC 时注意(.net4.0) 使用nco
- externn C解析
- forget password of WEBLOGIC user
- .net SerialPort
- 开通qq邮箱的smtp服务的流程详情
- 使用SQL Server 2017 Docker容器在.NET Core中进行本地Web API开发
- 树莓派4B Ubuntu20.04 ROS2 RTABMAP realsense d455
- 高效地获取XMLhttp对象
- LeetCode题目Java代码解答 (详细解释!!!)
- 2021年9月再次更新-日立电梯,艾默生变频器维修图纸,原理图
- 视频教程-汇编语言程序设计III-其他
- 扫描之王——NAMP
- 空域、频域、时域的解释
- idea git切换分支、拉取最新代码 自己的代码被覆盖怎么办
- 使用EasyExcel的模板导出复杂表头的Excel- 先单组数据填充,再多组数据填充
- 思科cisco交换机如何查找环路及解决方法
- 长波猝灭剂QSY 21NHS,304014-13-9,QSY21 活性酯特点有哪些
- 为什么后浪不能让我产生共鸣
- 原根的存在性 几道例题