本篇文章只介绍android ndk在windows系统的编译环境配置方法

更新于2015年1月11日

将更加详细的介绍一个基本的Android Jni项目的建立。

步骤一:下图是必须的,配置好这一步骤就可以进行Android JNI项目的创建了。

骤二:新建一个Android项目,大家都会的,图片就不贴了。

步骤三:项目右键 -->Android Tools -->Add Native Support,然后弹出下图,填写的lib名称就是要用到的库

步骤四:上述步骤完成就工程出现了 jni 文件夹

步骤五:打开TestNdk1.cpp文件是下图:

步骤六:会出现以下问题,说明是一些文件库没有包含进去,所以我们做如下配置

项目--> 右键properties -->c/c++ General 如下图:

步骤七:点击Add出现如下:

步骤八:点击File system 选择路径NDK下的 D:\android-ndk-r9d\platforms\android-9\arch-arm\usr\include; NDK的版本和android-的版本根据自己的情况作出选择;

;OK之后会弹出选择是否重新编译,选择YES;如果发现 jni目录下的的TestNdk1.cpp的错误提示没有了,就成功了。

同时还需要设置一个属性。工程--->右键properties ---->C/c++ Build 在Builder Settings下取消掉use default build command 然后在Build Command中填上Ndk下的ndk-build.cmd的路径。

步骤九:接下来创建一个头文件

头文件的样例代码如下,以后的代码都可以用这个样例进行修改:(做了一个Add函数和一个返回字符串的函数)

/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_example_jni_TestJni */#ifndef _Included_com_example_testndk1_TestJni#define _Included_com_example_testndk1_TestJni#ifdef __cplusplusextern "C" {#endif/* * Class:     com_example_jni_TestJni * Method:    add * Signature: (II)I */JNIEXPORT jint JNICALL Java_com_example_testndk1_TestJni_Add(JNIEnv *,jobject, jint, jint);JNIEXPORT jstring JNICALL Java_com_example_testndk1_TestJni_getString(JNIEnv *,jobject);#ifdef __cplusplus}#endif#endif

详解:<1>JNIEXPORTJNICALL都是JNI的关键字,表示此函数是要被JNI调用的。

<2>JNIEnv类型实际上代表了Java环境,通过这个JNIEnv* 指针,就可以对Java端的代码进行操作。例如,创建Java类中俄对象,调用Java对象的方法,获取Java对象中的属性等等。JNIEnv的指针会被JNI传入到本地方法的实现函数中来对Java端的代码进行操作。

<3>Java_com_example_testndk1_TestJni_add的起名方式:Java+包名+类名+方法名; “+” 用 “_”替代。方法名严格控制!!!!

<4>jstring 和 jint 是指的一个返回值类型;在#ifndef中需要修改后面的 包名_类名;

<5>注意类名,这个类名值的是获取 c/c++方法的 Java类; 接下来创建这个类,看下图:


步骤十:上面我们创建好了 调用Java类 和调用的 头文件接口; 但是我们还没具体函数的具体实现方式,我们在jni目录下生成的TestNdk.cpp内实现具体方法。代码如下:

#include <jni.h>#include <stdio.h>#include <math.h>#include "TestNdk1.h"JNIEXPORT jint JNICALL Java_com_example_testndk1_TestJni_Add(JNIEnv *, jobject,jint x, jint y) {return x + y;}JNIEXPORT jstring JNICALL Java_com_example_testndk1_TestJni_getString(JNIEnv *env, jobject) {return env->NewStringUTF("HelloWorld From TestNdk1.");}

注意把创建的头文件包含到里面进去。

步骤十一:接下来就是Android Activity中的实现和调用了。最主要的就是装载库,创建自己创建的JNI类的对象。、

首先先创建一个类,来实现JNI的调用。如下类:

package com.example.testndk1;public class TestJni {public native int Add(int x, int y);public native String getString();}

在下面可以直接调用该类

