Android平台Native开发与JNI机制详解
源文链接: http://mysuperbaby.iteye.com/blog/915425
一个Native Method就是一个Java调用非Java代码的接口。一个Native Method是这样一个Java的方法:该方法的实现由非Java语言实现,比如C或C++。
个人认为下面这篇转载的文章写的很清晰很不错. 注意Android平台上的JNI机制使用包括Java代码中调用Native模块以及Native代码中调用Java模块.
http://www.ophonesdn.com/article/show/263
众所周知,OPhone平台上的应用开发主要基于Java语言,但平台完全支持且提供了一定的Native开发能力(主要是C/C++),使得开发者可以借助JNI更深入的实现创意。本文主要介绍OPhone平台的JNI机制和Native模块开发与发布的方法。
- /* A native method that is implemented by the
- * 'hello-jni' native library, which is packaged
- * with this application.
- */
- public native String stringFromJNI();
- /* A native method that is implemented by the
- * 'hello-jni' native library, which is packaged
- * with this application.
- */
- public native String stringFromJNI();
- #include <string.h>
- #include <jni.h>
- jstring
- Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
- jobject thiz ) {
- return (*env)->NewStringUTF(env, "Hello from JNI !" );
- }
- #include <string.h>
- #include <jni.h>
- jstring
- Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
- jobject thiz ) {
- return (*env)->NewStringUTF(env, "Hello from JNI !");
- }
- static {
- System.loadLibrary("hello-jni" );
- }
- static {
- System.loadLibrary("hello-jni");
- }
- TextView tv = new TextView( this );
- tv.setText( stringFromJNI() );
- setContentView(tv);
- TextView tv = new TextView(this);
- tv.setText( stringFromJNI() );
- setContentView(tv);
- package com.example.hellojni;
- public class SayHello {
- public String sayHelloFromJava(String nativeMsg) {
- String str = nativeMsg + " But shown in Java!" ;
- return str;
- }
- }
- package com.example.hellojni;
- public class SayHello {
- public String sayHelloFromJava(String nativeMsg) {
- String str = nativeMsg + " But shown in Java!";
- return str;
- }
- }
- jstring helloFromJava( JNIEnv* env ) {
- jstring str = NULL;
- jclass clz = (*env)->FindClass(env, "com/example/hellojni/SayHello" );
- jmethodID ctor = (*env)->GetMethodID(env, clz, "<init>" , "()V" );
- jobject obj = (*env)->NewObject(env, clz, ctor);
- jmethodID mid = (*env)->GetMethodID(env, clz, "sayHelloFromJava" , "(Ljava/lang/String;)Ljava/lang/String;" );
- if (mid) {
- jstring jmsg = (*env)->NewStringUTF(env, "I'm born in native." );
- str = (*env)->CallObjectMethod(env, obj, mid, jmsg);
- }
- return str;
- }
- jstring helloFromJava( JNIEnv* env ) {
- jstring str = NULL;
- jclass clz = (*env)->FindClass(env, "com/example/hellojni/SayHello");
- jmethodID ctor = (*env)->GetMethodID(env, clz, "<init>", "()V");
- jobject obj = (*env)->NewObject(env, clz, ctor);
- jmethodID mid = (*env)->GetMethodID(env, clz, "sayHelloFromJava", "(Ljava/lang/String;)Ljava/lang/String;");
- if (mid) {
- jstring jmsg = (*env)->NewStringUTF(env, "I'm born in native.");
- str = (*env)->CallObjectMethod(env, obj, mid, jmsg);
- }
- return str;
- }
- LOCAL_PATH := $(call my-dir)
- include $(CLEAR_VARS)
- LOCAL_MODULE := hello-jni
- LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
- LOCAL_SRC_FILES := src/call_java.c \
- src/hello-jni.c
- include $(BUILD_SHARED_LIBRARY)
- LOCAL_PATH := $(call my-dir)
- include $(CLEAR_VARS)
- LOCAL_MODULE := hello-jni
- LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
- LOCAL_SRC_FILES := src/call_java.c \
- src/hello-jni.c
- include $(BUILD_SHARED_LIBRARY)
转载于:https://www.cnblogs.com/4-312/p/3968327.html
Android平台Native开发与JNI机制详解相关推荐
- Android JNI使用方法,JNI机制详解
Android JNI使用方法,JNI机制详解 JNI的出现使得开发者既可以利用Java语言跨平台.类库丰 富.开发便捷等特点,又可以利用Native语言的高效. JNI是JVM实现中的一部分,因此N ...
- React Native 手势触摸事件机制详解(进阶篇)
源码已开源到Github,详细代码可以查看:<React Native 触摸事件代码实践>. 在基础篇,对RN中的触摸事件做了详细的介绍.相信大家对于触摸事件流程机制有了更为清晰的认识.没 ...
- android bundle 机制,【Android开发】Bundle机制详解
在同一个地方跌倒两次,才能体会到"好记性不如烂笔头"! 一.Bundle简介 bundle在Android开发中非常常见,它的作用主要时用于传递数据:它所保存的数据是以key-va ...
- React Native 手势触摸事件机制详解(基础篇)
欢迎大家关注[跨平台开发那些事]公众号,定期推送跨平台开发技术实践. 源码已开源到Github,详细代码可以查看:<React Native 触摸事件代码实践>. ...
- 性能优化——Android热修复技术,类加载机制详解
一.背景 热修复技术慢慢的成为Android开发必不可少的技术,也是成为一名高级程序员必不可少的技能之一.那么什么是热修复技术呢? 当app上线之后,发现了一个严重的bug,需要紧急修复,按照以往的惯 ...
- Android平台Qt开发入门教程
很多人会问,Android平台可以不使用Java开发应用程序?? 我做Android平台native开发之前,也有这么想过,但是我又想,底层系统全是c/c++代码,用c/c++开发Android平台程 ...
- 米狗族 Android平台Qt开发入门教程
很多人会问,Android平台可以不使用Java开发应用程序?? 我做Android平台native开发之前,也有这么想过,但是我又想,底层系统全是c/c++代码,用c/c++开发Android平台程 ...
- Android设备扫描机制详解
Android设备扫描机制详解 本文基于Android pie,对Android的设备扫描机制做一个全面的解析,由于本人掌握的知识有限,如有讲错的地方还请大家指出来. Android提供了一套扫描机制 ...
- 【Android签名机制详解】二:Android V1、V2、V3、V4签名方案
前言 书接上回[Android签名机制详解]一:密码学入门,在了解了消息摘要.非对称加密.数字签名.数字证书的基本概念后,我们趁热打铁.直奔主题,讲解签名在Android中的实际应用. 基础知识 An ...
- Android学习笔记——Android 签名机制详解
Android 签名机制详解 近期由于工作需要在学习 Android 的签名机制,因为没有现成资料,只能通过开发者文档和阅读博客的方式对 Android 签名机制进行大致了解.过程中查阅到的资料相对零 ...
最新文章
- Ubuntu中Netbeans的中文问题彻底解决
- 【C/C++】头文件包含之#include的2种用法区别
- Delphi文件操作函数
- [pytorch、学习] - 4.1 模型构造
- 前端学习(3074):vue+element今日头条管理-删除文章处理完成
- 酒店房间登记与计费管理系统《c语言课程设计》 文库,C语言课程设计--酒店房间登记与计费管理系统程序代码...
- 吴恩达机器学习 逻辑回归 作业2(芯片预测) Python实现 代码详细解释
- 【Daily Scrum】
- ASP.NET 文件操作类
- vue 地图使用navigator_初识ABP vNext(6):vue+ABP实现国际化
- 国产代码审计工具Pinpoint介绍
- cesium label和billboard 的一些配置注释
- 2020牛客暑期多校训练营(第九场)——Groundhog and 2-Power Representation
- javaweb课程设计:基于websocket的网络聊天室(所有的资源和代码还有详细步骤我都会提供)
- 网络攻防|CVE-2021-42287、CVE-2021-42278域内提权
- 基于PHP扩展的WAF实现
- 20. 有效的括号-C语言
- ubuntu系统声音_Ubuntu Linux系统提示声音设置
- 完美解决KMplayer无法播放RMVB、RM电影问题
- Ubuntu修改静态IP详细步骤