jni android rect.h,【NDK】NDK本地API介绍

原文:android-ndk-r5\docs\STABLE-APIS.html

一些“API的级别”定义。每个级别的AP对应一个给定的Android版本,目前支持:

android-3 -> 官方Android

1.5 系统映像  (C、C++、Math、Log、Zlib)

android-4 -> 官方Android

1.6 系统映像  (OpenGL ES 1.x)

android-5 -> 官方Android

2.0 系统映像  (OpenGL ES 2.0)

android-6 -> 官方Android

2.0.1 系统映像

android-7 -> 官方Android

2.1 系统映像 android-8 -> 官方Android

2.2 系统映像  (jnigraphics)

android-9 -> 官方Android

2.3 系统映像  (OpenSL

ES、android)

请注意,android-6和android-7和android-5相同,即他们的本地API是完全一样的!

什么级别有什么头文件,在下面路径下可以找到:

$NDK/platforms/android-/arch-arm/usr/include

二、Android-3 Stable Native APIs:

下面列出的所有API是用于开发NDK代码,可用于运行在Android 1.5系统的及以后版本.

(1)C库:

C库的头文件,在Android

1.5中定义的可用通过他们标准名称找到(/,中,等..).

如果一个头在构建时不存在,可能是在1.5班中中没有实现

编译系统自动链接C库到您的本机模块,您不必将它添加到LOCAL_LDLIBS.

请注意,机器人C库包含的pthread()的支持, 所以“LOCAL_LIBS:= - lpthread”是没有必要的。

(2)数学库:

是可用的,在构建时.数学库会自动链接到您的本地代码中,

所以不需要指定LOCAL_LDLIBS := -lm

(3)C++库:

C++非常小的一部分API是支持的.对于Android 1.5,仅允许下列头文件:

他们不可能包含所有标准的定义.

值得注意的是,在Android 1.5中,C++异常和RTTI支持是不可用。

C++支持库(-lstdc++)是自动链接到你的本地代码中,

所以不需要指定LOCAL_LDLIBS

(4)Android

Log:

包含可用于从您的本机代码中发送各种定义日志的信息。

请您看其内容(build/platforms/android-3/common/include/android/log.h),其中包含如何使用它.

您应该写一个宏来包装他们,以方便使用.

如果你使用它,你的本机模块应该链接/system/lib/liblog.so:

LOCAL_LDLIBS:= -llog

(5)Zlib压缩库:

和可以使用,可用于使用了zlib压缩库。

如果你使用它,你的本机模块应该链接/system/lib/libz.so:

LOCAL_LDLIBS := -lz

(6)动态链接库:

可以使用,dlopen()/dlsym()/dlclose()

提供的Android动态链接器功能。您将需要链接/system/lib/libdl.so:

LOCAL_LDLIBS := -ldl

三. Android-4 Stable Native APIs:

下面列出的所有API是用于开发本机代码,可用于运行在Android 1.6系统的及以后版本.

(1)OpenGL ES

1.x的库:

标准的OpenGL

ES的头文件和,

如果您使用它们,你的本机模块应该链接到/system/lib/libGLESv1_CM.so,如:

LOCAL_LDLIBS := - lGLESv1_CM

'1.X'号是指OpenGL ES API的两个版本1.0和1.1。 请注意:

- OpenGL ES

1.0是支持所有的Android设备

- OpenGL ES

1.1完全支持相应的图形处理器特定的设备

是因为Android1.0使用相对较少的设备.

开发人员应该查询OpenGL ES版本字符串和扩展名字符串,如果知道当前设备支持哪些东西。

参见glGetString()的说明,以了解如何做到这一点:

http://www.khronos.org/opengles/sdk/1.1/docs/man/glGetString.xml

此外,开发者必须在manifest.xml中指明标签,说明应用程序使用 哪些OpenGL ES版本。有关详细信息,请查看下面链接的信息:

http://developer.android.com/guide/topics/manifest/uses-feature-element.html