package com.example.testndk1;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.widget.TextView;public class MainActivity extends Activity {TextView textView;//把创建的.so文件装载进去,这个是自己设置的那个名称。static {System.loadLibrary("TestNdk1");}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//创建TestJni对象。TestJni testJni = new TestJni();textView = (TextView) findViewById(R.id.tv);//调用我们的Add方法 int i=testJni.Add(2, 5555);// testJni.getString(); //把返回的字符串和计算出的结果显示在Textview上。textView.setText(testJni.getString()+"\n"+String.valueOf(i));}@Overridepublic 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;}}


步骤十二:综上我们就可以在运行了。
在运行时,console内会显示如下内容,出现这个就编译成功了。

D:\android-ndk-r9d\ndk-build.cmd all
Android NDK: WARNING: APP_PLATFORM android-19 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml
[armeabi] Install : libTestNdk1.so => libs/armeabi/libTestNdk1.so

**** Build Finished ****

下图是运行成功了


综上就是一个具体的工程。希望大家支持啊。内容我也会不断的更新,希望大家多支持,多评论会定时回复。转载请标明出处哦!!

这个工程下载地址:http://download.csdn.net/detail/fengzy1990/8351575


上面看懂了,下面的可以稍微看看。


本文写于2014年4月,更新本文时间于2015年1月8日

更新内容:从Android NDK的初始开发到现在NDK-r10版本,NDK的环境搭载变得更加容易了。

从NDK-R7版本以上NDK就集成了Cygwin,所以就不需要下载Cygwin。

只需要下载NDK后解压,然后在Eclipse中配置上NDK的路径就可以了。



以下2014年4月写;

一、

1、在google官网上下载Android NDK的压缩包,下载网站http://developer.android.com/tools/sdk/ndk/index.html;将解压到E:\Android\android-ndk

2、下载并安装Cygwin。windows系统需要直接进行交叉编译,因此需要安装一个Linux的模拟器Cygwin。到http://www.cygwin.com下载。

3、配置Cygwinde NDK的开发环境,默认Cygwin会安装在C盘的根目录下,修改为c://cygwin/home/username。 bash_profile文件,username会根据用户使用的用户名而变化。在.bash_profile文件的结尾处添加如下代码:

ANDROID_NDK_ROOT=/cygdrive/e/android/android-ndk

export ANDROID_NDK_ROOT

上面的代码说明了android ndk的所在目录

最后一步是测试开发环境是否正常工作,首先启动Cygwin,然后切换到<Android NDK>/build目录中,运行host-setup.sh文件。如果出现

到此为止,编译华宁已经安装配置完毕。

android ndk安装目录包括5个子目录

+apps 是android工程的保存目录。里面有hello-jin和tow-libs是NDK自带的两个示例目录。

+build 保存了交叉编译工具、编译脚本、配置文件

+ docs 是帮助文档的保存目录。

+out 是交叉编译的输出目录,保存输出的so文件。

+sources 是C/C++源代码文件的保存目录,下面的hello-jin和tow-libs子目录,分别保存了NDK自带示例所需要的C/C++源代码文件。 GNUmakfile文件和README.TXT文件分别是make工具的配置文件和NDK的说明文件。

二、

进行android ndk开发需要经过如下的步骤一般

1、建立Application.mk文件

2、建立Android工程

3、家里Android.mk文件

4、建立c源代码文件

5、编译共享库模块

6、运行Android程序。

 

更多相关文章

  1. Android系统集成第三方pre-build库和程序
  2. android字体工作原理
  3. Android工程源文件结构
  4. Android应用中通过AIDL机制实现进程间的通讯实例
  5. Android(安卓)Studio SDK版本兼容问题,拷贝的Android包文件报错
  6. #菜鸟之旅#Android(安卓)Studio开发JNI工程——Native调用Java方
  7. Android清单文件详解(一) ---- 一切从开始
  8. NPM 和webpack 的基础使用
  9. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程

随机推荐

  1. Android(安卓)不同手机分辨率适配(xml方
  2. Andorid入门学习笔记整理(一)
  3. Android(安卓)SDK4.0.3及以上版本支持int
  4. 在开发过程中使用Android返回键
  5. 解决某些手机RadioGroup中的RadioButton
  6. Android使用am命令实现拨打电话、打开应
  7. Android硬件抽象层(HAL)深入剖析(三)
  8. android中的配置权限
  9. 献给android原生应用层开发初学者技术架
  10. android XML文件解析之 SAX解析方法