当前位置: 首页 > 编程日记 > 正文

利用JNI技术在Android中调用C++代码

JNI是Java Native Interface的简称,也就是Java本地接口,它提供了若干的API实现Java和其它语言的通信(主要是C&C++)。

1、打开Eclipse,File-->New-->Project…-->AndroidApplication Project-->Application Name:TestJNI,PackageName:com.testjni.android, Minimum Required SDK:API 10, Android 2.3.3(Gingerbread),Next-->不勾选 Createcustom launcher icon, 勾选Create activity,Next-->选中 BlankActivity,Next-->Activity Name:TestJNIProjectActivity, -->Finish,运行AndroidApplication显示正确;

2、选中src-->com.testjni.android,打开TestJNIProjectActivity.java文件内代码改为:

package com.testjni.android;import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;public class TestJNIProjectActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);TextView tv = new TextView(this);  tv.setText(StringFromJni());  setContentView(tv);  }public native String StringFromJni();static{System.loadLibrary("hello-jni");}}

3、编译该工程,会在bin\classes\com\testjni\android文件夹下生成TestJNIProjectActivity.class文件;

4、打开命令行窗口,将其定位到\bin\classes目录下,输入命令:javah –classpath   D:\ProgramFiles\Android\android-sdk\platforms\android-10\android.jar;com.testjni.android.TestJNIProjectActivity,会在classes文件夹下生成com_testjni_android_TestJNIProjectActivity.h(说明:*.jar也可以是其它版本);

5、选中TestJNI工程,点击右键-->New-->Folder新建一个jni文件夹,选中jni, -->New-->File,新建2个文件,名称分别为hello-jni.c,Android.mk;

6、编写hello-jni.c文件,代码为:

#include <string.h>
#include <jni.h>JNIEXPORT jstring JNICALL Java_com_testjni_android_TestJNIProjectActivity_StringFromJni(JNIEnv * env, jobject thiz)
{return (*env)->NewStringUTF(env, "Hello from JNI !");
}

7、 创建Android.mk文件,其内容为:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := hello-jniLOCAL_SRC_FILES := hello-jni.cinclude $(BUILD_SHARED_LIBRARY)

8、利用NDK生成.so文件:选中工程,点击右键-->Properties-->Builders-->New,新建立一个Builder,在弹出的对话框上点中Program,点击OK;在弹出对话框EditConfiguration中,配置选项卡Main:Location中填入NDK安装目录,D:\ProgramFiles\Android\android-sdk\android-ndk-r9\ndk-build.cmd;WorkingDirectory中填入工程的根目录,E:\Test\Android\HelloJni,点击Apply;配置选项卡Refresh,勾选Refreshresources upon completion, The entire workspace, Recursively includesub-folders,点击Apply;配置Build Options选项卡,勾选Allocate Console(necessary for input), After a “Clean”, Duringmanual builds, During auto builds, Specify working set of relevant resources,点击SpecifyResources..,勾选TestJNI工程的jni目录,点击Finish,点击Apply,点击OK,会在\libs\armeabi目录下生成相应的libhello-jni.so库;

9、运行该工程,一切显示正确。

以上是.c文件的操作步骤,若将.c文件该为.cpp文件,则需改动两个文件:

1、Android.mk:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := hello-jniLOCAL_SRC_FILES := hello-jni.cppinclude $(BUILD_SHARED_LIBRARY)


2、hello-jni.cpp:

#include <string.h>
#include <jni.h>#ifdef __cplusplus
extern "C" {
#endifJNIEXPORT jstring JNICALL Java_com_example_testjni_TestJNIProjectActivity_StringFromJni(JNIEnv * env, jobject thiz)
{return env->NewStringUTF("Hello from JNI !");
}#ifdef __cplusplus
}
#endif

参考文献:

1、  http://blog.csdn.net/haha_mingg/article/details/6332115

2、  http://blog.csdn.net/cghs123/article/details/7044826

