android jni 按键,小试牛刀--Android studio 使用ndk开发JNI

0.配置ndk路径

在project项目的local.properties里面加上ndk路径

ndk.dir=D\:\\NDK\\android-ndk-r11b

1.在project 下的gradle.properties,里面加上:

ndk.dir=D\:\\NDK\\android-ndk-r11b

ca7aaa218280

image

2.在app 的build.gradle的

defaultConfig里面加入

ndk {

moduleName "JniTest"

ldLibs "log", "z", "m"

abiFilters "armeabi", "armeabi-v7a", "x86"

}

moduleName 就是so库的库名。第二行打印log,第三行是支持的体系架构,完整如下

ca7aaa218280

image

3.我们写本地方法(可以单独创建类,也可以直接在已有的类里面写),

ca7aaa218280

image

4.调用本地方法,然后build项目(我此处,点击button,改变textview的文本),你会在 项目名\app\build\intermediates\classes\debug(项目包名) 下找到生成的class文件

ca7aaa218280

image

5.最重要的一步:打开as 的terminal,进入 项目名\app的main目录下,输入:

javah -d jni -classpath ; education.bbk.com.myapplication.TestJJ

我的是:

ca7aaa218280

image

此时你会发下生成了.h文件

ca7aaa218280

image

6.创建main.c文件(文件命任意),打开.h文件,我们复制方法名过来,写好的如下,我们再次build

ca7aaa218280

image

* DO NOT EDIT THIS FILE - it is machine generated */

#include

#include

#ifndef LOG_TAG

#define LOG_TAG "ANDROID_LAB"

#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)

#endif

/* Header for class lab_sodino_jnitest_MainActivity */

#ifndef _Included_lab_sodino_jnitest_MainActivity

#define _Included_lab_sodino_jnitest_MainActivity

#ifdef __cplusplus

extern "C" {

#endif

/*

* Class: lab_sodino_jnitest_MainActivity

* Method: getStringFromNative

* Signature: ()Ljava/lang/String;

*/

JNIEXPORT jstring JNICALL Java_education_bbk_com_myapplication_TestJJ_getString

(JNIEnv * env, jobject jObj){

LOGE("log string from ndk.");

return (*env)->NewStringUTF(env,"Hello From JNI!");

}

#ifdef __cplusplus

}

#endif

#endif

7.buid后,我们发现已经生成了so包,然后在代码中加载库:

static {

System.loadLibrary("JniTest");

}

ca7aaa218280

image

ca7aaa218280

image

8.运行项目,点击按钮,c代码成功调用

ca7aaa218280

image

ca7aaa218280

image

9.笔记记得有点久,大家有什么疑问,欢迎讨论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值