转载请标明出处: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构造函数相关推荐

  1. NDK学习笔记:JNI调用Java层方法创建Native的AudioTrack播放PCM(方法签名,CallXXXMethod)

    NDK学习笔记:JNI调用Java层方法创建Native的AudioTrack播放PCM 题目有点复杂,不过确实就是那么回事.这章想记录的内容比较多,先列出来: native static 与 nat ...

  2. Android NDK学习笔记3:JNI访问Java属性、方法

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/119209444 本文出自[赵彦军的博客] 文章目录 Java 类型和JNI符号对比 ...

  3. Android NDK学习笔记1:基础

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/119005718 本文出自[赵彦军的博客] 文章目录 (一)什么是Android N ...

  4. Android NDK学习笔记(转)

    前言 Android系统中的应用程序都是用Java开发的.Android NDK使我们能够在android上使用C/C++开发的原生代码.有两个理由使用NDK: 一是合理的重用现有的代码:二是在程序中 ...

  5. Android NDK学习笔记6:异常处理

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/119547007 本文出自[赵彦军的博客] 文章目录 JNI捕获异常 JNI抛出异常 ...

  6. Android NDK学习笔记5:引用类型管理

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/119545225 本文出自[赵彦军的博客] 文章目录 局部引用 全局引用 弱引用 总 ...

  7. Android NDK学习笔记2:数组

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/119152933 本文出自[赵彦军的博客] 文章目录 java数组和jni数组对应关 ...

  8. java/android 设计模式学习笔记(1)--- 单例模式

    前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴 T__T ),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单,但是在实际使 ...

  9. java/android 设计模式学习笔记(6)---适配器模式

    这篇来介绍一下适配器模式(Adapter Pattern),适配器模式在开发中使用的频率也是很高的,像 ListView 和 RecyclerView 的 Adapter 等都是使用的适配器模式.在我 ...

最新文章

  1. 源码阅读:AFNetworking(十六)——UIWebView+AFNetworking
  2. FPGA的设计艺术(8)最佳的FPGA开发实践之严格遵循过程
  3. C++实现求字符串的所有的组合
  4. CIA公布了收集和存储美国公民信息的新规则
  5. Java中的SPI(Service Provider Interface介绍及示例
  6. kali破解WiFi时wlan0没有变wlan0mon_黑客入门干货:黑客使用 Aircrack-ng 破解 Wi-Fi 密码
  7. 利用python分析电商_Python实现爬取并分析电商评论
  8. c++之string格式化
  9. 网和aoe网的区别_【专定网】你知道到亚克力鱼缸与超白缸的区别吗?测评结果给你答案...
  10. 计算机一级excel题库百度云,全国计算机等级考试一级上机Excel题库
  11. 【三 HLS】HLS实现肤检测
  12. 邓元鋆:AMD的方法论
  13. Java代码使用最小二乘法实现线性回归预测
  14. MPU6050 6轴姿态传感器的分析与使用(一)
  15. G - A/B Matrix CodeForces - 1360G
  16. 采购配置SAP Purchasing Configuration Tips and Tricks
  17. 美团大规模微服务通信框架及治理体系OCTO核心组件开源
  18. 【论文精读CVPR_2022】High-resolution Face Swapping via Latent Semantics Disentanglement
  19. 宣传部第二学期第一次培训
  20. 王小川妄图再次搅黄虎狗合体,张朝阳还能忍他多久?

热门文章

  1. java中的运算符_java中的运算符
  2. android 一个activity定时更新另一个activity的UI
  3. 【小白学习PyTorch教程】十五、BERT:通过PyTorch来创建一个文本分类的Bert模型
  4. 六、Go编程语言中的函数式编程
  5. 一文详解图对比学习(GNN+CL)的一般流程和最新研究趋势
  6. 每周「Paper + Code」清单:句子嵌入,文本表示,图像风格转换
  7. PicGo五分钟打造你的私人图床(稳定、快速、免费)
  8. 上传到GitHub或者码云中README文件无法显示图片
  9. Python-面向对象的编程语言
  10. java开发架构设计_跪了!阿里技术官出品:Java架构设计之完美,看完秒进大厂。...