为方便开发jni程序,android提供了ndk包来简化开发过程,避免开发人员下载完整的平台代码,并且可以在windows环境下集成到eclipse里面,大大加快了开发速度。这里记录下一个简单例子。

ADT开发环境:adt-bundle-windows-x86-20140702 Version 23.0.2

NDK的开发包:android-ndk-r10d

NDK的eclipse插件:com.android.ide.eclipse.ndk_23.0.2.1259578.jar 保存到eclipse/plugins/目录下面

重新打开eclipse,在Window -> Perferences -> Android下面会出现NDK的选项,在NDK Location里面选择android-ndk-r10d

的路径位置,如:D:\workspace\prebuild\android-ndk-r10d。 Apply之后按OK退出。

准备工作完成之后,开始新建工程。

1. 新建一个android工程,如ndktest,com.example.ndktest

2. 然后右键 -> Android Tools -> Add Native Support,在弹出的对话框里面填入jni共享库的名称,如:libndktest.so,点击确定之后eclipse会自动生成一个jni目录,并在该目录生成一个Android.mk和一个ndktest.cpp文件。

3. 编辑Activity类,添加jni函数的声明,新增加载动态库函数System.loadLibrary和一个JNI函数的声明

private native String printJNI(String inputStr);

 public class MainActivity extends Activity {

     static {
System.loadLibrary("ndktest");
} private native String printJNI(String inputStr); @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("TAG", printJNI("test"));
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} 23 }

4. 打开命令行,进入到classes目录:d:\workspace\Android\ndktest\bin\classes

执行javah com.example.ndktest.ManActivity, 之后会自动生成一个符合jni规范的头文件:

com_example_ndktest_MainActivity.h

5. 拷贝com_example_ndktest_MainActivity.h到jni目录下,在ndktest.cpp里面包含该头文件

com_example_ndktest_MainActivity.h

 /* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_ndktest_MainActivity */ #ifndef _Included_com_example_ndktest_MainActivity
#define _Included_com_example_ndktest_MainActivity
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_example_ndktest_MainActivity
* Method: printJNI
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_example_ndktest_MainActivity_printJNI
(JNIEnv *, jobject, jstring); #ifdef __cplusplus
}
#endif
#endif

ndktest.cpp

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

Android.mk

 LOCAL_PATH := $(call my-dir)

 include $(CLEAR_VARS)

 LOCAL_MODULE    := ndktest
LOCAL_SRC_FILES := ndktest.cpp include $(BUILD_SHARED_LIBRARY)

6. 最后clean一下工程,自动编译,eclipse会调用ndk去编译生成最终的动态库文件,如libndktest.so,并自动打包到

apk里面。

7. 安装生成的apk,可以在logcat里面看到来自jni的log内容。观察app的安装目录,可以发现最终生成的so库文件是存放在了

root@degasveltechn:/data/data/com.example.ndktest #ll

drwxrwx--x u0_a146  u0_a146           2015-10-04 20:57 cache
lrwxrwxrwx install  install           2015-10-04 20:59 lib -> /data/app-lib/com.example.ndktest-2

库是统一安装到/data/app-lib目录下面的,/data/data/app-name下放的是一个link文件。

