JNI整理总结

别再卡在Google验证了!用Header Editor插件5分钟搞定TryHackMe注册(附最新.json规则) 本文提供了使用Header Editor插件快速解决TryHackMe注册时Google验证失败问题的详细指南。通过导入特定的JSON规则文件,用户可以轻松绕过网络限制,5分钟内完成账号注册,无需复杂设置。文章包含完整的配置步骤、常见问题解决方案以及安全使用建议。 阅读详情

JNI

JNI基础

JNI,java native interface,即java本地接口,是java调用本地化方法的接口,是为java编写本地方法,为jvm嵌入本地应用程序的标准化接口。首要目标是在给定的平台上采用java通过JNI调用本地化方法,而本地化方法是二进制库文件的形式存放,Windows上本地化方法是dll库形式,Unix上是so形式。通过调用本地的库文件的内部的方法,使java可以实现和本地机器的紧密联系,调用系统级的各接口方法,JNI可以实现java与本地化方法的相互调用,即java与C/C++实现相互的调用,双向的调用。

native开发目前有两种编译方式,一种是传统的,比较早的gcc的编译方式,一种是近几年推出的cmake编译方式。只是管理代码的编译方式的区别,其他的差别不大。作为开发者,语法和调试功底才是关键。

步骤:
·java类中声明native修饰的方法;
·使用javac编译java文件,会生成一个class文件;
·使用javah class完整名,会生成一个h的头文件;
·使用C/C++实现h头文件里的本地方法,并生成动态链接库;
·将库文件拷贝到java工程目录下,运行java;

在java程序中,
首先要在类中声明所调用的库名称,如下的static代码块内loadLibrary。库的扩展名不用写,由系统自动判断。
其次,对要调用的方法做本地化声明,只声明不实现。
第三,编译java程序文件生成class文件,使用javah命令生成h头文件。
第四,对于这个头文件,C/C++需要做的,就是把各个方法具体实现,编译生成链接库文件。生成动态链接库。

MainActivity.java

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {

    // Used to load the 'native-lib' library on application startup.
    static {
        System.loadLibrary("native-lib");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Example of a call to a native method
        TextView tv = findViewById(R.id.sample_text);
        tv.setText(stringFromJNI());
    }

    /**
     * A native method that is implemented by the 'native-lib' native library,
     * which is packaged with this application.
     */
    public native String stringFromJNI();

    public native String setStr(String str);

    public static native void getV();
}

native-lib.cpp

#include <jni.h>
#include <string>

extern "C" JNIEXPORT jstring JNICALL
Java_com_example_myapplicationdemo_MainActivity_stringFromJNI(
        JNIEnv* env,
        jobject /* this */) {
    std::string hello = "Hello from C++";
    return env->NewStringUTF(hello.c_str());
}

extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_myapplicationdemo_MainActivity_setStr(JNIEnv *env, jobject thiz, jstring str) {
    // TODO: implement setStr()
}

extern "C"
JNIEXPORT void JNICALL
Java_com_example_myapplicationdemo_MainActivity_getV(JNIEnv *env, jclass clazz) {
    // TODO: implement getV()
}

JNIEXPORT,JNICALL是JNI关键字,表示该方法是要被JNI调用的。

JNI技术解析 JNIJava Native Interface的缩写,译为Java本地调用。JNI是一种技术。  Java层函数通过Java编译成.class文件,再通过Javah工具将将.class生成为JNI层的*.h头文件,在*.h头文件里有对应Java层的函数,在JNI层实现相关函数即可。 javah -o test packagename.classname 动态注册   Java Native函数与JNI函数是一一对应的关系,所以,有一个数据结构存储着对应关系,这个数据结构就是JNINativeM 阅读详情

相关推荐

JNI_编程技术__网文整理

http://blog.csdn.net/a3015440/article/details/5966881

--------→成人不自在,自在不成人℃ ------------ 672

HashMap解惑

HashMap中有一些我们容易忽视的点 1. 关于key的hash和equals public V put(K key, V value) { if (table == EMPTY_TABLE) { inflateTable(threshold); } if (key == null) ...

269

【科研数据获取】根据Excel表个中的企业/公司信息批量获取经纬度坐标,并进行地图可视化

批量获取企业/公司的经纬度坐标,并进行地图可视化1 需求2 实现途径3 需求逐步实现 1 需求 在做项目的时候,老板或者项目答辩时候甲方最喜欢看到的就是可视化结果,尤其是涉及到地图可视化。很多时候会遇到企业/公司的数据,想要做地图可视化,必不可少的就是要获取它们具体地址:第一种就是像查户口一样精准一下具体的城镇街道,还有一种就是经纬度信息,前一种属于文字内容往往用于管理方面,第二种数字信息多用于数据处理与分析。 2 实现途径 获取地理信息数据,自然需要使用到地图的功能,这里直接采用百度地图的拾取坐标系统,

lys_828的博客 2315

JNIJava Native Interface

JNI的角色编辑 JNI可以这样与本地程序进行交互: 1、你可以使用JNI来实现“本地方法”(native methods),并在JAVA程序中调用它们。 2、JNI支持一个“调用接口”(invocation interface),它允许你把一个JVM嵌入到本地程序中。本地程序可以链接一个实现了JVM的本地库,然后使用“调用接口”执行JAVA语言编写的软件模块。例如,一个用C语言

xiangbq的博客 1501

一天掌握Android JNI本地编程 快速入门

一、JNIJava Native Interface) 1、什么是JNIJNI(Java Native Interface):java本地开发接口 JNI是一个协议,这个协议用来沟通java代码和外部的本地代码(c/c++) 外部的c/c++代码也可以调用java代码 2...

