Java JNI入门教程

简述JNI开发 JNI全称为Java Native Interface,主要用于实现Java和C/C++的通信。 阅读详情

Java Native Interface Specification—Contents

Contents | Previous | Next


1. Introduction

Java Native Interface Overview
Background

JDK 1.0 Native Method Interface
Java Runtime Interface
Raw Native Interface and Java/COM Interface

Objectives
Java Native Interface Approach
Programming to the JNI
Changes in JDK 1.1.2

2. Design Overview

JNI Interface Functions and Pointers
Compiling, Loading and Linking Native Methods

Resolving Native Method Names
Native Method Arguments

Referencing Java Objects

Global and Local References
Implementing Local References

Accessing Java Objects

Accessing Primitive Arrays
Accessing Fields and Methods

Reporting Programming Errors
Java Exceptions

Exceptions and Error Codes
Asynchronous Exceptions
Exception Handling

3. JNI Types and Data Structures

Primitive Types
Reference Types
Field and Method IDs
The Value Type
Type Signatures
Modified UTF-8 Strings

4. JNI Functions

Interface Function Table
Version Information

GetVersion

Class Operations

DefineClass
FindClass
GetSuperclass
IsAssignableFrom

Exceptions

Throw
ThrowNew
ExceptionOccurred
ExceptionDescribe
ExceptionClear
FatalError
ExceptionCheck

Global and Local References

NewGlobalRef
DeleteGlobalRef
DeleteLocalRef
EnsureLocalCapacity
PushLocalFrame
PopLocalFrame
NewLocalRef

Weak Global References

NewWeakGlobalRef
DeleteWeakGlobalRef

Object Operations

AllocObject
NewObject, NewObjectA, and NewObjectV
GetObjectClass
GetObjectRefType
IsInstanceOf
IsSameObject

Accessing Fields of Objects

GetFieldID
Get<type>Field Routines
Set<type>Field Routines

Calling Instance Methods

GetMethodID
Call<type>Method Routines, Call<type>MethodA Routines, and Call<type>MethodV Routines
CallNonvirtual<type>Method Routines, CallNonvirtual<type>MethodA Routines, and CallNonvirtual<type>MethodV Routines

Accessing Static Fields

GetStaticFieldID
GetStatic<type>Field Routines
SetStatic<type>Field Routines

Calling Static Methods

GetStaticMethodID
CallStatic<type>Method Routines, CallStatic<type>MethodA Routines, and CallStatic<type>MethodV Routines

String Operations

NewString
GetStringLength
GetStringChars
ReleaseStringChars
NewStringUTF
GetStringUTFLength
GetStringUTFChars
ReleaseStringUTFChars
GetStringRegion
GetStringUTFRegion
GetStringCritical
Release StringCritical

Array Operations

GetArrayLength
NewObjectArray
GetObjectArrayElement
SetObjectArrayElement
New<PrimitiveType>Array Routines
Get<PrimitiveType>ArrayElements Routines
Release<PrimitiveType>ArrayElements Routines
Get<PrimitiveType>ArrayRegion Routines
Set<PrimitiveType>ArrayRegion Routines
GetPrimitiveArrayCritical
ReleasePrimitiveArrayCritical

Registering Native Methods

RegisterNatives
UnregisterNatives

Monitor Operations

MonitorEnter
MonitorExit

NIO Support

NewDirectByteBuffer
GetDirectBufferAddress
GetDirectBufferCapacity

Reflection Support

FromReflectedMethod
FromReflectedField
ToReflectedMethod
ToReflectedField

Java VM Interface

GetJavaVM

5. The Invocation API

Overview

Creating the VM
Attaching to the VM
Unloading the VM

Library and Version Management

JNI_OnLoad
JNI_OnUnload

Invocation API Functions

JNI_GetDefaultJavaVMInitArgs
JNI_GetCreatedJavaVMs
JNI_CreateJavaVM
DestroyJavaVM
AttachCurrentThread
AttachCurrentThreadAsDaemon
DetachCurrentThread
GetEnv

 


Contents | Previous | Next

 

https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/jniTOC.html

