Android中NDK的搭建及简单使用 Android.mk相关介绍 JNI的使用
Android中NDK的搭建及简单使用:
使用NDK,简述其重要步骤:
、搭建NDK环境(作用:用于自动生成jni下的.c对应的so文件)---到Android NDK官网或Android官网下载ndk包,环境搭建步骤具体参看http://www.cnblogs.com/yejiurui/p/3476565.html
2、以eclipse为例,在com.test下创建Test2.java文件,会自动在项目的bin\classes\下生成相应的.class文件【若在项目中看不到,则可能当前在eclipse中
查看的是Package Explorer,切换到Navigator即可】如图

3、使用命令行切换目录至bin\classes\下,执行javah com_test_Test2,在该目录下生成对应的.h文件
4、在项目根目录下创建名为jni的文件夹(必须为jni),将上述3中生成的.h文件复制到该目录下
5、创建同名的.c文件com_test_Test.c,实现具体的在Test2.java中声明的native方法
6、在jni下创建文件Android.mk,配置具体生成so文件的信息,例如:名称、依赖的源文件(.c)
注意:若有同个.c文件则可以生成一个so文件或分别生成各自的so文件
(1)若生成一个so文件,以空格或Tab键隔开不同的源文件,换行使用 \ ,在Android.mk中信息格式为:
LOCAL_SRC_FILES := com_test_Test2.c com_test_TestNoNDK.c
换行: LOCAL_SRC_FILES := com_test_Test2.c \ com_test_TestNoNDK.c
如图:
(2)若生成不同的so文件,则需要以以下格式为模块:
include $(CLEAR_VARS)
LOCAL_MODULE := TestNDK #生成的so文件的名称
LOCAL_SRC_FILES := com_test_Test2.c #源文件
include $(BUILD_SHARED_LIBRARY)
如图:
7、上述完成后,会发现在项目的libs目录下有对应的so生成,整个结构如图:

