目录
01 17-android环境
02 1-项目演示
03 2-创建TextView控件
04 3-创建一个button控件
1 需要创建一个java类 专门调用JNI接口的一个java类
类的路径应该和Activity平级
在类中写如下代码
/*是专门为java提供调用c++jni接口的类*/
public class OBOJNI {
public static OBOJNI getInstance() {
if (instance == null) {
instance = new OBOJNI();
}
return instance;
}
private static OBOJNI instance = null;
//给java提供一个jni接口
public native void hello_jni();
//加载cpp给提供的 动态库
static {
System.loadLibrary("OBOJni"); //libOBOJni.so
}
}
05 4-日志的调试
2 将native方法 转换成C++对应的声明函数
javah工具
打开powershell终端
cd到
C:\Users\Ace\Documents\GitHub\OBO\OBO_23\app\src\main\java
javah -jni com.itcast.ace.obo_23.OBOJNI
3 得到一个native函数的c++语法声明 和.h文件
06 5-editText控件
4 将函数声明实现 在test.cpp中实现
一定要写在extern "C"{} 中
#include <jni.h>
#include <android/log.h>
void hello_test_jni()
{
__android_log_print(ANDROID_LOG_ERROR, "JNI", "hello JNI test!!!");
}
extern "C"
{
/*
* Class: com_itcast_ace_obo_23_OBOJNI
* Method: hello_jni
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_itcast_ace_obo_123_OBOJNI_hello_1jni
(JNIEnv * env, jobject obj)
{
hello_test_jni();
}
07 6-checkBox控件和登陆界面布局
/*
* Class: com_itcast_ace_obo_23_OBOJNI
* Method: hello_jni2
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_itcast_ace_obo_123_OBOJNI_hello_1jni2
(JNIEnv *env, jobject obj)
{
__android_log_print(ANDROID_LOG_ERROR, "JNI", "hello JNI test222!!!");
}
}
5 cd jni路径 执行 ndk-build.cmd 重新生成一个新的so
6 在java中调用jni接口
01 7-中午回顾
1 在项目根路径中创建一个jni文件夹
2 在jni文件夹中创建一个 Android.mk文件(相当于jni路径中的makefile)
3 在jni路径中创建一个cpp文件 test.cpp
4 在Android.mk文件中
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
#libOBOJni.so
LOCAL_MODULE := OBOJni
LOCAL_SRC_FILES := test.cpp
LOCAL_LDLIBS := -llog
02 8-登陆界面的布局实现
#要生成的是一个so动态库
include $(BUILD_SHARED_LIBRARY)
5 在test.cpp随便定义一个函数
void hello_test_jni()
{
}
6 在app/build.gradle中 的android{}标签中添加
sourceSets {
main.jniLibs {
source {
srcDirs = ['../libs']
}
}
}
externalNativeBuild {
ndkBuild {
path '../jni/Android.mk'
}
}
03 9-界面的跳转
7 点击sync Now 同步配置
8 打开powershell 找到 jni路径 cd进去
执行 ndk-build.cmd
如果能够成功生成 so文件 表示 jni环境配置成功。
04 10-注册界面的实现
05 11-Activity的生命周期
06 12-autoCompleteTextView控件