Android Jni学习第一篇

参考链接:https://blog.csdn.net/yao_94/article/details/79151804

一、Jni开发环境配置之NDK配置
1、下载ndk

image.png

Android Studio 点击Project Structure 看到界面中只有sdk目录的配置,ndk目录的地方为空,则还没有下载ndk。点击蓝色的"download"下载即可,下载完成点击"finish"后ndk目录配置地方会自动配置完成。如下图所示:
image.png

2、新建测试Hello类
在Java包下新建书写本地方法的Java类,本案例以Hello.java为例,并书写要使用的本地方法callFromC()如下所示:
package com.xuemei.jnitest;
/**
*
 
 
* author : ${xuemei}
* e-mail : [email protected]
* time : 2018/05/11
* desc :
* version: 1.0
*

*/
public class Hello {
public static native String callFromC();
}

3、生成jni头文件
使用命令行生成头文件:前提是将你电脑上sdk的platform-tools的路径配置到环境变量中
配置方法自行百度配置,配置完成进行如下操作
Android Studio中点击terminal控制台


1526025265.png

看到输入命令前的目录了吗?要切换好java目录下再输入命令:
javah -d ../jni/ com.xuemei.jnitest.Hello
解读:com.xuemei.jnitest为包名
Hello为我们写的类名
易错点:
输入此命令前一定要记得先进入到java目录下再输入命令,否则提示错误:找不到'....'的类文件
输入包名前一定要记得输入一个空格,不然会提示:错误:未指定类

输入命令回车键完成后观察项目目录结构发现jni中多了一个头部文件如下图所示:


image.png

4、编写c文件
新建hello.c类
将头部.h文件的类名复制过来
JNIEXPORT jstring JNICALL Java_com_xuemei_jnitest_Hello_callFromC
(JNIEnv * env, jclass jclas){
return (*env)->NewStringUTF(env,"from c");
}
相当于重写,就是此处编写想要c语言实现的逻辑代码
5、新建Android.mk文件
该文件中写入以下内容
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE :=hello
LOCAL_SRC_FILES := hello.c
#for logging
LOCAL_LDLIBS += -llog
include $(BUILD_SHARED_LIBRARY)

附加解释:
Android.mk文件中的LOCAL_MODULE :=hello指定的是生成动态库的名字,LOCAL_SRC_FILES :=hello.c关联的是jni目录下的.c文件。
注意:在这个模块中必须包含LOCAL_MODULE和LOCAL_SRC_FILES变量并赋值。模块将会编译LOCAL_SRC_FILES指定的资源文件生成一个名为“lib$(LOCAL_MODULE).so”文件
更多有关Android.mk的变量含义请查看:https://blog.csdn.net/earbao/article/details/38702245
或者自行百度更多文章学习
目录结构如下图所示:
![J{YST`27$N9MD12[]8~8.png

6、剩余步骤查看提供的参考链接即可

你可能感兴趣的:(Android Jni学习第一篇)