8、在项目中使用时,需要先静态加载库文件
static{
System.loadLibrary("TestNDK");
}
9、加载完成之后,在项目中直接通过类名调用相应的方法即可(因都是静态方法)
上述仅是按照自己的理解简要总结的ndk使用的步骤,详细步骤可参看:http://www.cnblogs.com/yejiurui/p/3476565.html
补充:
Android.mk:
关于mk语法讲解:http://www.cnblogs.com/wainiwann/p/3837936.html
Android.mk中常用的属性含义:http://www.cnblogs.com/welhzh/p/4532142.html
个别含义:
LOCAL_MODULE模块必须定义,以表示Android.mk中的每一个模块。名字必须唯一且不包含空格。
Build System会自动添加适当的前缀和后缀。例如,foo,要产生动态库,则生成libfoo.so. 但请注意:如果模块名被定为:libfoo.则生成libfoo.so. 不再加前缀。
------
JNI的使用场景:
简单的说:JNI是Java平台定义的用于和宿主平台上的本地代码进行交互的“Java标准”,它通常有两个使用场景:
1.使用(之前使用c/c++、delphi开发的)遗留代码;
2.为了更好、更直接地与硬件交互并获得更高性能。
Android中NDK的搭建及简单使用 Android.mk相关介绍 JNI的使用的更多相关文章
- Android中XML格式数据的简单使用
源码: package com.wangzhu.demo; import java.io.IOException; import java.io.StringWriter; import javax. ...
- Android中两个Activity之间简单通信
在Android中,一个界面被称为一个activity,在两个界面之间通信,采用的是使用一个中间传话者(即Intent类)的模式,而不是直接通信. 下面演示如何实现两个activity之间的通信. 信 ...
- Android开发学习总结——搭建最新版本的Android开发环境
原文出自:https://www.cnblogs.com/xdp-gacl/p/4322165.html#undefined 最近由于工作中要负责开发一款Android的App,之前都是做JavaWe ...
- Android中隐藏顶部状态栏的那些坑——Android开发之路3
Android中隐藏顶部状态栏的那些坑 先看看常规的隐藏状态栏的方法: 方法一: @Override protected void onCreate(Bundle savedInstanceState ...
- 在Android中Intent的概念及应用(二)——Intent过滤器相关选项
一.如果多个Activity拥有同一个Intent Action,启动时用同一个Action启动会是什么情况? 如何指定某一个Activity启动? 在多个Activity拥有同一个Intent Ac ...
- Android中GridView拖拽的效果【android进化三十六】
最 近看到联想,摩托罗拉等,手机launcher中有个效果,进入mainmenu后,里面的应用程序的图标可以拖来拖去,所以我也参照网上给的代码,写了 一个例子.还是很有趣的,实现的流畅度没有人家的 ...
- Android笔记(二十九) Android中的异步更新(一) Android中的线程
Java中的线程 1. 线程的两种实现方式 ①继承Thread类 ②实现Runnable接口 两者区别在于,Thread这个类的对象,代表的是一个线程,而Runnable的对象,代表的是线程体(也就是 ...
- Android中FTP服务器搭建入门
http://www.2cto.com/kf/201501/374048.html http://blog.csdn.net/smile3670/article/details/44343617 有 ...
- Android 新版NDK环境搭建(免Cygwin)
使用最新ndk,直接抛弃cygwin,以前做Android的项目要用到NDK就必须要下载NDK,下载安装Cygwin(模拟Linux环境用的),下载CDT(Eclipse C/C++开发插件),还要配 ...
随机推荐
- 什么是IO流 \ 以及文件输入输出
一.IO流的分类: 流按照操作数据的类型分为两种:字节流:字符流. 1.什么是字节流:读取的是文件的二进制数据,不会对二进制做处理,不会解析成看得懂的数据. 2.什么是字符流:读取的是文件的二进制数据 ...
- C/C++入门基础----指针(1)
指针其实就是一个变量, 和其他类型的变量一样.在32位计算机上, 指针占用四字节的变量.指针与其他变量的不同就在于它的值是一个内存地址,指向内存的另外一个地方, 指针能够直接访问内存和操作底层的数据, ...
- Android Studio使用org.apache.http报错
Android Studio使用org.apache.http报错需要加上这句话:useLibrary 'org.apache.http.legacy'
- kendoui treeview grid spreadsheet
treeview 傻子方式获取id <!DOCTYPE html> <html> <head> <title>API</title> < ...
- 构造 & 析构 & 匿名对象
以前仅知道创建对象,但对匿名对象的了解基本为0. 通过阅读google chromium源代码 中关于 log 的使用,查阅相关资料,了解了一下匿名对象,予以记录. 什么是匿名对象 匿名对象可以理 ...
- C#中的线程(二) 线程同步基础
1.同步要领 下面的表格列展了.NET对协调或同步线程动作的可用的工具: 简易阻止方法 构成 目的 Sleep 阻止给定的时间周期 Join 等待另一个线程 ...
- easyui 使用问题积累
一.<a>标签中onclick和javascript事件与grid的select事件执行的先后顺序 html: <a href='javascript:func();' onclic ...
- C++面试中string类的一种正确简明的写法
本文首发于酷壳网 http://coolshell.cn/articles/10478.html 先说说程序员(应届生)面试的一般过程,一轮面试(面对一到两个面试官)一般是四.五十分钟,面试官会问两三 ...
- Web程序的运行原理及流程(二)
其实WEB服务器和WEB应用服务器这两个概念特别容易混淆 可以理解为装了不同软件(服务)的两台计算机(服务器)吧 先对两个概念做一个简单介绍 了解了基本的概念 我们再用两个典型的例子做一下比较(建立 ...
- Hibernate配置步骤
1.创建WEB项目 2.从http://www.hibernate.org/下载hibernate-release-4.3.11.Final.zip,并解压. 3.将hibernate必须的包加入li ...