前述
虽然我们在其他的博文中(如https://blog.csdn.net/ericbar/article/details/76602720),早就用到了ndk,但如果想在Android设备运行包含这些so的应用程序,还需要将这些so打包到apk里去。
现在主流的Android开发IDE工具是Android Studio,但是本文还是从eclipse入手进行讲述。

指定NDK的位置
打开eclipse,从菜单栏依次选择,Windows——Preferences——Android,通过Browser选择ndk正确的路径,OK完成。

项目添加原生支持
所谓原生支持,就是本地支持,也就是native支持,也就是支持JAVA和C/C++混编。为了测试,我们先建立一个Android项目,比如helloworld,一路自动就好了。
接下来,选中项目名,右键->Android Tools->Add Native Support,

如果是第一次为此项目添加原生支持,会弹出对话框,需要指定so库的名字,如下所示,

这时会在项目中生成一个jni目录,并且自动添加了helloworld.cpp文件。

JAVA里的JNI调用
jni是java native interface的简写,可以通过它实现java和本地c/c++的互相调用,我们在上述例子MainActivity类里,添加对本地接口函数nativeHelloWorld的调用,

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

并声明如下,注意前面的native关键字,

public native void nativeHelloWorld();

加载so共享库
在实现nativeHelloWorld本地方法之前,我们先在MainActivity类里加载libhelloworld.so本地库,参考如下方式,

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

配置eclipse的javah
从菜单栏选择Run->External Tools->External Tools Configurations,左侧栏里选中Program,单击左上角的New launch configuration,再单击Main选项卡, 按照如下信息填写,需要确保Android sdk路径下有类似android-19的文件夹,根据自己sdk实际情况调整,

NAME:  Generate C and C++ Header File
Location: ${system_path:javah}
Working Directory: ${project_loc}/jni
Arguments: -classpath "${project_classpath};${env_var:ANDROID_SDK_HOME}/platforms/android-19/android.jar" ${java_type_name}

接下来,切换到Refresh选项卡,选中Refresh resource upon completion复选框,并在列表中选择The project containing the selecte resource,如下图,

切换到Common选项卡,选中Display in favorites menu组下面的复选框External Tools,如下图,

点击Apply保存配置信息。

通过javah产生头文件
首先必须在左侧的项目栏里,选中包括本地方法声明的java类,一定不要选中在项目上。接下来,点击菜单栏里的Run->External Tools->Generate C and C++ Hearder File,java工具将自动产生对应的头文件。

如果此时遇到 “Unable to launch cygpath” 之类的错误,需要做如下配置:
在项目上点右键,Properties->C/C++ Build,选中Building Settings选项卡,去掉Use default build command,然后输入${NDKROOT}/ndk-build.cmd,如下图,

接下来,在左侧的C/C++ Build中点击Environment,点Add…添加环境变量NDKROOT,值为NDK的根目录,例如我的是D:\eclipse2016\android-ndk-r9d-windows-x86_64\android-ndk-r9d,如下图,

确定后,再次按照前述方法,应该可以顺利的产生jni的头文件了。

最后,如果仍然遇到如下报错,一定是android.jar没找到,需要检查前面的配置是否正确,

错误: 无法访问android.app.Activity
找不到android.app.Activity的类文件

比如,我的默认配置如下,一定要确保sdk/platforms/android-19/android.jar下文件存在,

-classpath "${project_classpath};${env_var:ANDROID_SDK_HOME}/platforms/android-19/android.jar" ${java_type_name}

如果还报错,那就是环境变量ANDROID_SDK_HOME没有配置上,参考下图配置系统环境变量即可。

编写原生代码
通过前述步骤,已经在helloworld项目中jni目录下生成了com_example_helloworld_MainActivity.h文件,我们在helloworld.cpp里实现对应声明的方法即可。只有如下一个函数需要实现,

JNIEXPORT void JNICALL Java_com_example_helloworld_MainActivity_nativeHelloWorld
(JNIEnv *, jobject);

具体代码如下,一定要记得添加com_example_helloworld_MainActivity.h头文件的引用,否则可能运行时找不到函数,但是可以编译通过,出现莫名其妙的错误。这里的log输出借助Android的原生实现,所以,需要在Android.mk里添加LOCAL_LDLIBS += -llog 。

#include <jni.h>
#include <stdio.h>
#include <android/log.h>
#include "com_example_helloworld_MainActivity.h" #define TAG "helloworld"
#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, TAG, __VA_ARGS__) JNIEXPORT void JNICALL Java_com_example_helloworld_MainActivity_nativeHelloWorld
(JNIEnv *, jobject)
{
LOGV("This is jni hello world. ");
}

运行程序,可以在logcat窗口里看到如下结果,

05-09 22:52:54.801: V/helloworld(10412): This is jni hello world. 

from:https://blog.csdn.net/ericbar/article/details/80252171

【转】基于eclipse进行ndk开发的环境配置的更多相关文章

  1. 基于Eclipse的Android开发环境搭建

    1.  Java开发环境搭建 1.1  JDK下载安装 JDK(Java Development Kit )是针对Java开发人员发布的软件开发工具包.JDK 是整个Java的核心,包括了Java运行 ...

  2. 基于eclipse搭建android开发环境-win7 32bit

    基于eclipse搭建android开发环境-win7 32bit 前言:在使用朋友已搭建的Android开发环境时,发现朋友的开发环境版本较低且在update SDk时失败,便决定根据网上文章提示从 ...

  3. 基于Eclipse搭建Hadoop源码环境

    Hadoop使用ant+ivy组织工程,无法直接导入Eclipse中.本文将介绍如何基于Eclipse搭建Hadoop源码环境. 准备工作 本文使用的操作系统为CentOS.需要的软件版本:hadoo ...

  4. Selenium2学习-001-Selenium2 WebUI自动化Java开发 Windows 环境配置

    此文主要介绍 Selenium2 WebUI自动化Java开发 Windows 环境配置,供各位亲们参考,若有不足之处,敬请各位大神指正,非常感谢! 所需软件列表如下所示: 所属分类 具体名称 备注 ...

  5. IntelliJ IDEA开发golang环境配置

    IntelliJ IDEA开发golang环境配置 首先把GO安装好...(自行安装,附上一篇我之前写的MAC安装GO) 安装IntelliJ IDEA,下载地址: https://www.jetbr ...

  6. Android开发adb环境配置

    adb的全称为Android Debug Bridge,就是起到调试桥的作用. 在命令行cmd中打开adb,如果Android开发的环境配置有误,会出现如下错误提示: 解决方法,右键我的电脑-> ...

  7. PHP开发调试环境配置(基于wampserver+Eclipse for PHP Developers )

    1 软件准 WampServer 下载地址:http://www.wampserver.com/en/#download-wrapper    我下的是 里面包含了搭建PHP必须的4个软件:   1. ...

  8. Eclipse++Xdebug开发php环境配置

    一.php环境配置: 本次使用了appserv 2.5.10集成安装包.具体版本如下,安装后php版本是5.2.6 vc6,apache版本2.2 安装完成后,php配置文件在c:\windows目录 ...

  9. [PHP] Eclipse开发PHP环境配置

    首先准备好软件: 1. Apache,到这里找个最新版本 2. PHP,到这里下载 3. Eclipse IDE for Java EE Developers,到这里下载 4. DLTK Core F ...

随机推荐

  1. DB2 With语句递归

    WITH T1 (T11 , T22 , T33 , T44) AS (SELECT TASKID , REPLY , ROWNUMBER () OVER (PARTITION BY TASKID) ...

  2. EasyUI左边树菜单和datagrid分页

    //这个页面是Home.html 1 <!DOCTYPE html> <html> <head> <meta http-equiv="Content ...

  3. Linux centos 时间不同步 date 和 hwclock 时间不一致

    Linux centos 时间不同步 date 和 hwclock 网站有两台服务器,date 查看差3分钟 在应用 APP倒计时 与 直播,时时性较强的功能应用中 请求服务器后返回的服务器时间与数据 ...

  4. Loj #6287 诗歌

    link: https://loj.ac/problem/6287 一开始差点写FFT了23333,并且FFT还能算这样的三元组的数量而且还不用要求这是一个排列.... 但这太大材小用了(而且很可能被 ...

  5. 深入浅出 Cocoa 之 Core Data(1)- 框架详解

    深入浅出 Cocoa 之 Core Data(1)- 框架详解 罗朝辉(http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 Core data 是 Cocoa 中处 ...

  6. nginx +uwsgi + django配置

    一 安装 nginx 二 安装 uwsgi  ,pip install uwsgi 三 配置nginx 打开 nginx.conf文件, location / { # root html; # ind ...

  7. sudo如何保持当前用户的环境变量?

    现象,我在/etc/profile里设置全局代理,然后使用命令 1.curl http://www.baidu.com  走代理 2.sudo curl http://www.baidu.com 并没 ...

  8. 七天学会ASP.NET MVC (四)——用户授权认证问题 【转】

    http://www.cnblogs.com/powertoolsteam/p/MVC_four.html 小编应各位的要求,快马加鞭,马不停蹄的终于:七天学会 Asp.Net MVC 第四篇出炉,在 ...

  9. fastjson设置生成的json属性的顺序

    目标JSON顺序: {,,} 1.url2.w3.h4.s 如果使用默认情况生成,则顺序为: w,h,s,url 在fastJson中,可以使用@JSONField来指定属性顺序(需要1.1.42以上 ...

  10. Flume NetCat Demo

    准备工作: 1.apache官网下载flume 2.解压flume 3.修改flume-env.sh,配置JAVA_HOME NetCat采集Demo: 1.在conf中创建netcat-logger ...