创建第一个NDK程序

初学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,前两章中文版已随代码上传

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值