请注意,目前,本地的头文件和库在 EGL APIs是不可用.

EGL是用于执行平面创建和翻转(而不是渲染).

相应的操作必须要在您的应用程序而不是虚拟机。

四、Android-5 Stable Native APIs:

下面列出的所有API是用于开发本机代码,可用于运行在Android 2.0系统的及以后版本.

(1)OpenGL ES

2.0库:

标准的OpenGL ES

2.0的头文件和,

在本地调用中,要包含声明需要执行从本地代码调用的OpenGL ES 2.0渲染

这包括定义顶点和片段着色器的使用的GLSL的语言。

如果您使用它们,你的本机模块应该链接到/system/lib/libGLESv2.so如:

LOCAL_LDLIBS := -lGLESv2

并非所有设备都支持OpenGL ES 2.0,开发人员应该这样查询 实现的版本和扩展字符串,见上文第三节详情。

请注意,目前,本地的头文件和库在 EGL

APIs是不可用.

EGL是用于执行平面创建和翻转(而不是渲染).

相应的操作必须要在您的应用程序而不是虚拟机。

重要注意事项: Android模拟器不支持OpenGL ES 2.0的硬件.

如果运行和测试代码,使用这个API需要真实的设备.

(意思使用这个OPenGL的库,必须真机运行或调试)

五、Android-8 Stable Native APIs:

下面列出的所有API是用于开发本机代码,可用于运行在Android 2.2系统的及以后版本.

(1)'jnigraphics'库:

这是一个很小的库,展示一个稳定的,基于C语言的,接口,使 本机代码安全地访问Java对象的像素缓冲区的位图.

使用它,在你的源代码中包含,并链接库jnigraphics:

LOCAL_LDLIBS + = -ljnigraphics

详细信息,请阅读bitmap.h:

build/platforms/android-8/arch-arm/usr/include/android/bitmap.h

简单地说,典型的使用应该是这样的:

1 根据JNI位图句柄,然后使用AndroidBitmap_getInfo()来检索有关信息 (例如它的宽度/高度/像素格式)

2 使用AndroidBitmap_lockPixels()来锁定像素缓冲区和指针。

直到AndroidBitmap_unlockPixels()被调用之前可确保像素

不被移动???

3 修改像素缓冲区,本地代码中根据其像素格式,宽度,步幅等

4 调用AndroidBitmap_unlockPixels()来解锁缓冲区。

六、Android-9 Stable Native APIs:

下面列出的所有API是用于开发本机代码,可用于运行在Android 2.3系统的及以后版本.

(1)OpenSL

ES的音频库:

使用它,在你的源代码中包含和.

包含需要从本地端的Android执行音频输入和输出的声明.

注意:尽管目前OpenSL

ES的规范使用,

目前Khronos的修改了,使用该文件建议包含,

以后使用这个库使用Android的方案

这个API版本也提供Android的特定扩展,详情请参看

该系统库命名为“libOpenSLES.so”,它在本地代码中实现了音频功能。

在你的模块使用以下链接:

LOCAL_LDLIBS + = - lOpenSLES

(2)Android的本地应用程序的APIs:

从API 9起,有可能完全写一个Android本机代码应用程序(即没有任何Java).

这并不意味着您的代码不运行在虚拟机,

虽然,大部分的功能在该平台将仍然需要通过JNI访问.

更多的关于这个主题的信息,

请阅读docs/NATIVE-ACTIVITY.html(TODO:写文档)

下面的头文件是新增的本地API:

 活动生命周期管理(和入口点)

    直接从本地代码监听和传感器的输入事件

    窗口管理,包括能够锁定/解锁像素,可在缓冲区中操作.

直接(只读)访问您的.apk文件嵌入资源或 在不透明的二进制(OBB)文件,允许分配应用程序

大量的数据在.apk外.

(对于开发游戏是非常有用的,例如)

相应的功能函数在"libandroid.so"库中,

API 9才能使用.要使用它,使用以下配置:

LOCAL_LDLIBS + = - landroid

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值