[mac]Android NDK 学习随笔
随着android学习的深入,总该接触NDK(native development kit)了。
它是干啥用的呢?简单地说,就是在android应用中调用c/c++代码。
好~,既然知道它是干啥的就该说说怎么用了。
1、首先,最讨厌的配环境了!
下载NDK,谷歌的网站反正我是高低进不去,我是在国内网游分享的资源中下载的,搜一搜总是有的。我用的是版本是"android-ndk-r8c".
2、配置环境变量,无论是mac os 还是windows这一步都是必不可少的。
打开终端,进入个人的home目录,新建文件.bash_profile
open .bash_profile
export PAHT=$PATH:/Users/litanze/Documents/java/android-sdk-macosx/tools
export PATH=$PATH:/Users/litanze/Documents/java/android-ndk-r8c
ANDROID_NDK_ROOT=/Users/litanze/Documents/java/android-ndk-r8c
export ANDROID_NDK_ROOT
ANDROID_SDK_ROOT= /Users/litanze/Documents/java/android-sdk-macosx
exprot ANDROID_SDK_ROOT
设置好之后 control+x 保存 Y 保存文件 enter
3、进入eclipse可以开始了
我不得不说网上文章都好像,为什么一定要用samples里面的例子呢?
a、自己创建一个android工程"HelloNDK";
b、创建文件夹jni
c、创建除activity之外的一个类(用来调用c/c++代码)LoadNDK.java
public class LoadNDK { static{ System.loadLibrary("loadNDK"); } public native void getStr(); public native int getInt(); }
这里需要注意的是:
System.loadLibrary("loadNDK")
中的loadNDK就是最后你生成的*.so文件的名称 只是如果生成libloadNDK,你不需要选择全名 只要loadNDK就可以了。
4、打开终端进入src目录 用javac命令编译此LoadNDK.java 文件:javac <package name>/LoadNDK.java
5、利用javah根据编译出的字节码文件生成对应的c/c++头文件:javah -jni <pachage name>.LoadNDK
注意编译和生成头文件之间的区别,一个是分隔符是'/'一个分隔符是'.' 而都在src目录下操作。ps:我当初就困在这个问题上好久!!
6、把生成的头文件拷贝到工程目录下的jni文件夹下,然后创建一个*.c或*.cpp文件include <生成的头文件>可以开始编写代码了

如图是我的jni目录
生成头文件为:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class cn_newtouch_ndk_LoadNDK */ #ifndef _Included_cn_newtouch_ndk_LoadNDK #define _Included_cn_newtouch_ndk_LoadNDK #ifdef __cplusplus extern "C" { #endif /* * Class: cn_newtouch_ndk_LoadNDK * Method: getStr * Signature: ()V */ JNIEXPORT void JNICALL Java_cn_newtouch_ndk_LoadNDK_getStr (JNIEnv *, jobject); /* * Class: cn_newtouch_ndk_LoadNDK * Method: getInt * Signature: ()I */ JNIEXPORT jint JNICALL Java_cn_newtouch_ndk_LoadNDK_getInt (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif
然后自己编写c/c++代码
#include <cn_newtouch_ndk_LoadNDK.h> #include <string.h> #include <stdio.h> JNIEXPORT void JNICALL Java_cn_newtouch_ndk_LoadNDK_getStr (JNIEnv *env, jclass aaa){ printf("hello jni"); } JNIEXPORT jint JNICALL Java_cn_newtouch_ndk_LoadNDK_getInt (JNIEnv *env, jobject bbb){ return 1; }
7、配置工程的ndk编译环境(说白了,就是生成*.so的编译环境)
工程->properties->Builders->New->Program OK

之后在弹出的窗口中配置如下图

注意cd 后面跟着是你工程的目录地址

选择specific source 点击Specify Recourses

选择libs文件夹
继续。。。

除了改勾的勾好自后,点击Specify Resources 如如下图

这次选择jni文件夹
好了 都设置好之后,就ok了。
做这些的主要目的是,让eclipse自动编译你编写好的c/c++代码生成*.so并自动放在工程中的libs文件夹中。
做好这些就可以了~我也是菜鸟有说的不好的广大网友不要喷我,我也仅是当做记录~

浙公网安备 33010602011771号