Android Studio 2.0 NDK开发环境搭建
来源:互联网 发布:犀牛软件培训上海 编辑:程序博客网 时间:2024/04/29 01:09
Android Studio 2.0 NDK开发环境搭建
0x00 前情回顾
前不久写了一篇环境搭建,虽然可以跑一个demo,但是如果你跟着做的话就会发现,仅仅是可以跑一个Demo,真做起来很是蛋疼。编写源码,生成so,跑App,改一点代码,再生成so,跑app。而且编写代码没有提示,不能格式化,各种不能,就是最基本的文本开发。经过一段时间折腾和Android Studio 2.0的 release,发现有更完美的方式,而且不用编写Android.mk和Application.mk。看在我刚开始学的份上,容我再来写一遍。看完这篇,你会发现JNI的开发也是如此的so easy。
0x01 环境搭建
所需环境:
- Android Studio 2.0
- Gradle 2.10(最低要求)
- NDK:ndk-r11c(目前最新版:2016-04-16)
- LLDB:2.1(目前最新版:2016-04-16)
下面开始正式操作:
安装Android Studio 2.0
这个就不细说了。
配置Gradle
最低要求Gradle版本为2.10,目前最新版本为2.12。修改方法:
项目根目录/gradle/wrapper/gradle-wrapper.properties
将最下面的一行改成你要的版本,如:
distributionUrl=https://services.gradle.org/distributions/gradle-2.10-all.zip
安装NDK
安装NDK有两种方式,一种是直接下载最新的NDK安装文件进行安装,另一种是通过SDK安装:
NDK安装文件
下载参考这里。根据你的操作系统下载不同版本。
通过SDK安装
Android Studio > Preferences > Appearance & Behavior > Syetem Settings > Android SDK > SDK Tools
在这个Tab中找到
Android NDK
,选中安装即可。安装之后我们可以在 Android SDK 的目录下看到一个ndk-bundle
目录,这个就是我们的NDK目录。
LLDB
和 GDB 类似,LLDB 是一款调试器,可以调试我们的JNI代码。同上打开SDK设置界面:
Android Studio > Preferences > Appearance & Behavior > Syetem Settings > Android SDK > SDK Tools
在这个Tab中找到
LLDB
,选中安装即可。安装之后我们可以在 Android SDK 的目录下看到一个lldb
目录,这个就是我们的 LLDB 目录。LLDB的更多信息可参考这里。
通过上面的配置,接下来就可以开始我们的JNI的开发了。 可能你会问之前我有介绍过一篇开发环境的搭建,这个有什么不同呢?如果你使用之前的方法,你需要配置 Android.mk、Application.mk,无代码自动完成,不能代码个时候,运行调试麻烦,等等。这些问题在这里都不存在了,让我们把更多的精力放到代码编写中。
0x02 测试Demo
新建java代码:
public class CipherUtils { static { System.loadLibrary("CipherUtils"); } public static native int add(int x, int y);}
生成对应的C++代码:
令人兴奋的是,Android Studio可以帮我们自动生成 C 代码。点击 add
方法,Option + Return 即可生成一个 CipherUtils.c
文件,由于我打算使用C++,因此将扩展名改为 cpp
,同时添加头文件,最终如下:
#include <jni.h>#include <string>using namespace std;#include "utils/log.h"JNIEXPORT jint JNICALL Java_com_ttdevs_jniutils_CipherUtils_add(JNIEnv *env, jclass type, jint x, jint y) { std::string input_str("Test add two number!"); LOGE("%s", input_str.c_str()); return x + y;}
PS:如果报错,可是将错误的 cpp文件拷贝出来再考吧回去。
build.gradle 配置
android { ...... defaultConfig { ...... ndk { moduleName "CipherUtils" stl "gnustl_static" // stlport_static abiFilters "armeabi", "armeabi-v7a" ldLibs "log", "android" } } sourceSets.main { // 如果不写(jni.srcDirs = ['src/main/jni/']) // Android展示模式没有jni目录 // this file has been added after the last project sync with gradle // 必须有值,如: 'src/main/jni/' jni.srcDirs = ['src/main/jni/'] // jniLibs.srcDir "libs" } ......}
直接点击运行按钮,即可跑我们的测试程序了。就这么简单。
0x03 JNI层的Debug
这个同样简单。首先需要在外面的build.gradle中配置一下:
android { ...... buildTypes { debug { jniDebuggable = true } ...... }}
在 C/C++
源文件上添加断点,点击debug,就可以像debug我们的java代码一样调试我们的原生代码了。
- Android Studio 2.0 NDK开发环境搭建
- Android Studio NDK 开发环境搭建
- Android Studio 2.2 NDK开发环境搭建
- NDK开发 Android Studio环境搭建
- Android Studio 2.2 NDK开发环境搭建
- 搭建Android Studio NDK 开发环境
- Android Studio的NDK开发环境搭建
- Android Studio 的NDK开发环境搭建
- Android studio NDK开发环境搭建
- android studio ndk环境搭建 和开发
- android studio NDK开发环境搭建实践
- Android Studio NDK环境搭建
- Android studio ndk 环境搭建
- Android Studio Ndk环境搭建
- android studio ndk 环境搭建
- android studio NDk环境搭建
- Android Studio NDK环境搭建
- Android Studio 1.5 RC1搭建NDK开发环境
- c#下载网页图片
- ORACLE 格式化输出[转]
- SpringMVC的返回值类型
- 在VS2013平台下,用VB.net 连接Access数据库
- objective-c之裁剪UIImage
- Android Studio 2.0 NDK开发环境搭建
- uva1151
- Linux网络协议栈之TCP send/recv
- 几个简单的算法实现(冒泡优化)
- B树、B-树、B+树、B*树
- 深入理解Java中的回调机制(最通俗易懂的回调机制的博客)
- OC一些基本类以及方法
- Problem 1012
- 每日笔记