Android开发环境搭建(三)——NDK_android 安装awk-程序员宅基地

技术标签: library  java  jni  android  ANDROID  compression  interface  

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里的头文件和库非常有限。


 


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/steadfast/article/details/5480217

智能推荐

ComfyUI 一键整合包- AIStarter启动器专属_comfyui-aki-v1.1.7z-程序员宅基地

文章浏览阅读532次,点赞9次,收藏7次。AIStarter使用教程及注意事项 -AIStarter tutorials and notes on how to use it。_comfyui-aki-v1.1.7z

【linu相关】Ubuntu 文件系统相关命令_bantu系统命令-程序员宅基地

文章浏览阅读8k次,点赞4次,收藏35次。linux系统(以Ubuntu系统为例)的文件系统Linux下“/”就是根目录,所有的目录都是有根目录衍生出来的。/是一切目录的起点,如大树的主干。其它的所有目录都是基于树干的枝条或者枝叶。在ubuntu中硬件设备如光驱、软驱、usb设备都将挂载到这颗繁茂的枝干之下,作为文件来管理。_bantu系统命令

有效解决linux后台运行python脚本_sh 脚本后台执行还在输出-程序员宅基地

文章浏览阅读4.4k次。1.sh test.sh &将sh test.sh任务放到后台 ,即使关闭xshell退出当前session依然继续运行,但标准输出和标准错误信息会丢失(缺少的日志的输出)将sh test.sh任务放到后台 ,关闭xshell,对应的任务也跟着停止。2. nohup sh test.sh将sh test.sh任务放到后台,关闭标准输入,终端不再能够接收任何输入(标准输入),重定向标..._sh 脚本后台执行还在输出

每日MySQL之020:使用EXPLAIN查看SQL的执行计划_mysql explain query_cost-程序员宅基地

文章浏览阅读1.2k次。MySQL中要查看执行计划,可以使用EXPLAIN命令,EXPLAIN 使用的对象是 SELECT, DELETE, INSERT, REPLACE, 和 UPDATE 语句。将EXPLAIN换成DESCRIBE也行,两者含义一样,但实际操作中一般用DESCRIBE查看表结构,用EXPLAIN查看执行计划。输出的结果不是图形化的,而是一张表。对于每个SELECT语句中的每个表,EXPLAIN都会返_mysql explain query_cost

【Linux】vimrc 配置方案_linux配置vimrc-程序员宅基地

文章浏览阅读659次。修改 ~/.vimrc 文件(该文件是用户自己vim的配置文件,可随意修改)。我的.vimrc配置。_linux配置vimrc

SpringBoot中mysql的驱动依赖问题_mysql依赖-程序员宅基地

文章浏览阅读6.7k次,点赞5次,收藏14次。springboot中mysql的驱动依赖问题_mysql依赖

随便推点

javaweb基于SSH开发校园社团管理系统源码 课程设计 大作业 毕业设计_tp6校园社团管理系统-程序员宅基地

文章浏览阅读106次。开发校园社团管理系统(大作业/毕业设计)+Jdk+Tomcat+MYSQL数据库。开发环境: Windows操作系统。_tp6校园社团管理系统

网络安全学习--用户和用户组_组或用户名-程序员宅基地

文章浏览阅读1.1k次。文章基于Windows2003服务器系统版本Windows:win200,win2003,win2008r2,win2012Linux:Redhat,CentOS用户每个用户登录系统后,拥有不同的操作权限每个账户有自己唯一的SID(安全标识符)用户SID:S-1-5-21-42342423434-1433343434-500系统SID:S-1-5-21-42342423434-1433343434用户ID:500windows系统管理员administrator的UID是500普_组或用户名

Java注解 编译_Java注解之编译时注解-程序员宅基地

文章浏览阅读427次。新建两个moduleannotation用来定义注解compiler用来编写处理注解的代码这两个module都要选择Java Library 那为什么要拆分两个module呢,因为编译期注解的处理代码是只在代码编译的时候使用的,所以这些代码要和主module分开拆成compiler,但是compiler又依赖于注解,主module也要使用注解。所以就将注解的定义也拆分出来。这样做的好处是可以..._bw.append

mini2440 uart 裸机c-程序员宅基地

文章浏览阅读66次。转载于:http://blog.csdn.net/yx_l128125/article/details/7703653Uart工作原理:数据通信方式为:并行通信与串行通信两种:§并行通信:利用多条数据线将数据的各位同时传送。它的特点是:传输速度快,是用于短距离通信;§串行通信:利用一条数据线将数据一位位地顺序传送。特点是通信线路简单,利用简单的线缆就实现通信,低成本..._mini2440 nand uart 裸机

解决“libboost_thread.so.xxx.xxx.xxx: cannot open shared object file: No such file or directory”问题-程序员宅基地

文章浏览阅读2.8k次。使用boost库的时候,编译没问题,但是运行的时候报“libboost_thread.so.xxx.xxx.xxx: cannot open shared object file: No such file or directory”错误,解决方法如下: 执行:sudo ldconfig /usr/local/boost_xxx_xxx_xxx/stage/lib..._libboost_thread.so

框架设计原理与实战:理解框架的代码重用与模块化_代码框架复用-程序员宅基地

文章浏览阅读119次。什么是框架?它与类库、组件、工具集之间的区别在哪里?框架最初的意义是什么?为什么现在还需要了解框架设计的原理与实践?这几个问题将作为框架的介绍。框架(Framework)是指一个或多个代码文件以及这些文件所依赖的其他资源集合,用来简化开发过程并提供特定功能的工具箱。在计算机编程领域,框架是一种设计模式,提供了一套模板或标准,用于解决常见的编程任务,比如输入/输出、网络通信等。框架有着广泛的应用,包括数据库访问、业务逻辑处理、Web应用开发、多媒体、科学计算、图形用户界面(GUI)等。_代码框架复用

推荐文章

热门文章

相关标签