Android
简介:
Android
注意:
Android
subtle
一、
——————————————————————————
Android
——您的应用程序的源代码将声明一个或多个方法通过实施以本机关键字,指示本机代码。
例如:native
——你必须提供一个本地共享库,包含了这些方法的实现,它将被打包到你应用程序中。这个库必须根据标准
Unix约定 lib<something>.so。所以,应当包含一个标准的JNI入口点(稍后说明)。
例如:libFileLoader.so
——您的应用程序必须显式地加载库。例如,在应用程序启动的时候加载它,只需添加以下其源代码:
static {
注意,不要lib和.so作为前缀和后缀。
——生成jni兼容共享库,可以运行在ARM处理器Android1.5平台(更高)。
——复制生成的共享库到你的工程项目适当的位置,那么他们将被自动添加到你的apk中。
随后的修正
——1套系统头文件对应于本地代码api接口,用于Android平台的支持。保证在以后的版本中支持所有的平台。
他们都被记录在
记住,在以后的更新和发布的平台,大多数的本地系统库在Android系统被冻结或者可能发生了彻底的变化,甚至删除。
处理所有的工具链/平台/ CPU / ABI的细节。此外,后来更新的NDK可以支持更多的工具链、平台,
系统接口,不需要改变在开发者的构建文件(稍后再说)。
——————————————————————————
NDK 不是一个好的方式来编写通用的本地代码,运行在Android设备。特别是,你的应用程序仍应写在Java编程语言,Android系统事件处理要适当避免“应用程序没有响应”对话框或处理Android应用程序生命周期。
$PROJECT/jni/
$PROJECT是项目相对应的 Android 应用程序的路径。
您可以很自由地组织 'jni' 的内容,你想,目录名称和结构在这里将不会影响最后生成应用程序的软件包,因此您不必使用com.<mycompany>.<myproject>作为应用程序软件包的名称。
请注意 C 和 c + + 的源程序都支持。NDK默认的 c + + 文件扩展名支持的是 '.cpp',但也可以处理其他扩展
(请参阅文档docs/ANDROID-MK.html 代码的详细信息)。
$PROJECT/jni/Android.mk
如果您要定义 Android。mk 在子目录中的文件,您应该显式包括他们在您的顶级Android.mk中。甚至还有这样
做,即一个辅助函数使用:
include $(call all-subdir-makefiles)
他将包括当前编译文件的路径下子目录中所有的Android.mk。
II.4/ 编写Application.mk生成文件 (可选):
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Application.mk文件描述了您对生成系统的模块。要了解此文件 请参阅 docs/APPLICATION-MK.html。
这包括,除这些外:
-您的应用程序所需的模块确切列表。
-要生成的机器代码 CPU architecture(s)。
-可选信息,如您希望发布版本或调试建造、特定的 C 或 c + + 编译器标志及其他,适用于所有正在修建的模块。
此文件是可选的: 在默认情况下 NDK 将提供一个,只是生成所有模块列出从您的Android.mk(和所有的它包括的makefiles) 和平台的默认 CPU ABI (armeabi)。
这里有两个方法可以使用Application.mk:
-根据$PROJECT/jni/Application.mk,它将会被 'ndk-build'脚本自动选取 (更多在后面介绍)
-根据$NDK/apps/<name>/Application.mk,其中 $NDK指向您 NDK 的安装路径。在此之后,从 NDK 目录启动
"make APP=<name>"。这是 Android NDK r4 之前,使用此文件的方式。
这是它还支持、兼容的原因,但我们强烈鼓励您改为使用第一种方法,因为它更简单,不需要修改 / 更改NDK 安装目录树。
再次请参考docs/APPLICATION-MK。
III.5/ 调用 NDK 构建系统:
- - - - - - - - - - - - - - - - - -
建立与 NDK 的机器代码的首选的方式是使用'ndk-build'脚本,在Android NDK r4 ndk中介绍了。您还可以使用第二种,创建一个'$NDK/apps' 子目录的方法。
在这两种情况下,生成成功,将复制最终的二进制模块(即从您的应用程序到您的应用程序所需的共享的库)
(请注意,原始的版本用于调试,没有必要将原始的二进制文件复制到设备)。
1: 使用"ndk-build"命令:
---------------------------------
"ndk-build"这个脚本位于ndk安装目录,你可以在应用程序目录(例如放AndroidManifest.xml的那个目录)或者其他子目录,例如:
cd $PROJECT $NDK/ndk-build
这将启动 NDK 生成脚本,它将自动探测您开发系统和应用程序项目文件,以确定能造出什么。
例如:
ndk-build
ndk-build clean --> 清理生成的二进制文件
ndk-build -B V=1 --> 强制重新编译和显示编译细节
默认情况下,需要$PROJECT/jni/Application.mk和$PROJECT/jni/Android.mk。
一旦成功了,就会复制二进制文件到你的工程目录树下,你可以重新编译应用程序包用"ant"命令或者ADT插件。
详细的请看docs/NDK-BUILD.html。
III.6/ 指定的自定义输出目录:
- - - - - - - - - - - - - - - - - - - - - - -
默认情况下,ndk-build放置生成的所有中间文件到$PROJECT/obj目录,但是可以通过环境变量定义 NDK_OUT 选择一个不同的位置来指向一个不同的目录。
定义时,此变量将产生两个效果:
1 /,用$NDK_OUT替代后确保正常,$PROJECT/obj的所有文件都保存好.
2 / 它告诉 ndk-gdb 寻找$NDK_OUT,而不是 $PROJECT/obj版本的生成的二进制文件。
四、重建您的应用程序包:
- - - - - - - - - - - - - - - - - - -
用NDK生成的二进制文件之后, 您需要重新生成您Android 应用程序包文件 (.apk),即
使用"ant"命令或 ADT Eclipse 的插件。
请参阅更多详细信息的 Android SDK 文档。在系统上安装apk时,新的 apk 会自动提取和嵌入您的共享的库到目标设备。
五、 调试支持:
- - - - - - - - - - -
NDK 提供了帮助器脚本,名为 ndk-gdb,这很容易启动您的应用程序的本机调试会话。
本机调试仅可以运行在设备Android 2.2 或更高上,并且不需要 root 或特权的访问权限,很长时间,您的应用程序是可调试的。
更多的信息,请参看 docs/NDK-GDB。html 。总括而言,本机调试有下面这个简单的几步:
1.确保您的应用程序是可调试 (例如设置您的 AndroidManifest.xml中的android:debuggable ="true"。)
2.用ndk-build构建您的应用程序,然后将其安装在您设备/模拟器。
3.启动您的应用程序。
4.从您的应用程序项目目录运行 ndk-gdb。
您将得到一个 gdb 提示符。请参阅 GDB 用户手册上有用的命令。