android  Jni  NDK开发环境搭建及其简单实例的编写

由于工作需要,需要采用开发想要的JNI,由于之前没有接触过安卓的开发,所以更加网上的帖子,学习了下。遇到了些问题,然后总结下学习过程中的问题和开发流程

首先、Jni我的理解,属于一个中间的东西,如果把只做linux 的话,他就是linux的应用程序,但是如果做安卓的话,它就是中间层了(用于java语言调用C语言的接口)。我们说说

开发JNI的开发环境的搭建吧。

第一:我们用windows平台开发

准备工作:

1、我们安卓开发都需要的elipse ,包括SDK,首先要能够开发APK软件。

2、 我们需要一个如同linux 的环境,需要编译的环境,我们采用Cygwin(注意:1.7版本以上),否则不行。

3 、我们需要NDK工具包,可以通过安卓官网下载

1.1、cygwin的安装

下载地址:http://www.cygwin.com/

也可以选择我下载好的地址:http://pan.baidu.com/s/1b1UQE

1.1.1、  可以选择从网上下载最新的安装也可以选择我下载好的安装

1.1.2、  双击cygwin1.7.1/cygwin1.7.1.exe  选择Install form LocalDirectory

1.1.3、  选择安装的路径

1.1.4、  选择的下载之后的路径tmp

1.1.5、  点击下一步直到安装完成。

1.1.6、双击桌面的图标,看是否能够进去。有没有问题(输入gcc 等命令)。

1.2、Android的NDK安装

下载地址:http://developer.android.com/tools/sdk/ndk/index.html

1.2.1、将android-ndk-r9b-windows-x86.zip解压到任意目录(记住即可)

如:E:\android\android-ndk-r9b

1.2.2、设置环境变量(有的方法是通过/home/.bashrc设置的也可以),我就直接设置。右键点击我的电脑-属性(选择高级选项卡,点击环境变量设置),然后选择新建

1.2.3、重新关掉cygwin,然后打开,输入ehco$ndk 看是否显示E:\android\android-ndk-r9b目录,如果可以则设置成功

1.2.4、编译一个简单的实例 如下图,如果生成*.so 就说明没有问题。

第二:安卓JNI实例说明

1、  用eclips 新建一个android 工程

2、  修改Activity

2.1 加入:

static {

//注意你生成的库文件名称(如libhellojni.so),去掉lib和.so即可。

System.loadLibrary("hellojni");

}

2.2加入:

/*

* JNI中的方法

* */

    public static native int open(int fd);

public static native int close(int fd);

public static native String read();

2.3 添加一个按钮:在onCreate方法中

Button tb=(Button)findViewById(R.id.button1);

tb.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

/*调用Jni

*/

open(2);

close(2);

tv.setText(read());//修改文本框中的内容

}});

3、  通过javah生成.h文件(用于编译jni的程序)

3.1 切换到项目目录

#cd "C:\Documents and Settings\gonglinyuan\workspace\HelloJni"

#cd ./bin/class

3.2 执行java –h命令

#javah -jni com.cem.hellojni.HelloActivity

4、  编写jni代码

4.1、在工程目录中建立jni文件夹

#mkdir jni

#cp  ./bin/class/com_cem_hellojni_HelloActivity.h ./jni

4.2、刷新eclipse的目录,新建com_cem_hellojni_HelloActivity.c 文件,实现头文件中的代码,如下面代码

#include <string.h>

#include <jni.h>

#include "android/log.h"

#include "com_cem_hellojni_HelloActivity.h"

static const char *TAG="Hello_module";

char buf[]="icegoly";

#define LOGI(fmt, args...) __android_log_print(ANDROID_LOG_INFO,  TAG, fmt,##args)

#define LOGD(fmt, args...) __android_log_print(ANDROID_LOG_DEBUG, TAG, fmt,##args)

#define LOGE(fmt, args...) __android_log_print(ANDROID_LOG_ERROR, TAG, fmt,##args)

JNIEXPORT jint JNICALL Java_com_cem_hellojni_HelloActivity_open

(JNIEnv *env, jclass jc, jint fd)

{

LOGD("Jni open ing\n");

return 0;

}

JNIEXPORT jint JNICALL Java_com_cem_hellojni_HelloActivity_close

(JNIEnv *env, jclass jc , jint fd)

{

LOGD("Jni Close ing\n");

}

JNIEXPORT jstring JNICALL Java_com_cem_hellojni_HelloActivity_read

(JNIEnv *env , jclass jc)

{

LOGD("Jni Read ing\n");

//当时直接返回一个字符串失败,应该转换一下,APK上层才能够识别

return (*env)->NewStringUTF(env,(char*)buf);

}

5、  编写Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

TARGET_PLATFORM := android-4

LOCAL_MODULE    := hellojni

LOCAL_SRC_FILES := com_cem_hellojni_HelloActivity.c

LOCAL_LDLIBS    := -llog

include $(BUILD_SHARED_LIBRARY)

6、  编写Application.mk

APP_ABI := armeabi armeabi-v7a x86

7、  通过ndk-bulid编译生成库文件

# cd "C:\Documents and Settings\gonglinyuan\workspace\HelloJni"

#$ndk/ ndk-build

Android NDK: WARNING: APP_PLATFORM android-17 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml

[armeabi] Compile thumb  : hellojni <= com_cem_hellojni_HelloActivity.c

[armeabi] SharedLibrary  : libhellojni.so

[armeabi] Install        : libhellojni.so => libs/armeabi/libhellojni.so