3、  http://blog.csdn.net/laczff21/article/details/7542236

4、 android-ndk-r9-windows-x86_64中例子代码

相关文章:

微软开源数据处理引擎 Trill,每天可分析万亿次事件

微软近日开源了数据处理引擎 Trill&#xff0c;它每天能够分析万亿次事件。项目地址&#xff1a;https://github.com/Microsoft/trill当下每毫秒处理大量数据正成为一种常见的业务需求&#xff0c;此次微软开源的 Trill&#xff0c;据说每秒能够处理高达数十亿事件&#xff0c;…

【杭电ACM】1097 A hard puzzle

【杭电ACM】1097 A hard puzzle http://acm.hdu.edu.cn/showproblem.php?pid1097 先用int手写了算法结果竟然wrong answer&#xff0c;估计是测试数据很大&#xff0c;直接上BigInteger 和modPow()&#xff0c;轻松解决。 1 //author:pz2 3 import java.math.BigInteger;4 im…

mvc 下的 signalR使用小结

2019独角兽企业重金招聘Python工程师标准>>> sirnal下有两种使用。 一种是 Persistent Connection &#xff0c;另外一种是Hubs 。详细请看 https://github.com/SignalR/SignalR/wiki &#xff1b; hubs支持浏览器与客户端互相调用方法。所以应用更广泛。 在前台…

利用JNI技术在Android中调用C++形式的OpenGL ES 2.0函数

1、 打开Eclipse&#xff0c;File-->New-->Project…-->Android-->AndroidApplication Project,Next-->Application Name:FillTriangle, PackageName:com.filltriangle.android,Minimum Required SDK:API 10Android2.3.3(Gingerbread),Next--&g…

Python三十年技术演变史

作者 | 宋天龙&#xff0c;大数据技术专家&#xff0c;触脉咨询合伙人兼副总裁&#xff0c;前Webtrekk中国区技术和咨询负责人&#xff08;Webtrekk&#xff0c;德国的在线数据分析服务提供商&#xff09;。擅长数据挖掘、建模、分析与运营&#xff0c;精通端到端数据价值场景设…

php 扩展包链接

https://pecl.php.net/package-stats.php?cid7转载于:https://www.cnblogs.com/gaoyuechen/p/10148754.html

面向中小企业的视频云服务 视频托管

2019独角兽企业重金招聘Python工程师标准>>> 面向中小企业的视频云服务解决方案 如果你是一个传统的企业网站&#xff0c;想要在网站首页加入一段视频&#xff0c;或者是一个垂直资讯网站想要开设视频频道&#xff0c;又或者想要进行一项活动的在线直播。这时候也许…

VS2010下编译OpenCV2.4.6静态库

1、 从 http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.3/ 下载最新的OpenCV2.4.6&#xff1b; 2、 将OpenCV-2.4.6.0.exe存放到D:\Soft\OpenCV2.4.6文件夹下&#xff0c;解压到当前文件夹下&#xff0c;生成一个opencv文件夹&#xff1b; 3、 下…

【性能优化之道】每秒上万并发下的Spring Cloud参数优化实战

一、写在前面 相信不少朋友都在自己公司使用Spring Cloud框架来构建微服务架构&#xff0c;毕竟现在这是非常火的一门技术。 如果只是用户量很少的传统IT系统&#xff0c;使用Spring Cloud可能还暴露不出什么问题。 如果是较多用户量&#xff0c;高峰每秒高达上万并发请求的互联…

共话数据智能新经济,首届市北·GMIS 2019全球数据智能峰会隆重召开

7月19日&#xff0c;上海市市北高新技术服务业园区&#xff08;以下简称“市北高新”&#xff09;成功举办首届「市北GMIS 2019全球数据智能峰会」&#xff08;以下简称“市北GMIS峰会”&#xff09;。为期两天的市北GMIS峰会以“拥抱数智经济&#xff0c;赋能产业生态”为主题…

