初探Android NDK 编程

今天我们聊聊Android NDK编程,其实也是为了让自己记忆的更深刻些,因为我半年前也研究过这个,但是一直项目里面没用到过,所以就一直搁着,现在想想,竟然忘得一干二净,所以想着还是很有必要为此写篇博客,在加强记忆的同时,也让更多的同行少走弯路。

首先呢,要准备一些必要的材料。
第一个是开发工具,eclipse
第二个是下载NDK开发包,网址是https://developer.android.com/ndk/downloads/index.html,当然,这个是需要翻墙的,如果不会翻墙,其实也没关系,因为很多镜像网站其实也有。
第三个是下载一个ADT,具体有什么用,我待会儿会说到,这是下载地址:http://pan.baidu.com/s/1dFl4ZQx,存放在我的个人网盘里。

基本的工具都准备好了,那我们就开始配置相关的环境吧,eclipse的环境,我就不多说了,既然都搞NDK了,那eclipse也不会差到哪儿。最重要的还是配置NDK的环境变量,我们要怎么配置呢,首先打开你下载好的NDK开发包,找到ndk-build文件所在的目录,拷贝路径,到环境变量里的path去配置即可。那怎么才算配置好了呢,大家看下面的图:

这里写图片描述

如果出现这样的提示,那就证明配置好了。

下面就可以打开eclipse,配置ADT环境了,刚刚第三步下载的ADT没删除吧?现在可是有大用。在eclipse的Help里面,找到安装插件菜单,然后添加,选择刚刚下载到的ADT压缩包,直接确认下一步直到完成,安装好了他会提示你是否重启,重启好了,就可以使用了。

那我们现在开始编程:

首先记住几个常用的命令:
第一个:javah -classpath bin\classes -d jni 类的全名(包括包名跟类名)

第二个:ndk-build

以上两个命令,都是在所在项目的根目录下执行的,不然没有效果。

好了,基础的事做做好了,下面开始创建一个简单的Hello NDK;

1、打开eclipse,新建一个Android project,暂时取名叫HelloNdk;
2、在根目录新建一个文件,取名叫jni,
3、在MainActivity里,定义一个方法:

public static native String getStringBuffer();

这是一个native方法,用于跟c交互的。

下面开始执行第一个命令,用以生成native的.h文件,
以我当前环境为例子:

javah -classpath bin\classes;D:\adt-bundle-windows-x86-20140702\sdk\platforms\android-21\android.jar -d jni com.example.hellondk.MainActivity;

这里解释一下

D:\adt-bundle-windows-x86-20140702\sdk\platforms\android-21\android.jar,

其实这个倒事无关紧要,用不着特别的去下载,你只要在sdk里面找找就行了,任何版本都行,如果不想记住这么长的路径,你可以在以后执行命令的时候,拷贝一个到项目根目录下,那就不需要输入这个了。

执行完后,刷新一下jni文件夹,你会发现多了一个文件,叫

com_example_hellondk_MainActivity.h

接下来,我们新建一个c文件取名叫Hello.c
代码内容是:

#include <stdio.h>
#include <stdlib.h>
#include "com_example_hellondk_MainActivity.h"

JNIEXPORT jstring JNICALL Java_com_example_hellondk_MainActivity_getStringBuffer(
        JNIEnv * env, jclass jclass) {
return (*env)->NewStringUTF(env,"Hello Ndk");
}

为什么这么写,初学者暂时不要深究,但是有一个地方需要注意的,

#include "com_example_hellondk_MainActivity.h"

这个地方是没有括号的,切记。

接下来到了最关键的一步,编写Android.mk文件,这是一个配置文件,需要自己新建,
具体操作是:选中jni文件夹,然后新建一个文件,取名为Android.mk,代码内容是:

LOCAL_PATH :=$(call my-dir)

include $(CLEAR_VARS)
#这里是配置.so文件的文件名字
LOCAL_MODULE  :=HelloNdk
#所要加载的c语言文件
LOCAL_SRC_FILES :=Hello.c
#LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
LOCAL_EXPORT_LDLIBS := -llog
#配置动态库,BUILD_STATIC_LIBRARY 是静态库 文件后缀名是.o
include $(BUILD_SHARED_LIBRARY) 

这样的话,我们就把mk文件配置好了

接下来就是生成.so文件的重要步骤了。
在项目根目录下,打开dos命令行,输入ndk-build,待执行完成后,刷新一下根目录,会发现多了一个文件夹,里面多了好多的.so文件,说明我们已经成功创建了.so文件了。

接下来,就试试能不能获取到native层的数据了。

打开MainActivity文件,编写如下代码。

public class MainActivity extends Activity {
    static {
    //这里的HelloNdk文件名是用的Android.mk文件下LOCAL_MODULE定义的名字
        System.loadLibrary("HelloNdk");
    }

    public static native String getStringBuffer();

    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = (TextView) findViewById(R.id.textview);
        textView.setText(getStringBuffer());

    }
}

基本上,这一套流程下来,就成功完成了一个NDK的简单开发,但是具体的学问还很多,我们一起去深入学习吧!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值