技术标签: 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以上系统才支持。
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里的头文件和库非常有限。
文章浏览阅读532次,点赞9次,收藏7次。AIStarter使用教程及注意事项 -AIStarter tutorials and notes on how to use it。_comfyui-aki-v1.1.7z
文章浏览阅读8k次,点赞4次,收藏35次。linux系统(以Ubuntu系统为例)的文件系统Linux下“/”就是根目录,所有的目录都是有根目录衍生出来的。/是一切目录的起点,如大树的主干。其它的所有目录都是基于树干的枝条或者枝叶。在ubuntu中硬件设备如光驱、软驱、usb设备都将挂载到这颗繁茂的枝干之下,作为文件来管理。_bantu系统命令
文章浏览阅读4.4k次。1.sh test.sh &将sh test.sh任务放到后台 ,即使关闭xshell退出当前session依然继续运行,但标准输出和标准错误信息会丢失(缺少的日志的输出)将sh test.sh任务放到后台 ,关闭xshell,对应的任务也跟着停止。2. nohup sh test.sh将sh test.sh任务放到后台,关闭标准输入,终端不再能够接收任何输入(标准输入),重定向标..._sh 脚本后台执行还在输出
文章浏览阅读1.2k次。MySQL中要查看执行计划,可以使用EXPLAIN命令,EXPLAIN 使用的对象是 SELECT, DELETE, INSERT, REPLACE, 和 UPDATE 语句。将EXPLAIN换成DESCRIBE也行,两者含义一样,但实际操作中一般用DESCRIBE查看表结构,用EXPLAIN查看执行计划。输出的结果不是图形化的,而是一张表。对于每个SELECT语句中的每个表,EXPLAIN都会返_mysql explain query_cost
文章浏览阅读659次。修改 ~/.vimrc 文件(该文件是用户自己vim的配置文件,可随意修改)。我的.vimrc配置。_linux配置vimrc
文章浏览阅读6.7k次,点赞5次,收藏14次。springboot中mysql的驱动依赖问题_mysql依赖
文章浏览阅读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普_组或用户名
文章浏览阅读427次。新建两个moduleannotation用来定义注解compiler用来编写处理注解的代码这两个module都要选择Java Library 那为什么要拆分两个module呢,因为编译期注解的处理代码是只在代码编译的时候使用的,所以这些代码要和主module分开拆成compiler,但是compiler又依赖于注解,主module也要使用注解。所以就将注解的定义也拆分出来。这样做的好处是可以..._bw.append
文章浏览阅读66次。转载于:http://blog.csdn.net/yx_l128125/article/details/7703653Uart工作原理:数据通信方式为:并行通信与串行通信两种:§并行通信:利用多条数据线将数据的各位同时传送。它的特点是:传输速度快,是用于短距离通信;§串行通信:利用一条数据线将数据一位位地顺序传送。特点是通信线路简单,利用简单的线缆就实现通信,低成本..._mini2440 nand uart 裸机
文章浏览阅读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)等。_代码框架复用