Android NDK详解

写这篇文章的目的:

笔者为了项目,学习Android NDK,但是发现所有关于Android NDK的文章,都讲解非常粗糙,让新人容易陷入困惑的境地,笔者不才,花了将近3个小时。

整理如下,若有错误之处,敬请指出。


1.     AndroidNDK下载

Android NDK
http://dl.google.com/android/ndk/android-ndk32-r10-windows-x86.zip

http://dl.google.com/android/ndk/android-ndk32-r10-windows-x86_64.zip
http://dl.google.com/android/ndk/android-ndk32-r10-darwin-x86.tar.bz2
http://dl.google.com/android/ndk/android-ndk32-r10-darwin-x86_64.tar.bz2
http://dl.google.com/android/ndk/android-ndk32-r10-linux-x86.tar.bz2
http://dl.google.com/android/ndk/android-ndk32-r10-linux-x86_64.tar.bz2
http://dl.google.com/android/ndk/android-ndk64-r10-windows-x86.zip
http://dl.google.com/android/ndk/android-ndk64-r10-windows-x86_64.zip
http://dl.google.com/android/ndk/android-ndk64-r10-darwin-x86.tar.bz2
http://dl.google.com/android/ndk/android-ndk64-r10-darwin-x86_64.tar.bz2
http://dl.google.com/android/ndk/android-ndk64-r10-linux-x86.tar.bz2
http://dl.google.com/android/ndk/android-ndk64-r10-linux-x86_64.tar.bz2
http://dl.google.com/android/ndk/android-ndk-r10-cxx-stl-libs-with-debug-info.zip

 

笔者电脑安装的是Win7 64位的操作系统。

所以我选的是

http://dl.google.com/android/ndk/android-ndk64-r10-windows-x86_64.zip

下载下来解压到D盘的Android文件夹。



2.     AndroidNDK 环境变量的配置。

右键单击“我的电脑”->”属性”->”高级系统设置”->”环境变量”,

在path变量里添加ndk存放的目录   D:\Android\android-ndk-r10




打开CMD窗口,键入ndk-build –v, 如果出现如下字符,那么ndk环境已搭建好




3.何为AndroidNDK

首先要先认识到我们电脑绝大部分都是使用X86架构的,而手机使用的是ARM架构,它们程序文件并不能互相通用的。

Android NDK实际上是一个交叉编译工具,让我们可以在非手机、非Android操作系统上,编译出能够在Android系统上使用的库。


4.使用AndroidNDK 把C++的库转成Java接口和.so库。

4.1先在 E:\AndroidWorkspace文件夹里创建一个MyJNI的文件夹。

并新建一个 “TextJNI.java”文件,里面内容键入如下代码:

package com.example.textjni;

public class TextJNI

{

         static{

       System.loadLibrary("jniinterface");

         }

         publicstatic native int getInt();

         publicstatic native String  getString();

}

 

4.2根据我们对java的理解,所以我们创建一个目录树 \com\example\textjni\

并把TextJNI.java文件放进去.



4.2打开CMD窗口,切换到 E:\AndroidWorkspace\MyJNI目录下.


4.2使用javac命令生成class文件,键入命令为, 这里需要搭好JDK环境,如果没有搭,请百度一下,就不在这里说明了。

javac .\com\example\textjni\TextJNI.java


4.2使用javah命令生成jni头文件,键入命令为,

javah –jni com.example.textjni.TextJNI



你会发现MyJNI目录下多一个.h文件,这个头文件是自动生成,无需做任何改动!


4.3新建一个jni的目录,把该头文件放进去,并新建一个TextJNI.cpp文件,我们要在该cpp文件里实现我们的.h接口.


TextJNI.cpp文件内容如下:

#include"com_example_textjni_TextJNI.h"

#include <stdio.h>

#include <stdlib.h>

                                               

int sum ()

{

    int x,y;

    x = 100 ;

    y = 1000;

    x += y;

    returnx;

                                               

}//实现 com_example_textjni_textJNI.h 的方法

JNIEXPORT jint JNICALLJava_com_example_textjni_TextJNI_getInt

    (JNIEnv *, jclass)

{

                                               

    returnsum();

}

JNIEXPORT jstring JNICALLJava_com_example_textjni_TextJNI_getString

    (JNIEnv *env,jclass)

{

                                               

    returnenv->NewStringUTF("HelloNDK");

}


4.2在jni文件夹里创建Android.mk文件.看不懂下面的自行百度

LOCAL_PATH := $(call my-dir)

         

include $(CLEAR_VARS)

         

LOCAL_MODULE    :=jniinterface

LOCAL_SRC_FILES := TextJNI.cpp

         

include $(BUILD_SHARED_LIBRARY)



4.2 使用ndk-build命令生成 .so库, 注意键入该命令的是在MyJNI目录下



你会发现MyJNI目录下多了2个文件夹。

obj是生成中间临时文件的目录,我们不用管它。

在libs\armeabi 下,libjniinterface.so 就是生成的库



以后只要我们提供libjniinterface.so 和TextJNI.java 给客户,他们就可以使用了。


5.使用eclipse创建一个简单的Android工程,并使用上面我们生成的库。这里默认你已经安装好eclipse的Android环境。

5.1 创建一个名为Test的Android项目



5.2 找到该项目所在的目录



把armeabi\libjniinterface.so拷贝进该工程libs目录下。


把java文件按照包名,放进src文件夹里. (包名实际就是目录树,一定要一一对应)


5.3 回到eclipse,编译该项目,它会更新目录。自动把.so和java文件包含进工程中


5.3 编写测试库的代码. 在 “MainActivity.java”文件里 键入如红框的位置:

Toast.makeText(this, TextJNI.getString(), Toast.LENGTH_SHORT).show();

public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			Toast.makeText(this, TextJNI.getString(), Toast.LENGTH_SHORT).show();
			return true;
		}
		return super.onOptionsItemSelected(item);
	}


5.4 运行测试,笔者使用的是Android手机,直接使用它来测试,

选择机器,单机“OK”


5.5 在手机里单击”菜单”->”Settings”.会弹出”HelloNDK”



参考文献:

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0415/1166.html


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值