Android NDK基础

终于下定决心开始写博客了,现在还是菜鸟一只,只能玩玩基础,废话不多说,这是羽化第一篇博客文章,以后会定期更新自己最近学习经历的文章,与大家共同学习,如果有错的地方希望大家指点,由于我还在学习中,大部分代码引用他人,如有冒犯,请见谅,非常感谢那些无私贡献的人,还有感谢公司里照顾我的同事们-0-

 

开发环境

Window XP

Eclipse Helios Service Release 2

NDK-r5c

cygwin 1.7.9

MB525 defy 部分代码要求系统2.2或2.2以上

 

本次学习

1.NDK需求方向

2.NDK环境搭建

3.NDK使用方法

4.NDK使用延展

 

1.NDK需求方向

网上很多介绍NDK的作用,我这只是说说基本方向,NDK提供的API不多,这些API主要用于游戏开发、性能挖掘等,比如:

l  OpenGL 2.0,包括支持(Java)SDK所支持的一些新版本

l  Math,(一些,但非全部的,专门针对计算的算法。在native层面实现可获得更好的性能)

l  2D graphics,从2.2开始支持像素缓冲(pixelbuffer)

l  libc,提供了兼容性支持,并可能为移植现有native代码提供方便

 

2.NDK环境搭建

1)在Eclipse中增加C/C++支持   //非必须

在Eclipse中选择Help—>Install new software,选择相应版本的站点选择下图的组建安装。

 

 

2)安装Cygwin 模拟提供Unix环境的工具

可以到www.cygwin.com下载Cygwin,选择在线安装(非常漫长。。。),在安装过程中Devel根节点边上的“Default”要点成“Install”。

 

 

也可以离线安装,LocalPackage Directory步骤中选择自己离线包的目录。Devel根节点也要点成“Install”。

 

 

 

注意:Cygwin很不安装很不稳定,如果第一次没安装成功就再安装一次试试。

 

若要检查必要工具是否安装成功,可以打开Cygwin后在里面输入gcc -v和make -v 可以看到相应信息。我是安装在C盘根目录下。


 

 

3)安装NDK

可以在http://developer.android.com/sdk/ndk/index.html下载最新的NDK,下载完成后放在任意地方,我是解压放在C盘根目录下。

 

 

3.NDK使用方法

先从简单的Hello开始,了解NDK的使用方法。

1) 创建项目NDK1,输入相应代码

无论是调用还是生成so,都必须要加载库和声明本地代码。

// 加载库 – 名字必须匹配jni/Android.mk
static
{
	System.loadLibrary("NDK12");
}
// 声明本地代码函数 – 必须匹配NDK1.c
private native String invokeNativeFunction();

注意:如果so文件生成后项目名字发生改变,生成的so文件是不能使用的,必须重新生成一遍。

 

2) 根节点创建一个文件夹jni,里面生成两个文件Android.mk和NDK1.c   //Android.mk名字不能更改

 

3) NDK1.c是C语言的内容,这里jstring表示返回的是String类型,后面的包路径一定不能搞错。

#include <string.h>

#include <jni.h>

jstring Java_com_LB_NDK1_NDK1_invokeNativeFunction(JNIEnv* env, jobject javaThis)
{
         return (*env)->NewStringUTF(env, "Hello from native code!");
}


 

4) Android.mk里面输入的数据必须按照一定的规则,其格式可以在网上查到。其中LOCAL_SRC_FILES的文件命要与C语言程序的文件名一样,LOCAL_MODULE的内容必须和主类里面的System.loadLibrary的内容一致。

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Here we give our module name and source file(s)

LOCAL_MODULE          := NDK12

LOCAL_SRC_FILES       := NDK1.c

include $(BUILD_SHARED_LIBRARY)

 

5)准备步骤都完成了,就可以开始生成so文件 这里命令的写法可以去查下linux的常见命令

打开cygwin,在cygwin中打开项目所在的文件夹,为了方便把项目放在了C盘根目录下,输入cd /cygdrive/c/NDK1 就到了项目目录中。

 

/cygdrive/c/NDK1 运行NDK目录中的nkd-build就会自动生成so文件

 

 

此时打开项目会发现多出来两个文件夹obj和libs,里面就放着编译好的so文件

 

6) 此时运行项目,可以得到C语言中传来的字符串了,注意:C语言传输的String只能为UTF-8编码格式

 

4.NDK使用延展

1)运行一个简单算法

这里是用NDK2的例子,实现一个四则运算算法。

代码方面基本类似,这里使用了另一种生成方法,先生成一个.h的头文件。

 

具体生成方法,可以在cygwin中或者命令窗口中完成,这里在命令窗口中完成。

 

生成后放到jni目录下就可以了,其中NDK2.c写法发生了改变。

 

2)改变图片灰度

NDK3的例子,实现把一张图片灰度改变,和传统方法进行比较。

注意:由于是C++文件,所以Android.mk的写法发生改变

 

3) 数据传输

NDK4的例子,实现数据传输,在SD卡上创建文件。据说速度快于Android的传统方法。

 

4) 改变图片加强版

NDK5的例子,和NDK3类似。

这里使用了Application.mk,其作用是描述了应用程序需要哪些动态库和静态库。生成so文件方式一样,只要放在jni目录里面即可。注意:因为调用了某些库,不能在2.2一下的机器上运行。

 

5) OpenGL应用

Particletest的例子,通过OpenGl的接口,实现爆炸特效。

 

 

代码由羽化亲自修改真机上运行,没有任何问题,代码下载地址

http://download.csdn.net/source/3435189

 

下集预告:

Android Unity3D基础

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值