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

智能推荐

碎片篇——Ubuntu双系统安装之雷神笔记本_雷神911识别不到ubuntu-程序员宅基地

文章浏览阅读1.3k次,点赞3次,收藏4次。Ubuntu双系统安装之雷神笔记本解决雷神911系列不读取U盘安装Ubuntu的难题,如下:圈内改为ZIP写入模式,就可以了0.0_雷神911识别不到ubuntu

CSP复赛说明-程序员宅基地

文章浏览阅读1.1w次,点赞5次,收藏41次。文档目的本文档针对目标是第一次参加 CSP 复赛的同学,主要内容是包括 CSP 复赛提交要求和需要特别注意的地方。由于各省的要求会略微有所不同,本文档主要是依据浙江省的要求写的。CSP复赛说明特别说明本说明暂时只能针对浙江省,据说各省在提交上要求会有些区别。有任何疑问请务必详细咨询监考老师。考卷下面是 2018 年普及组复赛的文档,请务必注意红色部分。图1 20..._csp复赛

gitlab+jenkins+docker+maven 自动构建项目_docker jenkins gitlab mvn-程序员宅基地

文章浏览阅读830次。docker安装gitlab、jenkins百度有很多。配置服务器ssh1、利用命令ssh-keygen -t rsa -P "",连续按三个回车,生成密钥对2、指定目录下查看已经生成好的密钥和公钥3、利用命令cat id_rsa.pub &gt;&gt; authorized_keys将公钥加入到授权列表4、给予文件authroized_keys以可读可写的权限..._docker jenkins gitlab mvn

算法学习笔记:最小生成树(prim + kruskal)-程序员宅基地

文章浏览阅读7次。prim :依次加入与集合距离最近的点kruskal:依次加入距离最短的并且不在集合内的边

跨境电商独立站建站教程WordPress+WooCommerce 新手零基础外贸自建站完整图文 送interserver优惠码_woopayments国内不能用-程序员宅基地

文章浏览阅读1.7k次,点赞18次,收藏26次。最近不少卖家朋友来问独立站建站方面的问题,所以决定写一篇完整的新手搭建教程,全部花费仅不到300元。_woopayments国内不能用

数学价值1-叉乘法判断点是否在三角形内_叉乘法判断点是否在三角形内部-程序员宅基地

文章浏览阅读9.2k次。叉乘法 沿着三角形的边按顺时针方向走,判断该点是否在每条边的右边(这可以通过叉乘判断),如果该点在每条边的右边,则在三角形内,否则在三角形外。这个算法只用到了三次叉乘,没有除法运算和三角函数、开根号等运算,所以效率很高,而且精度很高(没有浮点误差)。 设三角形三点A(x1,y1)B(x2,y2)C(x3,y3),已知点M(x,y), 1,先求出三个向量MA,MB,MC. _叉乘法判断点是否在三角形内部

随便推点

最新成果展示:Ga2O3-SBD计算模型_ga2o3簇模型原子个数与闭壳-程序员宅基地

文章浏览阅读436次,点赞2次,收藏2次。近年来,Ga2O3材料凭借着优越的电学与光学特性,愈发引起了研究人员的强烈关注,同时被广泛地应用于各类高功率半导体器件与光电子器件。因此,借助于计算软件对其内部物理机制的研究便显得尤为重要,可帮助研究人员省时、省力、省财地制备高性能的半导体器件。近日,基于Crosslight公司先进的半导体仿真设计平台,我司技术团队不断突破技术瓶颈,完善材料性质及物理模型,创新性地开发出了Ga2O3-SBD计算模型。如上图所示,基于该模型计算输出的结果与实验结果高度吻合,对于SBD器件内部物理机制的研究极具重要的意义。_ga2o3簇模型原子个数与闭壳

JavaWeb Cookie的介绍和使用案例_hanyzz-程序员宅基地

文章浏览阅读184次。Cookie的特点和作用cookie存储数据在客户端浏览器浏览器对于单个cookie 的大小有限制(4kb) 以及 对同一个域名下的总cookie数量也有限制(20个)作用:3. cookie一般用于存出少量的不太敏感的数据4. 在不登录的情况下,完成服务器对客户端的身份识别案例:记住上一次访问时间1. 需求:5. 访问一个Servlet,如果是第一次访问,则提示:您好,欢迎您..._hanyzz

Linux/Windows下的静态库、动态库及.lib转.a文件方法-程序员宅基地

文章浏览阅读6.2k次。Linux的库文件是.a、.so、.o。Windows的库文件是.lib。_.lib转.a

Django笔记三十八之发送邮件_django中mail.send_mail-程序员宅基地

文章浏览阅读679次,点赞2次,收藏3次。这一篇笔记介绍如何在 Django 中发送邮件。在 Python 中,提供了 smtplib 的邮件模块,而 Django 在这个基础上对其进行了封装,我们可以通过来调用。_django中mail.send_mail

oracle获取当前时间戳-程序员宅基地

文章浏览阅读1.4k次。如何处理mysql中的时间戳读取问题一、FROM_UNIXTIME函数简介1、函数作用:将MYSQL中以INT(11)存储的时间以"YYYY-MM-DD"格式来显示。2、语法:FROM_UNIXTIME(unix_timestamp,format)返回表示Unix时间标记的一个字符串,根据format字符串..._oracle from_unixtime

iOS7以后修改状态栏字体颜色_ios ios 7之后状态栏字体颜色黑色-程序员宅基地

文章浏览阅读791次。1、若是在控制器覆写了-(UIStatusBarStyle)preferredStatusBarStyle方法,却发现没有作用,查看是否info.plist文件中将View controller-based status bar appearance设置为NO了。2、当ViewController在UINavigationController中时,如果导航栏存在,则以UINavigationController中-(UIStatusBarStyle)preferredStatusBarStyle返回风格为_ios ios 7之后状态栏字体颜色黑色

推荐文章

热门文章

相关标签