第一步:配置NDK运行环境

两个工具包:

com.android.ide.eclipse.ndk_23.0.2.1259578.jar

android-ndk-r10(当然也可以是一些其他类似的工具包,如android-ndk-r8)

前者为搭建NDK环境时,必需的工具包。需要将其置于eclipse的plugins文件夹中。然后重启eclipse即可。

前者工具包下载连接

后者为eclipse运行JNI程序所需要的工具包,将其置于一个你习惯的路径下。放置好之后,进行环境变量的配置,如下图:

添加NDK路径:

在window工具栏中选择preferences选项进入Preferences对话框,如下:

上面所说的第一个工具包就是为产生上图中的3“NDK”的,如果不出意外,添加完第一个工具包后就会有这个选项了。然后上图中的第4步就是去添加我们的第二个工具包。

经过上面的步骤,我们的开发环境已经搭建完成了。

第二步:创建Android工程

新建Android工程:

新建项目和普通Android工程没什么不同。

添加本地支持:

新建好工程之后,我们就需要对其进行添加本地支持

此步操作完成之后,会自动生成Android.mk配置文件和相应的cpp文件,mk文件内容:

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE    := William_Hello_JNI
LOCAL_SRC_FILES := William_Hello_JNI.cppinclude $(BUILD_SHARED_LIBRARY)

而对于那个LOCAL_MODULE    := William_Hello_JNI中的William_Hello_JNI则是在Java代码中需要去调用的Library,后面会有说明。

当然,这两步的前提还是你已经添加了第一个工具包。

编写C++代码:

接下来,就可以试着去写你的C++代码了(就在刚刚生成的那个William_Hello_JNI.cpp中去编写)。我的示例是这样的:

#include <jni.h>
#include <string.h>extern "C" {JNIEXPORT jstring JNICALL Java_com_demo_jni_MainActivity_sayhello(JNIEnv * env, jobject obj);
}JNIEXPORT jstring JNICALL Java_com_demo_jni_MainActivity_sayhello(JNIEnv * env, jobject obj) {return env->NewStringUTF("Hello From cpp.");
}

对于上面的C++代码可以看到有一个方法:JNIEXPORT jstring JNICALL Java_com_demo_jni_MainActivity_sayhello(JNIEnv * env, jobject obj);

其中的组成部分说明如下:

JNIEXPORT 固定部分,表示JNI外部引入

jstring 表示返回类型

JNICALL 固定部分,顾名思义,是表示此方法提供给JNI层去调用

Java 固定部分,表示后面的部分是Java代码的内容

com_demo_jni 是Java代码中的程序包名

MainActivity 表示相应方法所在的类名

sayhello 就是这里与Java代码中一一对应的方法名

编写Java代码:

对于Java代码第一步要做的事件就是引入C/C++中的库,这里的库就是我们在添加本地支持的时候生成的Android.mk文件中的LOCAL_MODULE的值。

例如我的工程中就是:

static {System.loadLibrary("William_Hello_JNI");
}

完整主函数,如下:

public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);EditText showJNI = (EditText) findViewById(R.id.activity_main_jni_show);showJNI.setText(sayhello());}public native String sayhello();static {System.loadLibrary("William_Hello_JNI");}
}

运行效果图:

源码下载:

工程源码:http://download.csdn.net/detail/u013761665/8369031

参考

参考博文:http://blog.csdn.net/yf210yf/article/details/9264587

