最近开始研究Android开发,由于Android SDK基本不熟悉,Java一知半解,1年前大概玩了一下,写了一个扫雷,一个连连看,对Android SDK的API不熟悉,最终放弃了继续学习。因此这次研究选择NDK开发是我的首选,不过作为Android新人,建立开发环境以及运行第一个例程实在是费了我很多时间和脑细胞呀。看了很多过时的教程,最后好不容易跑起来了。下面开始介绍如何搭建开发环境。
这对新人来说提高了门槛,熟手则嫌麻烦。10年前JDK都需要手动配置,现在还是需要手动,安装程序顺便把这几个环境变量写进系统不好吗?对于Android也一样,安装SDK都费老大的劲,版本多如麻,网上的教程也很多,大部分还不顶用。一家之见。不扯远了,我们继续。
Eclipse集成到一起了,赞一个!直接到官网下载adt包,然后解压完就能用了,我下载的版本是adt-bundle-windows-x86-20130729.zip,大家可以根据自己需要来下载相应的版本。
Eclipse,选择菜单Window->Perferences->Android->NDK,把NDK的路径填好即可,如下图。到这里NDK的开发环境就搭建好了。
接下来,我在分享一下如何跑第一个NDK程序。
第一步,建立一个新的Android工程。
第二步,添加JNI支持,网上很多教程上都是比较繁琐的旧方案,需要手动的做很多事情,比如写mk文件等,现在NDK r9做这一步很简单,只需要在项目上点击右键,选择Android Tools->Add Native Support即可,然后Eclipse会自动为我们创建一个jni的工作目录,里面有一个cpp文件和一个mk文件,如下图。
第三步,为这个工程创建c++编译选项。在项目名称上右键点击Properties->Builders->New->Program,进入创建页面,为编译器命名,Location选择NDK目录下的ndk-build.cmd,就是这个文件代替的Cygwin。然后选择工程目录。如下图所示:
然后在Build Options页面勾选specify...,并点击右边的按钮并选择目录然后点OK,如下图:
第四步,编写代码,cpp文件里面编写如下代码,注意命名规则,com_example_firstndk是java包名,FirstNDK是java类名,这里我目前还没找到java是如何找到C++的函数的规则。只有这样才能运行。
#include <string.h>
#include <jni.h>
extern "C"
{
jstring Java_com_example_firstndk_FirstNDK_stringFromJNI(JNIEnv* env, jobject thiz)
{
return env->NewStringUTF("Hello from JNI!");
}
}
然后编写Android 代码,如下:
package com.example.firstndk;
import android.widget.TextView;
import android.os.Bundle;
import android.app.Activity;
public class FirstNDK extends Activity {
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText( stringFromJNI() );
setContentView(tv);
}
public native String stringFromJNI();
public native String unimplementedStringFromJNI();
static {
System.loadLibrary("FirstNDK");
}
}
注意C++代码里面要加extern "C",否则会运行时找不到函数。
这个时候C++代码还是会报错,这是因为还没有将JNI的头文件和库的目录加到Eclipse。
Properties->C/C++ General->Path and Symbols,加入NDK的路径F:\技术预研\android\android-ndk-r9\platforms\android-18\arch-arm\usr\include,再编译就可以了。我今天写博客的时候,发现不用手动也行,写完代码后,直接Build Project,Eclipse自动把相关的目录加上了。
到这里,我们就大功告成啦,运行吧,少年!如果大家按以上没有成功,请联系我吧,哈哈!