Android Studio 快速启动 Android NDK 项目开发

143 篇文章 1 订阅
128 篇文章 1 订阅

概述

通过本篇教程,您将学习如何使用 Android Studio 轻松启动 Android NDK 项目开发。

开发环境

  • Android Studio 2.2 或以上的版本
  • Android NDK 11c+ 或以上的版本
  • Android SDK 最新版,这个一般会包含在 Android Studio 中。
  • Android 5.0+ 测试机或模拟器

创建一个 HelloJni 项目

  • 创建完成如下

  • 配置 Studio 下载安装 NDK,如果你之前已经单独下载过 NDK 也可以在 Project Structure -- SDK Location -- Android NDK location 下去引用,我更推荐如下方式通过 Android SDK Manager 自动安装,它会将 NDK 放入 /android-sdk/ndk-bundle/

  • 运行项目

将JNI构建功能添加到HelloJni项目中

Android Studio 通过 Google 开发的 experimental plugin 支持 native 开发,通过这个插件我们可以不用考虑配置麻烦的 Android.mk 等构建文件就可以进行开发,我们来将其添加到我们的项目中。 下面是 experimental 插件与 gradle 的版本对应表,详细查看官方文档,本教程我们将以 experimental plugin 0.7.3 为例

Plugin Version

Gradle Version

0.1.0

2.5

0.2.0

2.5

0.3.0-alpha3

2.6

0.4.0

2.8

0.6.0-alpha1

2.8

0.6.0-alpha5

2.10

0.7.0-alpha1

2.10

0.7.0

2.10

0.7.3

2.14.1

  • 对应的我们先配置项目的 gradle 版本为 gradle2.14.1,下载相应版本 gradle 并配置

  • 引用对应版本的 experimental 插件,此处以 0.7.3 版本为例,打开项目的 build.gradle

替换

classpath 'com.android.tools.build:gradle:2.2.0'

classpath 'com.android.tools.build:gradle-experimental:0.7.3'
  • 打开模块 的 build.gradle 文件,修改让它支持 experimental 插件的语法

替换

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.skyrin.hellojni"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
...

apply plugin: 'com.android.model.application'  //<<<

model {  //<<<
    android {
        compileSdkVersion 25
        buildToolsVersion "25.0.2"
        defaultConfig {
            applicationId "com.skyrin.hellojni"
            minSdkVersion.apiLevel 15  //<<<
            targetSdkVersion.apiLevel 25  //<<<
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles.add(file('proguard-android.txt'))  //<<<
            }
        }
    }
}  //<<<
...
  • 点击 Sync Now 同步项目

现在可以添加 Jni 代码了

  • 配置模块的 build.gradle 文件让它可以创建 hello-jni 动态链接库也就是 .os 等文件,然后 Sync 项目
 buildTypes {
            ...
        }
        //添加
        ndk{
            moduleName "hello-jni"
        }
  • 在 MainActivity 中(当然你也可以新建一个 JniUtils.class 进行封装)创建 native 方法
 ...
    static {
        System.loadLibrary("hello-jni");
    }

    public native String getStrFromJni();
    ...

  • 点击上面提示之后 Studio 会自动为我们创建 cpp 目录以及 .c 文件,c 文件生成代码如下
#include <jni.h>

JNIEXPORT jstring JNICALL
Java_com_skyrin_hellojni_MainActivity_getStrFromJni(JNIEnv *env, jobject instance) {

    // TODO


    return (*env)->NewStringUTF(env, returnValue);
}

替换其返回值如下

return (*env)->NewStringUTF(env, "Hello Jni!");
  • 调用 native 函数
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //调用jni代码
        ((TextView)findViewById(R.id.tv_jni)).setText(getStrFromJni());
    }

    static {
        System.loadLibrary("hello-jni");
    }

    public native String getStrFromJni();
}
  • 我们来 Run 一下

  • 用 c 写个加法函数试试

java

public native int add(int a,int b);

Jni

JNIEXPORT jint JNICALL
Java_com_skyrin_hellojni_MainActivity_add(JNIEnv *env, jobject instance, jint a, jint b) {

    // TODO
    return a+b;
}

调用

((TextView)findViewById(R.id.tv_jni)).setText(add(2,3)+"");
  • Run 一下

Congratulations! 你学会用 NDK 开发了✧。٩(㉨)و✧*。

想学习更多Android知识,或者获取相关资料请加入Android技术开发交流2群:862625886。 有面试资源系统整理分享,Java语言进阶和Kotlin语言与Android相关技术内核,APP开发框架知识, 360°Android App全方位性能优化。Android前沿技术,高级UI、Gradle、RxJava、小程序、Hybrid、 移动架构师专题项目实战环节、React Native、等技术教程!架构师课程、NDK模块开发、 Flutter等全方面的 Android高级实践技术讲解。还有在线答疑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值