安装NDK:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- 首先下载android-ndk-r10d-windows-x86_64.exe或其他版本,双击解压缩得到android-ndk-r10d目录;
- 将android-ndk-r10d目录复制到指定路径下,如C:\applications\android-ndk-r10d;
- 配置系统环境变量,新建变量名NDK_HOME,值为C:\applications\android-ndk-r10d,确定即可;
(此如果配合cygwin工具来编译的话,到这里就可以了;但如果用eclipse编译的话需要继续如下配置;) - 选中需要编译的工程->右击选择Properties->选择Builders,在Builders中选择New创建一个Program
- 参数配置
- 编译器配置
(通过以上配置即可完成ndk在eclipse中的配置,接下来进行cygwin配置)
安装cygwin:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- 下载cygwin.exe;
- 运行第1步应用,选择安装目录直接下一步;
- 选择连接方式
- 下一步之后选择需要安装的组件,为了使我们安装的Cygwin能够编译程序,我们需要安装gcc编译器,默认情况下,gcc并不会被安装,我们需要选中它来安装。为了安装gcc,我们用鼠标点开组件列表中的“Devel”分支,在该分支下,有很多组件,如下图:
我们必须的是:
binutils
gcc
gcc-mingw
make
gdb
鼠标点击组件前面的循环按钮,会出现组建的版本日期,我们选择最新的版本安装,下图是选中后的5类组件的截图:
binutils组件:
gcc组件:
gcc-mingw组件:
gdb组件:
Make组件:
组件选择好以后,继续点击“下一步”。 - 进入安装过程,安装的时间依据你选择的组件以及网络情况而定。安装完成后,安装程序会提示是否在桌面上创建Cygwin图标等,点击完成退出安装程序。
安装完成后,点击桌面上的图标即可启动Cygwin。
在Shell窗口上输入make –v以及gcc –v试试,如果安装成功,应该能顺利显示make和gcc的版本信息。 - 配置Cygwin
为了方便使用Cygwin下的命令,可装Cygwin下的bin目录添加到系统的PATH路径,用以下方法进行设置:
1)右击“我的电脑”->属性 ,再选择左边导航的“高级系统设置”选项。
2)点击右下角的“环境变量”选项。
3)在"系统变量"中,找到Path环境变量,双击它,在变量值前面追加以下内容:“C:cygwinbin;”,注意后面有一个分号。
4)点击“确定”完成环境变量设置。
接着,我们将NDK的环境变量添加到Cygwin.bat中,方法是右击桌面上的Cywin图标,选择编辑即可:
在bash –login –i之前增加如下内容:
set NDK=/cygdrive/c/android-ndk-r5b - 编译NDK示例程序(测试NDK开发环境)
启动Cygwin,在命令行中输入以下命令编译hello-jni示例:
# cd /cygdrive/c/android-ndk-r5b/samples/hello-jni
# $NDK/ndk-build clean
# $NDK/ndk-build
上面的命令将清除hello-jni示例项目,并重新编译,编译后将产出 libhello-jni.so 表示编译成功。
至此,Windows系统下的NDK开发环境成功完成安装。 - 配置环境变量,在C:\cygwin64\home\linyehui.bash_profile最后添加两行export ANDROID_NDK_HOME=/cygdrive/c/android-ndk-r9c
export PATH=$ANDROID_NDK_HOME:$PATH
-------------------------------------------------------------------------------------------------------------------------------------------------------------
- 先看一下目录结构
- 首先在com.tnt.hdso包下新建相应的类并创建native方法;
示例:public native String 方法名(); - 在jni/hdecoration.c文件中实现上一步创建的方法;
示例:#include
#include
jstring Java_包名(中间用"_"分隔)_类名_方法名(JNIEnv* env) {
return (*env)->NewStringUTF(env, "要返回的字符串 ");
} -
jni中Android.mk和Application.mk代码分别如下;
Android.mk:
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := hdecoration
LOCAL_SRC_FILES := hdecoration.cinclude $(BUILD_SHARED_LIBRARY)
Application.mk
APP_ABI := all
APP_STL := gnustl_static
APP_PLATFORM := android-8
-
到此代码已完成,下面开始导出;打开cygwin工具,输入
$ cd /cygdrive/e/tnt_project/tnt_HDSO
定位到指定目录下; -
输入 $ ndk-build clean 清空项目下历史so文件;
-
输入 $ ndk-build 生成so文件,完成后将libs下so文件考到项目下libs即可;
-
接着导出so对应native类的jar包
项目右击——》属性——》导出——》选择"jar文件"——》下一步【此步除勾选src下对应包外其余勾全去掉】——》一直“下一步”最后完成即可; -
将导出的jar包考到项目下libs目录即可
-
具体调用如下:
static {
System.loadLibrary("hdecoration[即上面指定的LOCAL_MODULE]");
}
DataKeys mdk = new DataKeys();
Object obj = mdk.getAESKey();