最新剑桥《AI全景报告》出炉:中国发表机器学习学术研究超过美国

来源 | 转载自新智元&#xff08;ID:AI_era&#xff09;2019年即将过去一半&#xff0c;剑桥大学的两位研究人员近日推出了本年度的State AI 2019全景报告。本报告基本沿袭去年的大体框架&#xff0c;从产业、人才、政策、预测等方面对过去一年来AI领域的技术的新进步、产业格局…

《OpenMP编译原理及实现技术》摘录

内容摘自《OpenMP编译原理及实现技术》第2章 代码测试环境&#xff1a;Windows7 64bit, VS2010, 4核机。 可以说OpenMP制导指令将C语言扩展为一个并行语言&#xff0c;但OpenMP本身不是一种独立的并行语言&#xff0c;而是为多处理器上编写并行程序而设计的、指导共享内存、多…

C# 36进制转10进制

代码是Java转过来的&#xff0c;变量名都没有改……有空再整理一下好了。public long toDecimal(string input, long bs){try{long Bigtemp 0, temp 1;int len input.Length;for (int i len - 1; i > 0; i--){if (i ! len - 1)temp * bs;long num changeDec(input[i]);…

Oracle Cloud Native Framework推出云原生解决方案

摘要&#xff1a;Oracle Cloud Native Framework云原生平台提供托管云服务和本地软件&#xff0c;同时在现Oracle云基础架构上跨应用程序配置和分析大量服务。developer relations for Oracle Cloud Infrastructure副总裁Bob Quillin讨论了该框架的优势以及对2019年云原生市场的…

OpenMP知识点汇总

1. OpenMP(Open Multi-Processing)官网&#xff1a;http://openmp.org/wp/ 2. OpenMP最新版本4.0&#xff0c;2013年7月发布。Visual Studio 2010内置支持OpenMP2.0&#xff0c;选中工程属性->C/C->Language->Open MP Support:选中Yes(/openmp)即可&#xff0c;然后在…

chsop 兼容jquery(解决与transport.js冲突)

2019独角兽企业重金招聘Python工程师标准>>> $(function() { window.__Object_toJSONString Object.prototype.toJSONString; delete Object.prototype.toJSONString; }); 要用到jquery的页面放入此代码即可 转载于:https://my.oschina.net/netmouse/blog/1241…

进程详细剖析(二)

摘自《C多核高级编程》 5.6.3 进程状态 在进程执行期间&#xff0c;它的状态会发生改变。进程的状态时指进程的当前状况。在POSIX兼容的环境中&#xff0c;进程可以处于以下状态&#xff1a; 1&#xff09;运行&#xff08;running&#xff09; 2&#xff09;就绪(runnable, r…

AI算力需求6年增长30万倍,「超异构计算」才能满足下一个10年

今年 3 月&#xff0c;「强化学习教父」Richard Sutton 在《苦涩的教训》一文中指出&#xff0c;「70 年的人工智能研究史告诉我们&#xff0c;利用计算能力的一般方法最终是最有效的方法。要在短期内有所提升&#xff0c;研究人员要利用专门领域的人类知识。但如果想要长期的获…

一览六月最热的5篇AI技术论文

作者 | 神经小姐姐转载自HyperAI超神经&#xff08;ID: HyperAI&#xff09;导语&#xff1a;始建于 1991 年的 arXiv.org 至今已收录超过 100 万篇论文预印本&#xff0c;近年来&#xff0c;其每月提交量已经超过 1 万篇。这里成为一个巨大的学习宝库。本文罗列了 arXiv.org 上…

OnCheckedChanged的触发需要AutoPostBack=true

OnCheckedChanged的触发需要AutoPostBack"true"

OpenCV中resize函数五种插值算法的实现过程

最新版OpenCV2.4.7中&#xff0c;cv::resize函数有五种插值算法&#xff1a;最近邻、双线性、双三次、基于像素区域关系、兰索斯插值。下面用for循环代替cv::resize函数来说明其详细的插值实现过程&#xff0c;其中部分代码摘自于cv::resize函数中的源代码。 每种插值算法的前…

