查看: 104|回覆: 1

【Android】Android Studio NDK 开发

[複製鏈接]

2

主題

0

回帖

0

積分

热心网友

金币
0
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2010-10-18
發表於 2019-9-5 17:05:00 | 顯示全部樓層 |閲讀模式

个人博客:
http://www.milovetingting.cn

Android Studio NDK 开发

记录在Android Studio中NDK简单开发的步骤

用到的Android Studio版本为3.5。

配置NDK

下载NDK

一般在SDK下已经有自带的ndk文件夹,如sdk目录下的ndk-bundle文件夹。

如果没有,可以在SDK Manager中下载

下载LLDB、NDK两项

下载完成后,可以在sdk目录下看到ndk的文件夹

配置环境变量

我的电脑-属性-高级系统设置-环境变量

新建一个ANDROID_NDK变量,配置上ndk文件夹的位置(在这个文件夹下可以看ndk-build.cmd等文件)

然后将这个变量加入到path变量中

生成SO库

新建一个Hello.java文件,里面增加一个本地方法

public static native String hi();

执行Build-Make Project,在app\build\intermediates\javac\debug\classes目录下执行以下cmd命令生成头文件:

javah -jni com.wangyz.ndk.Hello

在该目录下,可以看到生成的com_wangyz_ndk_Hello.h文件。

在app/src/main/目录下新建jni目录,将生成的头文件复制到jni目录下。

在jni目录下新建com_wangyz_ndk_Hello.c文件,编写C语言实现代码:

#include "com_wangyz_ndk_Hello.h"

JNIEXPORT jstring JNICALL Java_com_wangyz_ndk_Hello_hi
  (JNIEnv *env, jclass clazz){
  return (*env)->NewStringUTF(env,"Hello");
  }

在jni目录下新建Android.mk文件,内容如下:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := Hello
LOCAL_SRC_FILES := com_wangyz_ndk_Hello.c
include $(BUILD_SHARED_LIBRARY)

在jni目录下新建Application.mk文件,内容如下:

APP_ABI := all

在该目录下执行cmd命令:

ndk-build

执行后生成所需的so文件。

引用SO库

在app/src/main目录下新建目录jniLibs,将对应的so复制到该目录下:

在Activity中引入:

static {
        System.loadLibrary("Hello");
    }

使用SO库中的方法

String hi = Hello.hi();
Toast.makeText(getApplicationContext(), hi, Toast.LENGTH_SHORT).show();

Android Studio中NDK的简单开发到此结束。

回覆

使用道具 舉報

0

主題

720

回帖

4441

積分

琼殿精英

金币
3721
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2011-10-11
發表於 2026-5-9 15:40:40 | 顯示全部樓層
感谢楼主的分享!很详细的NDK开发教程,图文并茂,对于想学习NDK开发的新手来说非常友好。

顶一个!

看完教程有几点小想法想和楼主交流一下:

1. 现在Android Studio新版本对CMake的支持越来越好了,CMakeLists.txt用起来比Android.mk更方便一些,楼主有没有考虑写一篇关于CMake的教程?

2. 关于环境变量配置,其实也可以直接在local.properties里指定ndk路径,这样项目配置更灵活,不用每次都改系统环境变量。

3. 生成的SO库引用,除了手动复制到jniLibs,其实在build.gradle里配置sourceSets也可以直接指定so文件的路径,这样更方便版本管理。
个人主页:http://www.milovetingting.cn

期待博主更多关于NDK和JNI的实战文章!特别是涉及NDK调试、性能优化方面的内容。

已收藏博客地址! 以后会常来学习交流的~

强烈支持! 继续加油!
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部