weixin_30586085的博客 414

JNI技术规范 - 第二章 设计机制

目录 第一章 介绍第二章 设计机制第三章 JNI类型和数据结构第四章 JNI函数(1)第四章 JNI函数(2)第四章 JNI函数(3)第四章 JNI函数(4)第五章 Invocation API 第二章 设计机制 本章主要描述JNI的主要设计问题。很多本章讨论的设计问题和本地方法相关。Invocation API的相关设计问题在第五章中进行描述。 2.1 JNI接口函数和指针 本地代码访...

The way I walk 294

8月21,安卓开发JNI学习笔记整理

zousy202的博客 350

android 的JNI调用整理

 今天讲个Android JNI的用法。这个是我两年以前最头疼的问题。感觉应该写出来分享给大家。OK 我的NDK安装在了Ubuntu的此目录当中   1.把你的程序拷贝到apps目录里并且修改你的Application.mkAPP_MODULES      := mylib这里mylib是指定自己使用的库名称 2.如果使用其他库请把.a或.so文件拷贝到此目录

gieghia007的专栏 1039

jni接口参数整理

jni整理 方法命名规则 JNIEXPORT jstring JNICALL Java_com_zkhero_jnitestdemo_JNIUtils_getTopicMsgFromJNI(JNIEnv *env, jclass clazz, jstring topic) ; //JNIEXPORT和JNICALL分别用于在Windows下标明该函数导出在外部可以调用和用于约束函数入栈...

ZKhero的博客 843

jni研究整理

本文通过两个例子来讲解JNI的一个输入/输出应用。首先看一个String的输入输出的例子,下面是java部分的代码 public class Prompt { private native String getLine(String prompt); public static void main(String args[]) { Prompt p = n...

iteye_12796的博客 107

关于JNI的一点整理

JNIJava Native Interface的缩写,是java调用操作系统原生方法的技术.目前只能由C/C++实现要调用的native 接口.通常,这些native接口都是以库文件的形式来供调用的.      JNI是相当于在开发人员自己编写的java类于系统底层之间建立了一个代理或者桥梁.开发人员自己的java类告诉代理说要调用先前加载的库文件中的某某接口,JNI代理则去调用库文件中的接

happy08god的专栏 858

android中的JNI整理

JNI java native interface  含义: java语言 与 native语言 之间的接口 1) java中调用native接口 2) native语言中访用java中的变量和方法 ================== ================== 1. java调用native接口 ========== ================== 1) 在.j

ljchlx的专栏 1920

JNI接口的整理

一.JDK环境的安装(1)、jdk安装 JDK作为JAVA开发的环境,不管是做JAVA开发的学生,还是做安卓开发的同学,都必须在电脑上安装JDK。下面就教大家如何安装JDK。 首先上甲骨文公司的官方网站下载JDK的安装包,根据自己电脑的操作系统选择正确的版本下载。不知道下载地址的同学可以百度一下很快就能搜到。附件里面有一份安装包用鼠标左键双击JDK安装包,会出现下图所示的安装界面。其实...

weixin_30367873的博客 190

深入理解JNI技术

jni理解

woaitingting1985的博客 1411

java jni 是啥_Java JNI的详细介绍

JNI就是Java Native Interface的简称,也就是java本地接口。它提供了若干的API实现了和Java和其他语言的通信(主要是C&C++)。或许不少人觉得Java已经足够强大,为什么要需要JNI这种东西呢?我们知道Java是一种平台无关性的语言,平台对于上层的java代码来说是透明的,所以在多数时间我们是不需要JNI的,但是假如你遇到了如下的三种情况之一呢?你的Java代...

weixin_28952471的博客 1475

JNI 技术总结

C/C++ 调用javajava调用C/C++

qq_19686597的博客 1085

JNI简介

JNIJava Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&amp;C++)。从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI技术的出现主要是基于三个方面的应用需求:1. 解决性能问题        Java具有平台无关性,这使人们在开发企业级应用的时候总是把它作为主要候选方案...

bide_tootight的博客 900

JNI入门教程

文章目录JNI 简介Hello World!步骤一步骤二步骤三基本类型传输常用数据结构 和 对象传输int数组数组list一般对象传输内存泄漏问题 JNI 简介 **全称:**JNIJava Native Interface(Java本地接口) **用途:**Java与C/C++、汇编等本地代码集成 场景: Java运行效率相对C/C++要低 可以调用优秀的C/C++开源库 class文件安全性较差,用C/C++实现反编译比较困难,安全性较高 扩展JVM的能力,让Java代码可以调用驱动 本

weixin_40058501的博客 882

JNI一点理解

JNI一点理解

菜鸡一只 688

信号与系统分析 第5版 吴大正 PDF

信号与系统分析 第5版 吴大正 PDF

上一篇: 泛型应用范例
费城之鹰
博客等级 码龄15年 5142粉丝 · 166原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值