Android开发环境搭建(三)——NDK

1、NDK是什么?
NDK 的全称是Native Development Kit,在JAVA里也有个JNI(Java Native Interface)的概念,可以在JAVA中访问一些C/C++的代码。大家知道在Android SDK里是无法编译C/C++代码的,NDK的作用就是实现C/C++代码的编译。但是Android也不希望开发者将自己的Native代码直接运行, 所以NDK看来只能支持开发JNI代码并打包到相应APK中。

NDK里提供了下面这些头文件,当然也包含动态库。OpenGL ES 1.1需要Android 1.6才支持,OpenGL ES 2.0需要2.0以上系统才支持。

  • libc (C library) headers
  • libm (math library) headers
  • JNI interface headers
  • libz (Zlib compression) headers
  • liblog (Android logging) header
  • OpenGL ES 1.1 and OpenGL ES 2.0 (3D graphics libraries) headers
  • A Minimal set of headers for C++ support


2、NDK安装
如果熟悉Linux,安装起来相当的简单。

NDK下载地址:


下载完后解开:
$ unzip android-ndk-r3-linux-x86.zip

进入SDK目录,安装环境变量:
$ cd android-ndk-r3
$ build/host-setup.sh
Checking host development environment.
NDK Root   : /home/android/android-ndk-r3
GNU Make   : make (version 3.81)
Awk        : awk
Platform   : linux-x86
Generate   : out/host/config.mk
Toolchain  : Checking for arm-eabi-4.2.1 prebuilt binaries

Host setup complete. Please read docs/OVERVIEW.TXT if you don't know what to do.
安装安成,这里不要用“. build/host-setup.sh”或“source build/host-setup.sh”,会直接退出当前shell会话。

3、 NDK示例程序
在NDK目录apps下有几个示例程序:
$ ls apps
hello-gl2  hello-jni  san-angeles  two-libs  unit-tests

这里分析下hello-jni:
apps/hello-jni/
|-- Application.mk
`-- project
    |-- AndroidManifest.xml
    |-- default.properties
    |-- jni
    |   |-- Android.mk
    |   `-- hello-jni.c
    |-- res
    |   `-- values
    |       `-- strings.xml
    |-- src
    |   `-- com
    |       `-- example
    |           `-- hellojni
    |               `-- HelloJni.java
    `-- tests
        |-- AndroidManifest.xml
        |-- default.properties
        `-- src
            `-- com
                `-- example
                    `-- HelloJni
                        `-- HelloJniTest.java

可以看到project、project/tests里是SDK支持的项目代 码,project/jni里是JNI代码。我们用Eclipse打开project,打开后项目名称为“HelloJni”,编译并运行,出现了以下问 题:


从日志中看出是加载JNI代码未成功。编译JNI代码后刷新HelloJni工程,重新编译运行成功,如图。


编译JNI的方法是回到NDK目录,然后执行make:
$ make APP=hello-jni
Android NDK: Building for application 'hello-jni'    
Compile thumb  : hello-jni <= apps/hello-jni/project/jni/hello-jni.c
SharedLibrary  : libhello-jni.so
Install        : libhello-jni.so => apps/hello-jni/project/libs/armeabi

生成JNI库后,重新编译的APK中已经把libhello- jni.so打包了进来。安装APK后JNI库会一并安装到/data/data /com.example.hellojni/lib/libhello-jni.so。

APP后面指定的名字需要同apps下的目录名 和
Android.mk 里的MODULE名一致,project/jni的目录层次也是固定的。其实NDK并非只能编译JNI,在project/jni下编译可执行文件也没有问题,不过NDK里的头文件和库非常有限。


 


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值