Android JNI之静态注册
这篇说静态注册,所谓静态注册,就是native的方法是直接通过方法名的规定格式和Java端的声明处代码对应起来的,其对应规则如下:
JNIEXPORT <返回值> JNICALL Java_<包路径(.换成_)>_<类名>_<方法名>(JNIEnv *, jobject<,方法参数>)
假设在HelloJni中声明了方法staticLoad(), 如下所示:
package com.example.zhanghaiqiang.hellojni;
public class HelloJni {
static{
System.loadLibrary("main");
}
public native void staticLoad();
}
则其对应的native方法名为
JNIEXPORT void JNICALL Java_com_example_zhanghaiqiang_hellojni_AndroidJni_dynamicLog
(JNIEnv *, jobject)
当然,这个规则并不需要死记,jdk中的javah自动就帮我们做这个事了,cd到java目录下,执行 javah <包路径>.<类名> ,就会在当前目录下生成对应的natvie类 的头文件,比如上面的HelloJni,执行javah后得到的com_example_zhanghaiqiang_hellojni_HelloJni.h文件内容就会像这样:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_zhanghaiqiang_hellojni_HelloJni */ #ifndef _Included_com_example_zhanghaiqiang_hellojni_HelloJni
#define _Included_com_example_zhanghaiqiang_hellojni_HelloJni
#ifdef __cplusplus
extern "C" {
#endif /*
* Class: com_example_zhanghaiqiang_hellojni_HelloJni
* Method: staticLog
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_example_zhanghaiqiang_hellojni_HelloJni_staticLog
(JNIEnv *, jobject); #ifdef __cplusplus
}
#endif
#endif
随后,把这个文件拷到预设的jni目录下,copy一份并改名为.c或者.cpp源文件(当然你也可以直接把这个.h文件改成源文件),然后就可以开始写native的方法实现了。
Android JNI之静态注册的更多相关文章
- Android JNI之动态注册
所谓动态注册,就是不用像静态注册那样按规则严格的命名native方法,而是在加载so库的时候完成这个从Java方法到native方法的匹配工作,而这个匹配工作,需要我们写native代码来完成.下面直 ...
- Android JNI之数据类型
JNI中数据类型的意义在于桥接Java数据类型与C数据类型. 简单数据类型: Java Type Native Type Description boolean jboolean unsigned 8 ...
- Android高版本收不到静态注册的广播
Beginning with Android 8.0 (API level 26), the system imposes additional restrictions on manifest-de ...
- Android开发4: Notification编程基础、Broadcast的使用及其静态注册、动态注册方式
前言 啦啦啦~(博主每次开篇都要卖个萌,大家是不是都厌倦了呢~) 本篇博文希望帮助大家掌握 Broadcast 编程基础,实现动态注册 Broadcast 和静态注册 Broadcast 的方式以及学 ...
- Android实现AppWidget、Broadcast静态注册
Android实现AppWidget.Broadcast静态注册 本篇博客是基于我上一篇博客继续修改的,详情请看Android实现AppWidget.Broadcast动态注册 开发工具:Andori ...
- Android(java)学习笔记173:BroadcastReceiver之 静态注册 和 动态注册
1. 广播接受者>什么是广播.收音机.电台:对外发送信号.收音机:接收电台的信号. >在android系统里面,系统有很多重要的事件: 电池电量低,插入充电器,sd卡被移除,有电话打出去, ...
- Android中的BroadCast静态注册与动态注册
1.静态注册 新建MyBroadcast类继承BroadcastReceiver,实现onReceive方法 /** * Author:JsonLu * DateTime:2015/9/21 16:4 ...
- BroadcastReceiver(广播)的静态注册和动态注册 --Android开发
BroadcastReceiver是安卓四大组件之一,本例通过代码的方式演示静态注册和动态注册. 1.静态注册 静态注册只需要AndroidManifest.xml中进行配置: AndroidMani ...
- Android 8.0新特性-取消大部分静态注册广播
今天楼主在写一个广播的demo,功能非常的简单,就是一个应用发送一个自定义的广播,同时在这个应用里面定义了一个广播接受者,并且在AndroidManifest文件中进行静态的注册.Demo看上去非常的 ...
随机推荐
- 转载--未看关于移动端Web远程开发调试
移动端Web开发调试之Chrome远程调试(Remote Debugging) http://blog.csdn.net/freshlover/article/details/42528643 移动端 ...
- 树的深度———树形DP
题目描述 输入 输出 样例 样例输入 样例输出 7 分析 这道题数据有1000000,把每一个顶点都枚举一次显然不现实,肯定会T掉 所以,我们还是从图中找规律 按照习惯,我们先把1号节点作为根节点模拟 ...
- [TZOJ] 平台训练-V1
日常训练 训练网址:http://www.tzcoder.cn/ 1001: 整数求和 描述求两个整数之和.输入输入数据只包括两个整数A和B.输出两个整数的和.样例输入1 2样例输出3题目来源TZOJ ...
- 【转】Hbuilder配置Avalon、Vue指令提示
转载自CSDN http://blog.csdn.net/jianggujin/article/details/71419828 我本人是一名Java后端开发,偶尔也会研究一下前端内容,因为Hbuil ...
- 不会用Java Future,我怀疑你泡茶没我快, 又是超长图文!!
你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it well enough ...
- Python math 、cmath
1.math dir(math) 2.cmath 复数运算
- redis(九):Redis 哈希(Hash)(python)
# -*- coding: utf-8 -*- import redis #这个redis不能用,请根据自己的需要修改 r =redis.Redis(host="123.56.74.190& ...
- Python 之 Restful API设计规范
理解RESTful架构 Restful API设计指南 理解RESTful架构 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式 ...
- Python模块04/包/logging日志
Python模块04/包/logging日志 目录 Python模块04/包/logging日志 内容大纲 1.包 2.logging日志 3.今日总结 内容大纲 1.包 2.logging日志 1. ...
- [apue] Linux / Windows 系统上只能建立不超过 PATH_MAX / MAX_PATH 长度的路径吗?
问题的提出 在处理文件系统路径的时候,我们一般会先开辟一块内存区,用来接收路径.或者拼接好路径传递给系统调用.这是因为路径在各个系统上都有最大长度限制,在 Windows 上这个值是 MAX_PATH ...