Android Studio JNI体验

最近项目中需要调用c/c++的实现,Android是支持JNI的,所以体验了一下JNI的全过程

1. 前期环境准备

(1) 下载NDK,网址是https://developer.android.com/ndk/downloads/index.html, 国内用户需要翻墙。

目前官网上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");

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-19 13:23:11

Android Studio JNI体验的相关文章

Android Studio初体验之启动AVD模拟器异常:cannot set up guest memory 'pc.ram'

启动AVD模拟器异常:Cannot set up guest memory 'pc.ram' 错误信息: HAX is working and emulator runs in fast virt mode Cannot set up guest memory 'pc.ram': Invalid argument Error accepting connect 分析 各种查资料,没有发现网上有同样问题的,在一篇相关文章中找到类似的解决方法. 从语意看,应该是hax安装后没有启动.(不懂hax是什

Android Studio 初体验

Google在I/O2013大会上公布了Android新的开发工具Android Studio,趁周末时间做了一下尝试.有须要的能够 在http://developer.android.com/sdk/installing/studio.html下载,当前版本号是V0.1.官方解释:Android Studio is a new Android development environment based on IntelliJ IDEA. Similar to Eclipse with the

Android Studio JNI编程

操作步骤: 配置好NDK开发环境 指明ndk路径 可以在local.properties中手动输入ndk路径,或者用Studio菜单栏File--Project Structure--Android NDK Location中点击选中ndk路径. 修改build.gradle配置 工程中共有两个build.gradle配置文件,我们要修改的是在<Project>\app\build.gradle这个文件(就是Module:app).为其在defaultConfig分支中增加上 ndk { mo

实现Android Studio JNI开发C/C++使用__android_log_print输出Log

相信很多人在刚开始学习Android JNI编程的时候,需要输出Log,在百度Google搜索的时候都是说需要在Android.mk中加入LOCAL_LDLIBS+= -L$(SYSROOT)/usr/lib -llog ,其实这是在eclipse开发上的方式,Android Studio并不是这么使用. Android Studio的Android.mk是自动生成的,就算修改也是没用了,实际Android Studio的Android.mk是根据gradle文件生成的,那么就需要修改gradl

第一个Android studio JNI程序

现在网上有很多实用JNI的教程,本文主要用于记录自己实现的方法和遇到的坑. 第一步,下载NDK. NDK可以去谷歌Android developer上下载.国内也有些中国版网站可以下载. 第二步,编写java类,这个类是java和c/c++交互的中介,定义一些native的方法,具体实现由c/c++完成. package com.example.jni; /** * Created by alexjie on 2017/5/14. */ public class JNIDemo { static

Android Studio 初体验,从Eclipse到AS

这些天一直在忙着面试方面的准备以及不断更新完善我的Memory软件,不知不觉过去了好久. 由于我想对软件加入一些material design的新元素,因此去网上找对应的示例源码,突然发现除了各种教程上还在使用eclipse,这个世界几乎所有新的东东都被AndroidStudio包揽了,瞬间感觉不学AS简直就是不可逾越的交流鸿沟.因此网上买了个VPN翻墙,用了几天时间,终于搞明白了AS的基本用法.在此分享一下自己的学习心得. 自己是从Eclipse转到AS上的,所以在学习AS当中, 必然下意识的

Android Studio初体验之导入eclipse项目

本篇使用到的Android Studio版本为1.0, Eclipse ADT版本22.3.0. 主要介绍两种导入方式: 先用Eclipse导出为Gradle build files,然后直接用Android Studio导入该项目. 用Android Studio 直接导入Eclipse项目. Android Studio默认使用 Gradle 构建项目, Eclipse 默认使用Ant构建项目.建议Android Studio导入项目时,使用 Gradle 构建项目. 导出Eclipse 项

Android Studio 使用体验(二)

用了Android Studio有一段时间了,又发现了不少亮点,今天总结一下: 1.布局文件中颜色属性在左侧会显示,如下图蓝色的TextView,很直观: 2.除了代码工作区右侧对ToDO进行蓝色标示外,下方Console位置可以定位所有ToDo,代码量很大的时候比较实用: 3.屏幕录制功能很实用,可录制一段设备的演示视频: 4. 切换主题:File>Settings>Appearance>Theme,根据自己的喜好来自定义你的AS吧: 5.强大的代码提示,如下,感受到了吗? 6.显示行

[Android Pro] Android studio jni中调用Log输出调试信息

reference to : http://www.linuxidc.com/Linux/2014-02/96341.htm Android 开发中,java 可以方便的使用调试信息Log.i, Log.d ...,Jni层可否使用呢?答案是肯定的. 1 为方便使用,先进行宏定义: eben_hpc_log.h内容如下: #ifndef _Included_hpc_Log#define _Included_hpc_Log#ifdef __cplusplusextern "C" {#en