企业金融云存储建设之路

当前世界形势千变万化&#xff0c;各种技术创新层出不穷&#xff0c;新兴业务模式也是波谲云诡&#xff0c;企业的信息化建设如何紧跟业务&#xff0c;适应业务乃至驱动业务转型是各级管理者的头等题目。对于底层执行者&#xff0c;如何能够快速满足企业的要求&#xff0c;如何…

【原创】VB利用堆栈实现算术表达式计算

这个抽象算法早已为人所知&#xff0c;只不过在VB的公开文档中鲜见示例代码。于是&#xff0c;为了提高自己的程序设计水平&#xff0c;锻炼自己的能力&#xff0c;我写了如下代码。 【VB代码版权所有&#xff0c;允许转载修改用作学习目的&#xff0c;转载必须注明来源】 【求…

树莓派4与英伟达Jetson Nano性能大比拼,谁是最佳的嵌入式“电脑”?

作者 | Chris Pietschmann译者 | 弯月&#xff0c;责编 | 屠敏转载自CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;导读&#xff1a;日前&#xff0c;Raspberry 基金会发布了开发者为之兴奋的 Raspberry Pi 4&#xff0c;其不仅在性能上进行了全面的升级&#xff0c;而且…

作为互联网流量入口,CDN日志大数据你该怎么玩?

CDN是非常重要的互联网基础设施&#xff0c;用户可以通过CDN&#xff0c;快速的访问网络中各种图片&#xff0c;视频等资源。在访问过程中&#xff0c;CDN会产生大量的日志数据&#xff0c;而随着如今越来越复杂的网络环境变化&#xff0c;和业务的迅速增长&#xff0c;日志数据…

OpenCV中图像旋转(warpAffine)算法的实现过程

在OpenCV中&#xff0c;目前并没有现成的函数直接用来实现图像旋转&#xff0c;它是用仿射变换函数cv::warpAffine来实现的&#xff0c;此函数目前支持4种插值算法&#xff0c;最近邻、双线性、双三次、兰索斯插值&#xff0c;如果传进去的参数为基于像素区域关系插值算法(INTE…

10亿美元续命!OpenAI获微软投资,意在通用人工智能?

来源 | OpenAI官博译者 | 孙薇编辑 | 一一出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 7 月 22 日&#xff0c;微软宣布将对非营利人工智能研究组织 OpenAI 投资 10 亿美元&#xff0c;用于通用人工智能&#xff08;AGI&#xff09;的开发。双方将以微软原有的公…

TrayIcon 类 添加系统托盘不显示托盘图标

为什么80%的码农都做不了架构师&#xff1f;>>> 好久不碰 java swing最近写了一个swing 程序 添加托盘时&#xff0c;怎么也不显示图标&#xff0c;就一空白 &#xff0c;在网上搜了老半天&#xff0c;大部无效。 边看帖子边看 java api ,结合理解,有一属性设置了一…

Crystal Report 加载模板报错 无法在c++ 堆栈中打开由jrc 引擎处理的文档

2019独角兽企业重金招聘Python工程师标准>>> 纠结了很久, 尝试过录入一个错误的路径,文件读取也是包相同的错误,也就是表示找不到路径文件而已,并不是开发环境的问题 于是设置一个最简单的路径,放置下去rpt模板,代码后续没有报错; 再次之前也修复了一个关于引用的dl…

Ubuntu下makefile及gcc生成静态库动态库的简单使用举例

环境&#xff1a;Ubuntu-13.10 32位(虚拟机)、gcc4.8.1 首先创建一个test_makefile_gcc文件夹&#xff0c;此test_makefile_gcc文件夹下包括&#xff1a;src文件夹用于存放源文件&#xff1b; include文件夹用于存放头文件&#xff1b;bin文件夹用于存放生成的动态库.so文件&…