Android第一个JNI程序
一、官方Demo的运行
1、下载android-ndk。
官方下载地址、国内下载地址
2、配置环境变量
在path路径下添加自己ndk的路径。例如我的是:E:\android\developer\android-ndk-r9d
3、导入官方Demo程序
E:\android\developer\android-ndk-r9d\samples\hello-jni
4、在命令行切换到项目的目录下,执行ndk-build命令生成.so文件
5、运行程序在手机上即可。
二、写自己的第一个Jni程序
1、新建一个android项目MyHelloJni
2、在MainActivity中添加一个本地方法
public native String getStringFromC();
3、在项目的根目录下创建一个jni文件夹
4、在命令行中切换到项目的根目录下,使用javah命令生成jni要使用到的.h文件
javah -classpath bin\classes;路径\android.jar -d jni 报名.类名
5、刷新项目,在jni目录下即可看到生成的.h文件
6、在jni目录下新建文件hello.c
7、编辑hello.c文件
#include
#include
#include "com_goodocom_myhellojni_MainActivity.h"
在.h文件中copy要实现的方法
JNIEXPORT jstring JNICALL Java_com_goodocom_myhellojni_MainActivity_getStringFromC
(JNIEnv *, jobject);
添加参数名
JNIEXPORT jstring JNICALL Java_com_goodocom_myhellojni_MainActivity_getStringFromC
(JNIEnv * env, jobject obj)
添加方法体
JNIEXPORT jstring JNICALL Java_com_goodocom_myhellojni_MainActivity_getStringFromC
(JNIEnv * env, jobject obj){
return (*env)->NewStringUTF(env, "Hello from JNI !");
}
保存hello.c文件
8、在jni目录下添加Android.mk文件
9、添加一下内容
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello
LOCAL_SRC_FILES := hello.c
include $(BUILD_SHARED_LIBRARY)
10、修改.mk文件
//生成.so文件的名称
LOCAL_MODULE := hello
//要加载的.c文件名称
LOCAL_SRC_FILES := hello.c
11、在命令行切换到项目根目录下,执行ndk-build命令,即可在lib目录下生成armeabi文件夹,armeabi目录下就是生成的.so文件
12、在MainAcitivity中使用静态代码块,加载.so文件
static{
System.loadLibrary("hello");
}
注意:加载库的名称为自己在.mk文件中修改的名称,而非生成的.so文件的名称。这里就是“hello”,而非“libhello.so”。
13、调用本地方法。
Log.d("MainActivity", getStringFromC());
14、运行程序,即可在控制台看到getStringFromC()返回的结果
更多相关文章
- Android经典项目案例开发实战宝典
- Android Studio 3.5中导入项目时关于Gradle错误的解决
- android菜鸟学习笔记16----Android项目打包安装过程(Run as Andr
- Android根文件系统分析
- 在Android java代码中如何改变文件的权限
- 《Android学习指南》文件夹
- android 获取文件夹、文件的大小 以B、KB、MB、GB 为单位
- android下载编译以及文件系统提取总结
- Android 文件保存与读取