Android Studio 2.0 NDK开发环境搭建

16 篇文章 0 订阅

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 环境搭建

所需环境:

  1. Android Studio 2.0
  2. Gradle 2.10(最低要求)
  3. NDK:ndk-r11c(目前最新版:2016-04-16)
  4. 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安装:

    1. NDK安装文件

      下载参考这里。根据你的操作系统下载不同版本。

    2. 通过SDK安装

      Android Studio > Preferences > Appearance & Behavior > Syetem Settings > Android SDK > SDK Tools

      在这个Tab中找到 Android NDK,选中安装即可。安装之后我们可以在 Android SDK 的目录下看到一个 ndk-bundle 目录,这个就是我们的NDK目录。

    ndk_lldb

  • 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代码一样调试我们的原生代码了。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值