Android NDK学习笔记4:JNI访问Java构造函数
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/119348263
本文出自【赵彦军的博客】
文章目录
- 方式一:NewObject
- 方式二:CallNonvirtualVoidMethod
- 实战演练:调用有参构造函数
JNI 访问 Java 的构造函数,有两种写法
//第一种env->NewObject(cls, init);//第二种
方式一:NewObject
Util.java 类
public class Util {int age = 100;//这个方法 c 调用,创建对象public Util() {Log.d("util-", "init");}
}
在 Activity 中声明 getUtil 方法。如下:
class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)Log.d("util--", "" + getUtil().age)}external fun getUtil(): Utilcompanion object {// Used to load the 'native-lib' library on application startup.init {System.loadLibrary("native-lib")}}
}
c 代码实现 getUtil 方法,并且返回 Util 对象实例
extern "C"
JNIEXPORT jobject JNICALL
Java_com_example_myapplication_MainActivity_getUtil(JNIEnv *env, jobject thiz) {jclass cls = env->FindClass("com/example/myapplication/Util");//调用无参构造函数//构造函数是没有函数名的,<init> 就代表构造函数. ()V 代表无参无返回值jmethodID init = env->GetMethodID(cls, "<init>", "()V");//创建实例jobject util = env->NewObject(cls, init);return util;
}
输出日志:
D/util-: init
D/util--: 100
方式二:CallNonvirtualVoidMethod
c 代码实现
extern "C"
JNIEXPORT jobject JNICALL
Java_com_example_myapplication_MainActivity_getUtil(JNIEnv *env, jobject thiz) {jclass cls = env->FindClass("com/example/myapplication/Util");//调用无参构造函数jmethodID init = env->GetMethodID(cls, "<init>", "()V");//分配对象实例jobject util = env->AllocObject(cls);//创建实例env->CallNonvirtualVoidMethod(util,cls,init);return util;
}
实战演练:调用有参构造函数
java 代码实现
public class Util {String name = "";int age = 0;//这个方法 c 调用,创建对象public Util(String name, int age) {this.name = name;this.age = age;Log.d("util-", "init");}
}
c 代码实现
extern "C"
JNIEXPORT jobject JNICALL
Java_com_example_myapplication_MainActivity_getUtil(JNIEnv *env, jobject thiz) {jclass cls = env->FindClass("com/example/myapplication/Util");//调用有参构造函数,两个参数,一个是 String, 一个是 IntjmethodID init = env->GetMethodID(cls, "<init>", "(Ljava/lang/String;I)V");jstring name = env->NewStringUTF("zhaoyanjun");//创建实例jobject util = env->NewObject(cls, init, name, 10);return util;
}
函数调用:
class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)val util = getUtil()Log.d("util--", "${util.name} ${util.age}")}external fun getUtil(): Utilcompanion object {// Used to load the 'native-lib' library on application startup.init {System.loadLibrary("native-lib")}}
}
Android NDK学习笔记4:JNI访问Java构造函数相关推荐
- NDK学习笔记:JNI调用Java层方法创建Native的AudioTrack播放PCM(方法签名,CallXXXMethod)
NDK学习笔记:JNI调用Java层方法创建Native的AudioTrack播放PCM 题目有点复杂,不过确实就是那么回事.这章想记录的内容比较多,先列出来: native static 与 nat ...
- Android NDK学习笔记3:JNI访问Java属性、方法
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/119209444 本文出自[赵彦军的博客] 文章目录 Java 类型和JNI符号对比 ...
- Android NDK学习笔记1:基础
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/119005718 本文出自[赵彦军的博客] 文章目录 (一)什么是Android N ...
- Android NDK学习笔记(转)
前言 Android系统中的应用程序都是用Java开发的.Android NDK使我们能够在android上使用C/C++开发的原生代码.有两个理由使用NDK: 一是合理的重用现有的代码:二是在程序中 ...
- Android NDK学习笔记6:异常处理
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/119547007 本文出自[赵彦军的博客] 文章目录 JNI捕获异常 JNI抛出异常 ...
- Android NDK学习笔记5:引用类型管理
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/119545225 本文出自[赵彦军的博客] 文章目录 局部引用 全局引用 弱引用 总 ...
- Android NDK学习笔记2:数组
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/119152933 本文出自[赵彦军的博客] 文章目录 java数组和jni数组对应关 ...
- java/android 设计模式学习笔记(1)--- 单例模式
前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴 T__T ),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单,但是在实际使 ...
- java/android 设计模式学习笔记(6)---适配器模式
这篇来介绍一下适配器模式(Adapter Pattern),适配器模式在开发中使用的频率也是很高的,像 ListView 和 RecyclerView 的 Adapter 等都是使用的适配器模式.在我 ...
最新文章
- 源码阅读:AFNetworking(十六)——UIWebView+AFNetworking
- FPGA的设计艺术(8)最佳的FPGA开发实践之严格遵循过程
- C++实现求字符串的所有的组合
- CIA公布了收集和存储美国公民信息的新规则
- Java中的SPI(Service Provider Interface介绍及示例
- kali破解WiFi时wlan0没有变wlan0mon_黑客入门干货:黑客使用 Aircrack-ng 破解 Wi-Fi 密码
- 利用python分析电商_Python实现爬取并分析电商评论
- c++之string格式化
- 网和aoe网的区别_【专定网】你知道到亚克力鱼缸与超白缸的区别吗?测评结果给你答案...
- 计算机一级excel题库百度云,全国计算机等级考试一级上机Excel题库
- 【三 HLS】HLS实现肤检测
- 邓元鋆:AMD的方法论
- Java代码使用最小二乘法实现线性回归预测
- MPU6050 6轴姿态传感器的分析与使用(一)
- G - A/B Matrix CodeForces - 1360G
- 采购配置SAP Purchasing Configuration Tips and Tricks
- 美团大规模微服务通信框架及治理体系OCTO核心组件开源
- 【论文精读CVPR_2022】High-resolution Face Swapping via Latent Semantics Disentanglement
- 宣传部第二学期第一次培训
- 王小川妄图再次搅黄虎狗合体,张朝阳还能忍他多久?
热门文章
- java中的运算符_java中的运算符
- android 一个activity定时更新另一个activity的UI
- 【小白学习PyTorch教程】十五、BERT:通过PyTorch来创建一个文本分类的Bert模型
- 六、Go编程语言中的函数式编程
- 一文详解图对比学习(GNN+CL)的一般流程和最新研究趋势
- 每周「Paper + Code」清单:句子嵌入,文本表示,图像风格转换
- PicGo五分钟打造你的私人图床(稳定、快速、免费)
- 上传到GitHub或者码云中README文件无法显示图片
- Python-面向对象的编程语言
- java开发架构设计_跪了!阿里技术官出品:Java架构设计之完美,看完秒进大厂。...