今天正式开始翻译第2章内容
编译和使用NDK自带的实例程序
我想你可能已经迫不及待的想试试自己的新开发环境,那么为什么不首先编译和使用Android NDK提供的基础例子来看它是怎么运行的呢?刚开始我推荐运行HelloJni程序——一个从C代码里面传值到java本地代码里面的程序
行动时间——编译和运行hellojni例子
我们将会从命令行使用ant编译的运行HelloJni工程
1.打开终端窗口(windows下打开Cygwin)
2.进入Android NDK下的hello-jni目录。下面的所有步骤都将会在这个目录下面完成:
$ cd $ANDROID_NDK/samples/hello-jni
3.使用命令 $ android自动生成Ant编译文件和所有的相关的配置文件(windows下是android.bat命令).这些文件描述了怎么编译以及打包一个android应用程序
android update project –p
![](https://img-my.csdn.net/uploads/201210/22/1350875044_3512.png)
4.使用ndk-build(围绕Make命令重构的脚本命令)命令生成libhello-jni本地库文件。ndk-build命令联系起本地c/c++的编译,以及自动调用适合NDK版本的GCC。
$ ndk-build
![](https://img-my.csdn.net/uploads/201210/22/1350875478_6817.png)
5.确保你的android设备或者模拟器已经连接并且正在运行。
6.编译,打包,安装最后生成的HelloJni APK。多亏Ant自动编译工具,所有的这些步骤可以用一条命令完成。除此之外,Ant运行javac去编译Java代码,AAPT打包应用程序,最后通过ADB安装程序。下面仅仅是部分输出的提取:
$ ant install
结果应该像下面的图片:
![](https://img-my.csdn.net/uploads/201210/22/1350875478_6817.png)
![](https://img-my.csdn.net/uploads/201210/22/1350876022_7772.png)
![](https://img-my.csdn.net/uploads/201210/22/1350876032_3162.png)
![](https://img-my.csdn.net/uploads/201210/22/1350876037_6425.png)
7.用adb命令启动一个命令解释器(windows下是adb.exe)。在linux系统中可以找到与ADB相类似的命令解释器
$ adb shell
8.通过这个命令解释器在你的设备或者模拟器上运行HelloJni程序。完成上述将使用am,android的活动管理器。am命令可以启动android活动,服务,以及通过命令来发送intents。命令参数来自android manifest里面:
# am start -a android.intent.action.MAIN -n com.example.hellojni/
com.example.hellojni.HelloJni
![](https://img-my.csdn.net/uploads/201210/22/1350876880_6591.png)
9.最后看看你的手机屏幕或者模拟器。屏幕上出现了HelloJni。
刚刚我们做了什么?
我们通过Ant以及SDK的命令工具编译,打包,安装了一个官方的NDK样例程序。我们将在后面的章节更加详细的探讨。我们也使用ndk-build第一次编译了一个本地C库,这个库在java请求的时候简单的返回一个字符串值。程序的两边,本地和java通过JNI连接起来。JNI是一个标准的框架允许java通过专门的API准确的调用本地的C/C++代码。我们将在本章后面以及下一章了解更多相关知识。
最后我们通过adb shell以及am活动管理器在我们得设备上面运行了HelloJni程序。在第8步的命令参数来自Android manifest:com.exmaple.hellojni是包的名字,com.example.hellojni.HelloJni是主活动类用于联系主包
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.hellojni"
android:versionCode="1"
android:versionName="1.0">
...
<activity android:name=".HelloJni"
android:label="@string/app_name">
...