指令执行完成后可以发现在jni目录下生成了包名加类名的头文件
/* DO NOT EDIT THIS FILE - it is machine generated */#include
可以发现,头文件中根据.java中定义的java类接口生成了JNI接口函数,我们要实现这个接口函数 。
然后在JNI下创建.c文件
文章插图
在.c中,我们将头文件中的接口函数据复制过来,然后使用操作linux设备文件
//// Created by shiyu on 2019/8/17.//#include#include#include #include //导入我们创建的头文件#include "com_example_led_test_jni_led.h"#define DEVICE_NAME"/dev/leds"JNIEXPORT jstring JNICALL Java_com_example_led_JNITest_Leds_1Operation(JNIEnv *env, jclass obj, jint ledsNum, jboolean status){int leds_fd = 0;leds_fd = open(DEVICE_NAME, O_RDWR);//打开设备节点if (leds_fd == -1) {return 1;}switch (ledsNum) {case 0:if (status)ioctl(leds_fd, 0, 0);elseioctl(leds_fd, 1, 0);break;case 1:if (status)ioctl(leds_fd, 0, 1);elseioctl(leds_fd, 1, 1);break;defautl :break;}close(leds_fd);return 0;//操作成功返回0}
在jni下创建一个.mk文件
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := jni_ledLOCAL_SRC_FILES := com_example_led_test_jni_led.cinclude $(BUILD_SHARED_LIBRARY)
这时指定了生成库的名字和源文件,再新建一个.mk文件
APP_ABI := all
安装NDK工具集后,进入jni目录使用ndk-build命令将JNI接口程序编译成库文件
在libs目录下生成了各种平台的库文件
为了让项目能够找到我们的生成的库,在build. 文件夹的下添加:
sourceSets {main() {jniLibs.srcDirs = ['../libs']jni.srcDirs = [] //屏蔽掉默认的jni编译生成过程}}
然后在.java中加载生成的库文件
package com.example.led_test;public class jni_led {static {System.loadLibrary("jni_led");//加载生成的.so文件}public native static String Leds_Operation(int ledNum, boolean status); //操作接口}
接下来我们编写应用程序利用接口控制LED灯
4.编写应用程序
打开工程目录下的.xml文件,添加4个,并指写的回调函数
我们为4个按键指定了4个回调函数据,接下来我们在.java中实现这4个回调函数
package com.example.led_test;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.view.View;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void led2_on_click( View view ){jni_led.Leds_Operation(0, false);}public void led2_off_click( View view ){jni_led.Leds_Operation(0, true);}public void led3_on_click( View view ){jni_led.Leds_Operation(1, false);}public void led3_off_click( View view ){jni_led.Leds_Operation(1, true);}}
- Android Studio-手把手教你基于SQLLITE实现登录注册功能
- Android驱动程序编写过程记录
- android 驱动学些入门-------Device Tree 第一篇
- android 打包混淆,debug可以正常使用,混淆正式包就一点就崩
- Android Notification自定义通知样式你要知道的事(androi
- android实现爆炸式菜单按钮弹出效果_微信 Android 内测版更新:小程
- Android通知工具类,含8.0通知适配,打开通知设置页面适配
- android 简单时间表,华为公布Android 10全球更新时间表
- 【Android 】零基础到飞升 | 界面原型设计
- # Android微信支付接入