>>java jni入门教程:https://blog.youkuaiyun.com/si444555666777/article/details/82191386

Android Studio NDK 开发指南:JNI 入门教程 通过以上步骤,我们成功地创建了一个简单的 Android Studio NDK 项目,并实现了 JNI 的入门示例。在本篇文章中,我们将介绍如何使用 Android Studio 进行 NDK 开发,并通过一个简单的示例来演示 JNI 的基本用法。我们可以尝试编译和运行项目,查看我们的 JNI 函数是否能够正常工作并将字符串显示在 UI 上。文件,我们需要在该文件中调用刚刚编写的 JNI 函数,并将其返回值显示在 UI 上。文件,我们可以开始编写我们的 JNI 函数。加载了我们在 JNI 中定义的库。 阅读详情

相关推荐

手把手教你用ComfyUI搭建高效AI绘画工作流:从基础到高级技巧

本文详细介绍了如何使用ComfyUI构建高效的AI绘画工作流,从基础配置到高级技巧全面覆盖。通过模块化设计,ComfyUI显著提升显存利用率和创作灵活性,适合从新手到专业用户。文章包含部署指南、工作流搭建、性能优化及行业应用案例,帮助读者快速掌握AI绘画核心技术。

7up55的博客 718

Java Native Interface(JNI)从零开始详细教程

==================================================================================== 首先声明:这边文章是我翻译的文章(看了很多关于JNI的介绍,只有这篇个人认为最好,因此忍不住想要翻译给国内的各位),请勿随意转载,尊重文章原作者。 文章原始链接:https://www3.ntu.edu.sg/home/ehch

Android Fans 8万+

【DIY】使用STM32及PID算法实现一个磁悬浮玩具

今天教大家来做一个磁悬浮玩具。

小白白学电子 1万+

JNI开发

Android JNI的使用方法

huang323186的博客 1255

告别系统迁移蓝屏!用Intel RST驱动搞定11代酷睿装Win11的硬盘识别难题

本文详细介绍了如何通过Intel RST驱动解决11代酷睿处理器在安装Win11时遇到的硬盘识别问题。针对VMD技术导致的系统迁移蓝屏错误,提供了从驱动下载、PE环境创建到驱动注入的完整解决方案,帮助用户顺利完成系统升级或迁移。

weixin_31309419的博客 576

DBeaver连接ClickHouse保姆级教程:从安装到成功测试(附驱动下载问题解决)

本文提供了一份详细的DBeaver连接ClickHouse实战指南,重点解决了驱动下载失败等常见问题。文章从环境准备、DBeaver安装讲起,详细阐述了手动配置ClickHouse驱动的可靠方案,并逐步指导完成连接配置与测试,最后介绍了基础操作与查询优化技巧,旨在帮助用户高效完成连接并快速上手使用。

pink的博客 879

Android JNI开发从0到1,java调C,C调Java,保姆级教程详解

第三歩,在app目录下的build.gradle文件中的,android{}闭包中,指定CMakeLists.txt路径。2.根据命令行javah +JNI2的全类名,生成com_example_jniproject_JNI2.h头文件。在app目录下,指定CmakeLists.txt文件,根据注释进行相应添加。3.根据jni协议,去写对应的c代码,创建Test.c文件,代码如下。2.根据命令行,javah +JNI3全类名,生成对应的头文件。第五步,C代码调用Java代码,首先创建JNI3.java。

路宇的博客 2657

广义S变换在MATLAB中的仿真

广义S变换是对信号进行时频分析的一种方法,它基于短时傅里叶变换(Short-Time Fourier Transform,STFT)和小波变换(Wavelet Transform)。广义S变换将信号分解成时频平面上的一系列矩形框,每个框内的数值表示相应时刻和频率下信号的能量。本文将介绍如何使用MATLAB进行广义S变换的仿真,并提供相应的源代码。函数,我们可以方便地计算信号的广义S变换,并获取时频平面上的时域和频域信息。广义S变换在信号处理和相关领域中具有广泛的应用,可以用于分析和处理各种类型的信号。

CodeNexus的博客 1119

JNI简明教程

