一、在开始搭建环境之前,你应具备以下几个条件
1、 JDK及环境变量配置正确
2、 安装了Eclipse
3、 安装了Android SDK and ADT
如果没有安装,可以去我的网盘下载集成了sdk和adt的eclipse
地址:http://pan.baidu.com/s/1sjpprlj
二、环境搭建步骤
1、 Android NDK 安装
地址:http://pan.baidu.com/s/1jGgahoE(也可以去官方网站下载)
2、 安装Cygwin
地址:http://pan.baidu.com/s/1c0zjoTq(可以在线安装)
3、 安装Eclipse中C/C++开发环境CDT
三、安装ndk
下载完成后,直接解压到你的目标文件夹下,比如我的:C:\androidDevelop
其中samples是几个实例开发演示项目,docs内是技术文档
四、安装cygwin
2、因为我之前安装的时候采用了备份,所以可以去我的网盘下载安装文件,也可以去官方网站下载,但是下载速度可能不容乐观,我下载了一天。
首先下载setup 官方网址http://www.cygwin.com/
注:下面的安装步骤和安装路径一定要记住,因为卸载的时候要按照安装的步骤同样使用setup卸载,安装的时候新建一个文件夹,不然安装完成后会产生很多文件
(1)在线安装流程
A、下载完setup点击运行,第一步选第一个
B、安装位置
C、本地备份的位置
D、选第一个就行
E、选163的比较快点
F、最后一步 点击devel这行,后边的文字变成install
G、之后一直下一步就行了 下载和安装过程都比较长,你可以干点别的了
(2)本地安装(选在线安装的忽略此步)
基本和之前的步骤一致,只有两处不一样,1、下图这里选第三个2、本地备份的位置选择你安装文件的路径
(3)验证cygwin
到安装目录下运行cygwin.bat。注:第一次运行时,它会自动创建用户信息,用户信息存放在“.\Cygwin\home”中。
输入:“cygcheck -c cygwin”命令,会打印出当前Cygwin的版本和运行状态,如果status是ok的话,则cygwin运行正常。
分别输入:“make –v”和,“gcc –v”命令如果检测成功,会有make和gcc相关版本信息打印出来。
(3)添加NDK路径
我的电脑右键-属性-高级设置-环境变量 名字ndk注意分大小写
变量值/cygdrive/C/androidDevelop/android-ndk-r9d
前面不变c是C盘后面是我的ndk安装路径,注意是“/”因为实在Linux下运行
再打开cygwin.bat运行cd $ndk(注意分大小写的)如果进入到ndk安装目录下说明设置成功
四、安装cdt
打开eclipse-->file-new-project
如果有c/c++这项说明已经集成cdt不需要再安装了
如果没有则Help --> install new software-->
然后把work with这一项改成下图这样
勾掉group
找到eclipse C/C++ 这个 之后一直下一步安装就行了,安装完成后打开eclipse-->file-new-project
如果有c/c++这项说明已经安装成功
五、简单demo测试
简单的回传String值demo
1、新建android项目,只有一个TextView显示信息
public class AndroidJni extends Activity {
public static native String getJniData();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_android_jni);
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setText("测试-->"+getJniData());
}
}
2、打开cmd 输入cd C:\androidDevelop\software\AndroidJni定位到项目目录下
注:androidDevelop\software是eclipse的工作空间,也就是存放刚刚创建的项目的目录;AndroidJni是刚刚创建的android项目的目录
3、输入javah -classpath src -d jni com.example.androidjni.AndroidJni命令生成.h文件
注:com.example.androidjni是包名 AndroidJni是activity的名字
4、回到eclipse 点击project->clean,你会看到项目目录下多了一个jni文件,里面有一个.h的文件
5、在jni文件右键-new-file新建一个AndroidJni.c的文件(名字自己取,下面代码需要一点C基础)
6、打开之前生成的.h文件会看到如下代码
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class com_example_androidjni_AndroidJni */
#ifndef _Included_com_example_androidjni_AndroidJni
#define _Included_com_example_androidjni_AndroidJni
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_example_androidjni_AndroidJni
* Method: getJniData
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_example_androidjni_AndroidJni_getJniData
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
7、把Java_com_example_androidjni_AndroidJni_getJniData (JNIEnv *, jclass)复制到刚刚创建的.c文件中,这个方法就是c/c++与java对接的接口方法。
8、写入头文件
#include
#include "com_example_androidjni_AndroidJni.h"这是刚刚在jni中生成的.h文件,作为C语言的头文件导入c代码中,嫌名字长可以改一下名字
9、实现上面复制过来的方法 注意JNIEnv *env, jclass obj
JNIEXPORT jstring JNICALL Java_com_example_androidjni_AndroidJni_getJniData(
JNIEnv *env, jclass obj) {
return (*env)->NewStringUTF(env, "Hello Jni!");
}
10、最后代码
#include
#include "com_example_androidjni_AndroidJni.h"
JNIEXPORT jstring JNICALL Java_com_example_androidjni_AndroidJni_getJniData(
JNIEnv *env, jclass obj) {
return (*env)->NewStringUTF(env, "Hello Jni!");
}
11、jni文件右键-new-file 新建一个Android.mk文件,内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := AndroidJni (你要生成的库文件的名字,自定义)
LOCAL_SRC_FILES := AndroidJni.c (刚刚创建的.c文件名字)
include $(BUILD_SHARED_LIBRARY)
12、保存文件后打开cygwin.bat
定位到本项目的文件夹下cd c:/androidDevelop/software/AndroidJni
接着输入 ¥ndk/ndk-build,出现下图情况就成功了
13、回到eclipse project-->clean 然后项目目录下多了一个obj文件,打开AndroidJni.java写入以下代码
Static{
System.System.loadLibrary("AndroidJni");;//在Android.mk文件中定义的库名字
}
最后代码:
public class AndroidJni extends Activity {
public static native String getJniData();
static {
System.loadLibrary("AndroidJni");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_android_jni);
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setText("测试-->"+getJniData());
}
}
14、用手机或模拟器运行项目之后可以看到libs文件夹下面多了一个armeabi文件,这时候可以把obj文件删掉,没有什么用处了。手机上运行结果就是输出了 测试-->Hello Jni,armeabi文件中多了一个libAndroidJni.so文件,这就是我们最后需要的文件
如过安装过程中出现问题可参考
http://blog.csdn.net/habbyge/article/details/12321267
http://my.oschina.net/owen123456/blog/85658