您的位置:首页 > 其它

创建第一个NDK程序

2014-03-20 17:28 525 查看
初学NDK开发,感觉不知道如何上手,参考的书籍是《Android NDK Beginner's Guide》,照着做时出现各种错误,折腾好久,终于搞定第一个实例,与大家分享如何从头创建一个NDK程序,希望能让后来者少走些弯路,如有大神路过,也请批评指正。

废话不多说,Getting Started!

0x01 创建一个普通Android应用

这个应该不需要多说,Eclipse里选定选项一路next即可,下面是工程目录结构图:



在这里我新建一个Hello_JNI的应用,目录结构与普通的Android应用完全相同,包名为com.k2048.hello_jni,类名是MainActivity。如果直接运行的话可以看到是一个一个Hello World的APP。

0x02 声明native方法

将MainActivity修改如下:

public class MainActivity extendsActivity {
publicnative String getMyData();//声明native方法
//在静态代码块中加载native库
static{
System.loadLibrary("mylib");
}
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle(getMyData());//修改要显示的文字
}
}


0x03 创建Android.mk文件

         在工程根目录下新建一个jni文件夹(必须是这个名字),然后在此文件夹下创建Android.mk,内容如下:

 LOCAL_PATH :=
$(callmy-dir)

include$(CLEAR_VARS)
LOCAL_MODULE    := mylib
LOCAL_SRC_FILES := com_k2048_hello_jni_MainActivity.c
include$(BUILD_SHARED_LIBRARY)

0x04 使用javah生成头文件

打开CMD窗口,进入到工程目录的bin\class目录下,因为javah通过.class文件生成头文件。执行如下命令:
Javah –classpath. –jni com.k2048.hello_jni.MainActivity
执行结果如下:



将会在classes目录下生成com_k2048_hello_jni_MainActivity.h文件。

0x05 实现native函数

将com_k2048_hello_jni_MainActivity.h放到jni目录下,然后在jni目录下新建com_k2048_hello_jni_MainActivity.c文件,写入如下内容:

#include"com_k2048_hellojni_MainActivity.h"
JNIEXPORT jstring Java_com_k2048_hello_1jni_MainActivity_getMyData
(JNIEnv* pEnv, jobject pThis)
{
return (*pEnv)->NewStringUTF(pEnv,"My native project talks C++");
}


然后再CMD中将目录回退到工程目录下,执行:

ndk-build

执行结果如下:



在工程中刷新后会发现libs文件夹变为:



0x06 Run the Application!

经历以上几步之后,native库libmylib.so已经生成,可以直接选择Runas Android Application运行项目,NDK程序已成功执行:



注:

Eclipse中配置javah使用,《AndroidNDK Beginner's Guide》可能描述的有误,我按照书中配好External Tools之后,出现如下错误:



这是我的配置:



此处应该是类路径描述错误,但是Arguments不知后面的类路径怎么配置,恳请各路大神赐教。

代码请移步:http://download.csdn.net/detail/zlyf1101/7072901
PS:创建成功后悲剧的发现,网上有《AndroidNDK Beginner's Guide》前两章的中文版,可怜我看了一上午的英文……o(╯□╰)o,前两章中文版已随代码上传
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ndk jni 实例 创建