本篇文章只介绍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 __cplusplus
extern "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>JNIEXPORT和JNICALL都是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");
}
@Override
protected 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));
}
@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;
}
}
步骤十二:综上我们就可以在运行了。
在运行时,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程序。