[armeabi-v7a] Compile thumb  : hellojni <= com_cem_hellojni_HelloActivity.c

[armeabi-v7a] SharedLibrary  : libhellojni.so

[armeabi-v7a] Install        : libhellojni.so => libs/armeabi-v7a/libhellojni.so

[x86] Compile        : hellojni <= com_cem_hellojni_HelloActivity.c

[x86] SharedLibrary  : libhellojni.so

[x86] Install        : libhellojni.so => libs/x86/libhellojni.so

8、  生成APK文件,测试

最终实例代码下载地址:http://files.cnblogs.com/android100/HelloJni.rar

android Jni NDK开发环境搭建及其简单实例的编写的更多相关文章

  1. Android下NDK开发环境搭建

    Android下NDK开发环境搭建 1.     AndroidNDK安装与配置 1.1  NDK简介 Android NDK是一套允许开发人员使用本地代码(如C/C++)进行Android APP部 ...

  2. Android Studio NDK开发环境搭建

    一.   下载安装Android studio 和 NDK 二.   在Android studio中配置NDK(和SDK配置一样) 三.   用Android studio建立一个工程,打开proj ...

  3. android NDK开发环境搭建

    android NDK开发环境搭建 2012-05-14 00:13:58 分类: 嵌入式 基于 Android NDK 的学习之旅-----环境搭建 工欲善其事必先利其器 , 下面介绍下 Eclip ...

  4. android 5.0开发环境搭建

    Android 5.0 是 Google 于 2014 年 10 月 15 日发布的全新 Android 操作系统.本文将就最新的Android 5.0 开发环境搭建做详细介绍. 工具/原料 jdk- ...

  5. Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例【附详细代码】

    http://blog.csdn.net/xiefu5hh/article/details/51707529 Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例[附 ...

  6. ArcGIS API for JavaScript开发环境搭建及第一个实例demo

    原文:ArcGIS API for JavaScript开发环境搭建及第一个实例demo ESRI公司截止到目前已经发布了最新的ArcGIS Server for JavaScript API v3. ...

  7. android NDK 开发环境搭建

    基于 Android NDK 的学习之旅-----环境搭建 工欲善其事必先利其器 , 下面介绍下 Eclipse SDK NDK Cygwin CDT 集成开发环境的搭建. 1.Android 开发环 ...

  8. Android Studio 2.2 NDK开发环境搭建

    转载请标明出处:http://blog.csdn.net/shensky711/article/details/52763192 本文出自: [HansChen的博客] Android应用程序使用ND ...

  9. NDK开发环境搭建_r8

    本文主内容: 1.  Android NDK 安装 2.  安装Cygwin与使用NDK编译 3.  在Eclipse中集成C/C++开发环境CDT 4.  安装Sequoyah插件 5.  JNI编 ...

随机推荐

  1. Android 之 应用未捕获异常处理

    最近开发一款低功耗蓝牙通讯的 Android 应用,安装使用时多次出现“ 抱歉,xxx已停止 ”.现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不定就出 ...

  2. LevelDB初体验测试

    最近工作需要找一个能使用磁盘存储数据,对写要求比较苛刻,需要每秒达100000TPS,读的时候需要能10000TPS左右,不能占用太多内存.单节点满足这个要求的常见有Redis.Memcached等, ...

  3. IDEA Run/Debug Configurations 中点击“+”号没有tomcat server选项

    环境: 版本:IntelliJ IDEA 2016.3.2系统:windows7 32位 / ubuntu上通用 2.问题: 在IDEA中,对每一个web项目都要配置tomcat服务器,如果你是第一次 ...

  4. TxQueryRunner-JDBC小工具

    1.TxQueryRunner的简介(需要相关jar包的请留言) TxQueryRunner类是common-dbutils下QueryRunner的子类,是用来简化JDBC操作的,所以要导入comm ...

  5. 【Bugly安卓开发干货】Android APP 高速 Pad 化实现

    Bugly 技术干货系列内容主要涉及移动开发方向.是由 Bugly 邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创.转载请标明出处. 怎样能在最快的时间内,实现一个最新 ...

  6. 图像检索:RGBHistogram+欧几里得距离|卡方距离

    RGBHistogram: 分别计算把彩色图像的三个通道R.G.B的一维直方图,然后把这三个通道的颜色直方图结合起来,就是颜色的描写叙述子RGBHistogram. 以下给出计算RGBHistogra ...

  7. Java 实现的SnowFlake生成UUID (Java代码实战-007)

    SnowFlake所生成的ID一共分成四部分: 1.第一位占用1bit,其值始终是0,没有实际作用. 2.时间戳占用41bit,精确到毫秒,总共可以容纳约69 年的时间. 3.工作机器id占用10bi ...

  8. 【Linux】常见Linux默认的shell

    常见的操作系统下的shell: Linux下默认的shell是Bourne Again shell(bash) Solaris和FreeBSD下默认的是Bourne shell(sh) AIX系统下默 ...

  9. PRM路径规划算法

    路径规划作为机器人完成各种任务的基础,一直是研究的热点.研究人员提出了许多规划方法:如人工势场法.单元分解法.随机路标图(PRM)法.快速搜索树(RRT)法等.传统的人工势场.单元分解法需要对空间中的 ...

  10. springMVC自定义方法属性解析器

    使用场景例子: 用户登陆系统一般会往Session里放置一个VO对象,然后在controller里会来获取用户的userId等信息. 之前的写法是:@SessionAttributes配合@Model ...