众所周知,PHP是世界上最好的语言,java排第二,因为PHP无所不能。但是在某些场景下java还要调用本地方法来提高执行的效率,故java只能排第二。java提供了jni(Java Native Interface)来实现在java中调用本地方法。本地方法在java中用native关键字标识,它是一种和机器有关的方法,一般用C或C++实现,而本地方法不是跨平台的,不同的平台需要重新编译。...

mikaell的专栏 823

华为OD机试真题 新系统-等距二进制判断(C/C++/Py/Java/Js/Go)

华为OD机试 新系统真题【等距二进制判断】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【等距二进制判断】

qq_45776114的博客 1088

如何在Windows上安装Node-RED?

Node-RED 是一款基于流程的可视化编程工具,专注于物联网(IoT)和自动化应用的快速开发,其核心特点是通过拖拽节点构建数据流网络,实现低代码/无代码编程。

猿小白的博客 1171

idea没有out文件夹_史上最详细没有之一的 Java JNI傻瓜级入门教程

本文使用java的IDEA和visual studio2017来详细的一步一步演示java的JNI构建过程(eclipse+vs2017的教程在文末)1.打开java的IDEA,file->new,新建名为JNITIME的项目,在接下来出现的界面左侧找到名为src的文件夹图案,右击->new->package,命名为com.aijiao.test。在com.aijiao.test...

weixin_34254464的博客 3077

达摩院高清人像美肤模型ABPN的深入解析及编程实现

本文深入解析了达摩院高清人像美肤模型ABPN的原理,并提供了相应的源代码实现。ABPN模型通过自适应的反投影网络,有效地实现了人像图像的美肤处理。通过进一步的研究和优化,ABPN模型有望在人像美肤领域发挥更大的作用。低频特征提取器用于提取输入图像的低频信息,而反投影网络则负责将低频信息与原始图像结合,生成美肤后的输出图像。通过将输入图像送入ABPN模型,即可得到经过美肤处理后的输出图像。通过对输入图像进行美肤处理,可以有效地去除皮肤上的瑕疵和噪点,提升图像质量和美感。

TechPulseZ的博客 711

jni教程 java_Java的JNI快速入门教程(推荐)

1. JNI简介JNI是Java Native Interface的英文缩写,意为Java本地接口。问题来源:由于Java编写底层的应用较难实现,在一些实时性要求非常高的部分Java较难胜任(实时性要求高的地方目前还未涉及,实时性这类话题有待考究)。解决办法:Java使用JNI可以调用现有的本地库(C/C++开发任何和系统相关的程序和类库),极大地灵活Java的开发。2. JNI快速学习教程2.1...

weixin_34649372的博客 319

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

java jni helloword_JNI入门教程之HelloWorld篇

JNI入门教程之HelloWorld篇来源:互联网宽屏版评论2008-05-31 09:07:11本文讲述如何使用JNI技术实现HelloWorld,目的是让读者熟悉JNI的机制并编写第一个HelloWorld程序。java Native Interface(JNI)是Java语言的本地编程接口,是J2SDK的一部分。在java程序中,我们可以通过JNI实现一些用java语言不便实现的功能...

weixin_35908791的博客 393

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

jni java_JNI 入门教程