android eclipse ndk使用记录的更多相关文章

  1. Android + Eclipse + NDK + cygwin配制

    以前做NDK开发时留下来的笔记,希望对后继开发人员有所帮助,在开放给大家使用,有不对的地方请留,扔砖头都可以的. 为了方便在Win32下开发android C++ 程序,我们作了如下配制:1.Andr ...

  2. 【Android】Android Studio NDK 开发

    Android Studio NDK 开发 记录在Android Studio中NDK简单开发的步骤 用到的Android Studio版本为3.5. 配置NDK 下载NDK 一般在SDK下已经有自带 ...

  3. 【转】android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)

    原文网址:http://www.cnblogs.com/zdz8207/archive/2012/11/27/android-ndk-install.html android 最新 NDK r8 在w ...

  4. android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)

      android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创) 一直想搞NDK开发却一直给其他事情耽搁了,参考了些网上的资料今天终于把 ...

  5. WINDOWS系统Eclipse+NDK+Android + OpenCv

    WINDOWS系统Eclipse+NDK+Android + OpenCv 参考文档博客 1 NDK环境搭建 http://jingyan.baidu.com/article/5d6edee22d90 ...

  6. Android Studio NDK初探

    Android Studio中实现NDK开发较之前Eclipse+Cygwin,方便了很多. 本文以最简单的从C程序中获取字符串,并显示到MainActivity的TextView上为例进行NDK开发 ...

  7. Android之NDK开发(转)

    Android之NDK开发 一.NDK产生的背景 Android平台从诞生起,就已经支持C.C++开发.众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第 ...

  8. Android中NDK的搭建及简单使用 Android.mk相关介绍 JNI的使用

    Android中NDK的搭建及简单使用: 使用NDK,简述其重要步骤:.搭建NDK环境(作用:用于自动生成jni下的.c对应的so文件)---到Android NDK官网或Android官网下载ndk ...

  9. Android之NDK开发

    转自:http://www.cnblogs.com/devinzhang/archive/2012/02/29/2373729.html 一.NDK产生的背景 Android平台从诞生起,就已经支持C ...

随机推荐

  1. tomcat createSecureRandom 花费了将近10分钟

    http://www.th7.cn/Program/java/201603/776312.shtml 启动tomcat很慢,检查后发现:[localhost-startStop-1] org.apac ...

  2. hdu1517A Multiplication Game(巴什博弈变形)

    A Multiplication Game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Ot ...

  3. 180626-Spring之借助Redis设计一个简单访问计数器

    文章链接:https://liuyueyi.github.io/hexblog/2018/06/26/180626-Spring之借助Redis设计一个简单访问计数器/ Spring之借助Redis设 ...

  4. 第五模块:WEB开发基础 第2章·JavaScript基础

    01-JavaScript的历史发展过程 02-js的引入方式和输出 03-命名规范和变量的声明定义 04-五种基本数据类型 05-运算符 06-字符串处理 07-数据类型转换 08-流程控制语句if ...

  5. 【第二章】Shell 变量

    一.什么是变量? 变量就是一个固定的字符串(也可以是字符.数字的组合)代替更多.更复杂的内容,该内容可能是变量.路径.字符串等其他内容. 变量就是程序中保存用户数据的一块内存空间,而变量名就是这块内存 ...

  6. 给你的WP应用加上帮助文档

    背景 这算是Windows Phone编程回顾续篇, 接着给大家聊WP开发经验. 在开发了数个WP应用并发布后, 陆续收到很多反馈邮件, 其中接近一半的邮件是在问"某某功能有没有?" ...

  7. TCP系列19—重传—9、thin stream下的重传

    一.介绍 当TCP连续大量的发送数据的时候,当出现丢包的时候可以有足够的dup ACK来触发快速重传.但是internet上还有大量的交互式服务,这类服务一般都是由小包组成,而且一次操作中需要传输的数 ...

  8. 3DMAX贴图无法显示

    问题描述:我在点击"将材质指定给选定对象"按钮之后,模型只是变灰了,没有显示出我贴的图. 原因是:没有显示贴图. 我的解决方案:点击材质编辑器里面的"视口中显示敏感处理材 ...

  9. web前端之路 - 开篇

    一 web发展历程 了解事物的历史有助于我们渐进式的从发展的思路清楚了解事物的来龙去脉. 这里有一篇网文写得比较清晰和完整:https://www.tianmaying.com/tutorial/we ...

  10. Mysql8 忘记Root密码(转)

    第一步:修改配置文件免密码登录mysql vim /etc/my.cnf 1.2 在 [mysqld]最后加上如下语句 并保持退出文件: skip-grant-tables 1.3 重启mysql服务 ...