花了好几天时间,断断续续的尝试,终于把NDK开发环境搭建好了。
网上已经有了很多的教程,但是自己尝试过程中还是会遇到很多很多的问题,有些在教程中是找不到的,所以把自己搭建的过程记录下来。
相信今后Android Studio提高JNI开发的时候,会省去这些麻烦的步骤
材料1. Eclipse,ADT,SDK 如果Android开发环境还不会搭建的话,建议看其他的
2.NDK 版本android-ndk-r8d
CDT 版本 8.6.0
Cygwin (虽然很多教程说r8已经集成了Cygwin,但是博主搞了很久没搞明白如何使用,干脆下载了Cygwin,安装gcc等重要工具)
安装过程略
第一个程序:在使用android-ndk-r8d/samples/hellojni运行成功之后,再自己手写一个hellojni2,这样能更加明白Eclipse下JNI工程的结构。
这里只涉及到java调用C的过程
步骤一
在工程下新建jni 文件夹,编写c代码(示例代码)
#include<string.h>
#include<jni.h>
jstring Java_com_example_hellojni3_MainActivity_getStringFromJni(JNIEnv *env,
jobject obj){
return (*env)->NewStringUTF(env,"jcc");
}
步骤二
在工程的jni下编写make,
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hellojni
LOCAL_SRC_FILES := hellojni.c
include $(BUILD_SHARED_LIBRARY)
步骤三
打开cygwin,使用模拟linux命令行进入到工程文件夹下面,使用命令$NDK/ndk-build 完成编译,生成hellojni.so文件
其中,$NDK是在cygwin的/home/user/.bash_profile中配置的NDK的根目录,这个命令相当于在工程文件夹下执行ndk-build命令
ndk-build相当于linux命令make,会自动寻找Android.mk文件,完成编译过程
步骤四:
在static代码块中调用生成的hellojni.so文件
java的native
</pre><pre name="code" class="java">
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=(TextView)findViewById(R.id.tv);
tv.setText(getStringFromJni());
}
public native String getStringFromJni();
static{
System.loadLibrary("hellojni");
}
System.loadLibrary("生成的.so文件,不带扩展名");是加载.so文件,在static代码块中,说明当该类第一次被加载到Java虚拟机的时候,hellojni已经被调用了
步骤五 运行android工程