1.编写java测试类2.利用java测试类生成C头文件(我没有C和C++基础,后面出现的非JAVA的代码具体是C还是C++,我也不清楚。所以,教程中我都把它称为C)3.利用C头文件编写C代码4.生成C库5.java调用测试第一步:编写java测试类代码如下:package com.aijiao.test;public class JNIDemo {//定义一个方法,该方法在C中实现public ...

weixin_31556767的博客 232

jni教程 java_JNI技术-入门教程

前言:为什么用JNI技术,jni技术是连接Java和C/C++的桥梁,最近在封装新的SDK,后端技术是用C++写的,想要调用C++的接口,Java本身是调不到的,所以想要调用C的接口就需要一个桥梁,这时候我们就用到了JNI技术。JNI是什么?:1、首先我们要明白JNI是什么,JNI(Java native Interface -Java本地接口)也就是Java与C/C++连接的桥梁;2、nati...

weixin_36333893的博客 601

java jni教程_JNI技术-入门教程

前言:为什么用JNI技术,jni技术是连接Java和C/C++的桥梁,最近在封装新的SDK,后端技术是用C++写的,想要调用C++的接口,Java本身是调不到的,所以想要调用C的接口就需要一个桥梁,这时候我们就用到了JNI技术。JNI是什么?:1、首先我们要明白JNI是什么,JNI(Java native Interface -Java本地接口)也就是Java与C/C++连接的桥梁;2、nati...

weixin_34124963的博客 423

JNI快速入门

JNI快速入门 JNI为Java Native Interface 即Java本地接口,使用此种机制可以实现Java和C/C++互相调用.本文对该机制进行快速入门, 并记录了我在整个过程中遇到的问题及解决方法。 Java调用C++代码 Java调用C++代码本质上是对C++生成的动态库进行调用而不是直接对C/C++代码进行调用。 第一步:设计Java端接口; public

Dony的专栏 3350

java jni helloword_JNI学习一:编写HelloWorld程序

转载请说明出处~本文教程翻译jni官方文档的部分内容。要查看Jni官方文档,请点击这里先感叹一下时光如水,岁月不留人哇有木有!!!认真想想在XMU的这三年,真的改变了我好多。我还清楚地记得学习C语言写的第一个程序就是Hello,world!那个时候对编程语言真是一窍不通,不过也正是从那个时候开始,对编程产生了兴趣~闲话不多说,既然是入门教程,我们就从简单的Hello,world开始。这个程序使用j...

weixin_39548832的博客 215

windows下学习JNI?eclipse + dev-c++就够了,方便 .

【原创】windows下学习JNI?eclipse + dev-c++就够了,方便 分类: JNI DEV-C++ eclipse 2012-03-03 22:26 308人阅读 评论(0) 收藏 举报 jnieclipsewindowsjavaincludelinux 注:本文是入门教程,关于环境搭建。常用的Eclipse+CDT或者minGW方法本人试过好

248

Android JNI学习:Jni第一行代码

一 前言      Jni开发在Android开发中是一个比较重要的模块,网上虽然有很多文章,但我一开始学习的的时候还是参考了很多,有些文章有疏漏,或者一些小错误,这里我结合了网上那些文章,加上自己的一些感悟和心得,写了这篇文章,意在以前没有接触过 JNI 开发的新手能有一个良好的开端,写出自己第一个Jni程序。二 JNI开发        首先新建一个 Android 工程,我把工程命名为JNI...

qq_24289383的博客 434

类加载器、JNI

Java 类加载器(ClassLoader)的实际使用场景有哪些? 自定义一个类加载器 自定义类加载器 JVM 阅读JDK中ClassLoader注释,以及自定义类加载器 深入理解Java类加载器(ClassLoader) Java虚拟机:深入了解ClassLoader(类加载器) 好怕怕的类加载器 JNI 入门教程 【详解】JNI(Java Native Interface) ...

weixin_41942838的博客 336

linux下使用jni实现c++调用java程序(5)参考资料总结

网上关于利用jni实现c++调用java程序各种博客资料一大堆,但实在太乱了 另外特别是在jni多线程中的使用,资料比较少 所以现在把一些我用过的reference和参考的博客总结如下:   两个reference,有些函数某一参考中可能没有,就参考另一reference吧: oracle reference: http://docs.oracle.com/javase/6/doc

dream2009gd的专栏 852

android studio jni mac,JNI 开发详细初体验 (Mac Android Studio 3.1+)

前言:第一次写JNI,因为搜索到的教程不少都比较旧,有些配置在新版的Android Studio 3.1+ 有点变化,所以,这里写一篇用截止2018年9月开学季最新版的Android Studio 3.1+ 版本的JNI入门教程。java一、配置环境变量android在 .bash_profile 配置文件增长如下配置:bashexport PATH=${PATH}:/Users/hebin.ya...

weixin_39982236的博客 255
上一篇: 《云GIS技术与实践》第一章 云GIS技术综述 笔记
下一篇: 《云GIS技术与实践》第二章 云GIS核心技术 笔记
nmj2008
博客等级 码龄15年 115粉丝 146原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值