Android Studio JNI体验
近期项目中须要调用c/c++的实现,Android是支持JNI的。所以体验了一下JNI的全过程
1. 前期环境准备
(1) 下载NDK,网址是https://developer.android.com/ndk/downloads/index.html。 国内用户须要FQ。
眼下官网上mac版最新的是android-ndk-r10e-darwin-x86_64.bin。 文件比較大,300多M。
下载下来后,解压到对应文件夹,备用。
解压命令例如以下:
ndk$ chmod a+x android-ndk-r10c-darwin-x86_64.bin
ndk$ ./android-ndk-r10c-darwin-x86_64.bin
解压后在原文件夹会生成一个新的文件夹(android-ndk-r10e), 里面即是NDK的各种工具。
windows系统应该是能够直接用7zip或者zip工具解压,生成一个包括NDK环境的目录。 都比較简单。
(2) 设置NDK环境变量
跳转到用户文件夹下,打开.bash_profile文件
cd ~
touch .bash_profile
open -e .bash_profile
加入例如以下:
export NDK_ROOT=/Users/your_account/.../android-ndk-r10e
source .bash_profile
然后重新启动terminal, 输入ndk-build, 应该会输出一大堆的信息。
类似以下的信息:
MacBook-Pro:~$ndk-build
Android NDK: Could not find application project directory !
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.
/Users/xxxxx/android-ndk-r10e/build/core/build-local.mk:143: *** Android NDK: Aborting . Stop.
这样前期的环境准备就完毕了。
2. JNI的编写
这是官网上一篇介绍JNI的文章, http://developer.android.com/training/articles/perf-jni.html。
里面有提到怎样调用JNI的方法,
以及怎样在JNI中訪问java的对象或者方法或者属性。 这里就不具体介绍了。
在Android Studio中,在响应的java代码的地方写好native的方法。
接着就是要生成c的头文件,须要用到javah命令,首先cd到source文件夹文件夹下。android studio中的文件夹是src/main/java
调用javah生成头文件,调用方法例如以下:
javah -classpath /Users/....../sdk/platforms/android-21/android.jar:. -d jni com.test.native.nativeUtils
运行完没有问题的话,会在同文件夹生成jni文件夹。里面包括了生成的c的头文件。
须要注意的两点。 classpath的最后有:., 第二点是java的class名称,用.替代文件夹分隔符。
3. 编写JNI程序,这个没啥说的,就是c或者c++程序。
4. 编写Android.mk和Application.mk
相同的。android官网提供了非常多的帮助性文档
https://developer.android.com/ndk/guides/android_mk.html
https://developer.android.com/ndk/samples/sample_na.html#apm
简略例如以下:
生成的so的名字,相同也是在java中loadlibrary中的名字。
LOCAL_SRC_FILES 指定了编译的源码的文件名称,能够指定多个
LOCAL_MODULE := native-test
LOCAL_SRC_FILES := main.c
LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv1_CM
然后编写Application.mk, 指定最小支持的api level等属性
APP_ABI := all
APP_PLATFORM:= android-21
APP_OPTIM := release
5. 生成so文件
最后ndk-build命令。会生成各种格式的so文件。 大功告成。
6. 在java程序中载入生成的so文件。
static {
loadLibrary("native-test");
}
Android Studio JNI体验的更多相关文章
- Android Studio JNI开发入门教程
Android Studio JNI开发入门教程 2016-08-29 14:38 3269人阅读 评论(0) 收藏 举报 分类: JNI(3) 目录(?)[+] 概述 在Andorid ...
- Android Studio JNI 开发简单案例
转载:http://www.androidchina.net/5744.html 进程保活,热修复,硬件接入等等都需要底层的支持,而底层代码是 C .C++ 写的,那么在 Android 中怎么调用底 ...
- Android Studio Jni 环境搭建
第一步:NDK环境搭建,点击下图红色框区域查看NDK下载和环境配置 安照正常情况是很慢的或者无法下载成功的,这个时候可以去下载NDK压缩包进行解压.下面给出两个下载地址 (1)官网:http://we ...
- Android Studio JNI/NDK 编程(二) Windows 下环境搭建 demo 开发
环境 windows 8 (注:其实 Linux 开发可能更方便) Android Studio 2.1; 一 . 下载 安装android-ndk开发包 地址:链接:http://pan.baid ...
- 实现Android Studio JNI开发C/C++使用__android_log_print输出Log
相信很多人在刚开始学习Android JNI编程的时候,需要输出Log,在百度Google搜索的时候都是说需要在Android.mk中加入LOCAL_LDLIBS+= -L$(SYSROOT)/usr ...
- android studio JNI使用
Step: 1. 添加native接口注意写好native接口和System.loadLibrary()即可了,并无特别之处. Step: 2.执行Build->Make Project 生成了 ...
- android studio jni调用入门
一.开发环境配置: 1.Android Studio 2.3.3 2.android-ndk-r14b-windows-x86_64 二.创建项目 1.新建android项目 2.新建文件 3.编译生 ...
- 【OpenCV for Android】Android Studio JNI和NDK配置及采坑记录
在配置好Android studio的OpenCV环境后,我们就可以通过Java代码调用OpenCV的API了,但是在通常情况下,用Java代码编写图像处理算法的运行效率是没有C++代码高的,在应用层 ...
- Android studio jni
首先我们要明确几个概念,jni,ndk,共享库(.so). jni是java native interface的缩写,java 本地接口.它提供了若干的API实现了Java和其他语言的通信(主要是C/ ...
随机推荐
- keepalived 和 heartbeat对比
Keepalived使用的vrrp协议方式,虚拟路由冗余协议 (Virtual Router Redundancy Protocol,简称VRRP): Heartbeat是基于主机或网络的服务的高可用 ...
- php 文件加载方式
两种加载文件的方式 include require 使用场景: 动态加载文件的时候,使用include,否则使用require. 示例: # 引入php文件--include方式 inlcude(&q ...
- 开发微信小程序必须要知道的事
为什么是小程序? 为什么我们会开发小程序呢?或许是因为工作需要,或许是源于自己的追求(来自名利的欲望),但我要说--这是一种缘分,很美好的缘分,很多年后还值得庆幸的缘分 小程序目前可以分为三个阶段 一 ...
- 标题:u-boot 移植步骤详解
1 U-Boot简介U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目.从FADSROM.8xxROM.PPCBOOT逐步发展演化而来.其源码目录.编译形式与 ...
- 如何让myeclipse左边选中文件后自动关联右边树
在左侧项目树的右上角下拉菜单里有link with editor 点击即可
- java中的instanceof用法
Java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例.instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例. 用法: ...
- 译:MySQL性能优化的21条最佳经验
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据 ...
- Maven传递依赖的时候,同名包不同版本号的包均会下载,可是编译的时候,仅仅会载入一个高版本号的。
描写叙述,在一个Maven项目中.同一时候依赖了spring-tomcat-weaver 和 struts-core 包.可是spring-tomcat-weaver 须要commons-dige ...
- javaScript中的事件对象event
事件对象event,每当一个事件被触发的时候,就会随之产恒一个事件对象event,该对象中主要包括了关于该事件的基本属性,事件类型type(click.dbclick等值).目标元素target(我的 ...
- mysql安装,数据库连接
安装教程http://jingyan.baidu.com/article/e3c78d64412ae83c4c85f5fd.html 首先打开MySQL官网,找到Downloads标签,点击进入.如果 ...