Android JNI的第一步——从HelloWorld开始相关推荐

  1. Android JNI入门第一篇——HelloJni

    android支持使用NDK开发C程序,关于配置NDK环境问题应该不用再赘述了,这个网上有很多,这里通过一篇实例来讲述简单的JNI开发,大家可以参考这篇文章(Get Your Eclipse-Inte ...

  2. Eclipse+超快的模拟器Genymotion开发Android应用(第一步:安装及配置Genymotion)

    一.安装及配置Genymotion (1)由于Eclipse中自带的SDK模拟器,启动之慢,不说了 现在给大家介绍一种比较快的模拟器Genymotion (2)首先去Genymotion的官网注册一个 ...

  3. Android studio创建第一个项目并运行

    开发第一步就是输出Hello World,今天记录Android studio的第一步开发. 下面记录最简单的项目运行: 首先打开软件可以看到如下页面,我们创建一个新项目 这里我们需要给项目取一个名称 ...

  4. Qt For Android 第一步 环境配置

    Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架.现在已经全面支持iOS.Android.WP. 当时Qt刚开始支持安卓的时候,忘记了是5.1还是5.0版本.自己写了一个H ...

  5. Android JNI初试之环境搭建,最新方式的HelloWorld

    前言 最近有个图片识别的需求.需要使用OpenCV,于是研究起了JNI,发现很多资料过旧.绕了大圈.踩了几个坑.总结一下. 什么是JNI Java Native Interface , 实现Java和 ...

  6. Hello Android – 迈出android开发第一步

    环境搭建基本上比较顺利,除了下载SDK需要花不少时间 L 比起.Net的开发环境,java总是需要DEV更多的自己动手,偶更喜欢傻瓜型的部署 J 构建HelloAndroid项目: 1. File - ...

  7. Qt 第一步 HelloWorld 的第一个程序

    简言 Qt 是基于C++的 GUI 解决方案.QT简单易学(底层封装的好).跨平台.相关资料易得到. 开始写Qt 相关的文章的主要原因是,我本人在编写一个视频录制及相关处理的项目,写到一半发现.net ...

  8. android JIN 第一步 生成java转换成class然后再转化成.h文件

    经过一番查找,可算搞定了java转成c的.h头文件的这第一步. 方法如下 第一步:创建 native方法的java类. 方法 m1和m2分别是调用native. package com.demo.st ...

  9. 开发Android第一步,安装SDK 1.6, 模拟器及安装游戏

    转自:http://bbs.weiphone.com/read.php?tid=516501 开发Android第一步,安装SDK 1.6, 模拟器及安装游戏 windows 方法 (1) 下载 An ...

最新文章

  1. 语言生成不自闭迷宫_4招教你分清自闭症、多动症、发育迟缓、抑郁症的区别...
  2. OpenStack 虚拟机热迁移流程图
  3. 查看linux服务器硬盘IO读写负载
  4. Form表单插件jquery.form.js
  5. ECS事件通知之创建失败事件
  6. Uploadify jquery+flash+UploadHandler.ashx .(用)
  7. 2.4 shell 脚本基础
  8. Vue-cli 3.0+ 设置接口代理 设置vue.config.js的配置项
  9. Activity、View、Window的理解一篇文章就够了
  10. Java设计模式之工厂模式
  11. 用excel做数据分析
  12. PHP完全自学手册01.pdf
  13. (转)wincap抓包原理
  14. 阿里笔试之Java分词统计
  15. 罗斯蒙特333D信号转换器
  16. 璞华大数据HawkEye设备数字化管理之远程协助功能
  17. 机械加工工艺品配件的影响
  18. spring data jdbc 基本使用
  19. Reactive Extensions (Rx) 入门(5) —— Rx的事件编程③
  20. 让我们并肩作战—机房合作

热门文章

  1. 数据结构--插入排序
  2. 【django】创建django项目工程
  3. 思考:通过MMU/TLB/Cache对安全内存攻击的可能性
  4. Fabric--简单的资产Chaincode
  5. 透露抖音、腾讯、阿里、美团招开发岗位硬核面试题,轻轻松松收到offer
  6. 160个Crackme007
  7. Java多线程的实现方式-Thread 类,Runnable 接口
  8. Webstorm/PhpStorm打开多个项目文件夹
  9. 51nod1008 N的阶乘 mod P(水题)
  10. ACM入门之【树状数组】