由于arm板的硬件调用 要通过c程序 所以把c的硬件调用代码写成一个库给java调用

添加链接描述
配制好能让c库被调用的环境

应用界面 让里面的按键能被调用

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><CheckBoxandroid:id="@+id/LED4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/box4"android:textSize="18sp"android:onClick="onCheckboxClicked"app:layout_constraintBottom_toTopOf="@+id/guideline5"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="@+id/guideline"app:layout_constraintTop_toTopOf="@+id/guideline4" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/LED_control"android:textSize="30sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toStartOf="@+id/guideline"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toStartOf="@+id/guideline"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.022" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"app:layout_constraintGuide_percent="0.5" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.08" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.2" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.35" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline5"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.5" /><Buttonandroid:id="@+id/BUTTON"android:layout_width="0dp"android:layout_height="0dp"android:text="@string/ALL_LED"android:textSize="24sp"app:layout_constraintBottom_toTopOf="@+id/guideline3"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="@+id/guideline2" /><CheckBoxandroid:id="@+id/LED1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/box1"android:textSize="18sp"android:onClick="onCheckboxClicked"app:layout_constraintBottom_toTopOf="@+id/guideline4"app:layout_constraintEnd_toStartOf="@+id/guideline"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="@+id/guideline3" /><CheckBoxandroid:id="@+id/LED2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/box2"android:textSize="18sp"android:onClick="onCheckboxClicked"app:layout_constraintBottom_toTopOf="@+id/guideline4"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="@+id/guideline"app:layout_constraintTop_toTopOf="@+id/guideline3" /><CheckBoxandroid:id="@+id/LED3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/box3"android:textSize="18sp"android:onClick="onCheckboxClicked"app:layout_constraintBottom_toTopOf="@+id/guideline5"app:layout_constraintEnd_toStartOf="@+id/guideline"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="@+id/guideline4" /></androidx.constraintlayout.widget.ConstraintLayout>

效果

在主应用程序中的执行代码

package com.example.myapplication;import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.Toast;
import com.thisway.hardlibrary.*;import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {private boolean ledon = false;private Button button = null;private CheckBox checkBoxLed1 = null;private CheckBox checkBoxLed2 = null;private CheckBox checkBoxLed3 = null;private CheckBox checkBoxLed4 = null;class MyButtonListener implements View.OnClickListener {@Overridepublic void onClick(View v) {ledon = !ledon;if (ledon) {button.setText("ALL OFF");checkBoxLed1.setChecked(true);checkBoxLed2.setChecked(true);checkBoxLed3.setChecked(true);checkBoxLed4.setChecked(true);HardControl.ledCtrl(0,1);HardControl.ledCtrl(1,1);HardControl.ledCtrl(2,1);HardControl.ledCtrl(3 ,1);}else {button.setText("ALL ON");checkBoxLed1.setChecked(false);checkBoxLed2.setChecked(false);checkBoxLed3.setChecked(false);checkBoxLed4.setChecked(false);HardControl.ledCtrl(0,0);HardControl.ledCtrl(1,0);HardControl.ledCtrl(2,0);HardControl.ledCtrl(3 ,0);}}}public void onCheckboxClicked(View view) {// Is the view now checked?boolean checked = ((CheckBox) view).isChecked();// Check which checkbox was clickedswitch(view.getId()) {case R.id.LED1:if (checked) {// Put some meat on the sandwichToast.makeText(getApplicationContext(), "LED1 on", Toast.LENGTH_SHORT).show();HardControl.ledCtrl(0,1);}else {// Remove the meatToast.makeText(getApplicationContext(), "LED1 off", Toast.LENGTH_SHORT).show();HardControl.ledCtrl(0,0);}break;case R.id.LED2:if (checked) {// Put some meat on the sandwichToast.makeText(getApplicationContext(), "LED2 on", Toast.LENGTH_SHORT).show();HardControl.ledCtrl(1,1);}else {// Remove the meatToast.makeText(getApplicationContext(), "LED2 off", Toast.LENGTH_SHORT).show();HardControl.ledCtrl(1,0);}break;case R.id.LED3:if (checked) {// Put some meat on the sandwichToast.makeText(getApplicationContext(), "LED3 on", Toast.LENGTH_SHORT).show();HardControl.ledCtrl(2,1);}else {// Remove the meatToast.makeText(getApplicationContext(), "LED3 off", Toast.LENGTH_SHORT).show();HardControl.ledCtrl(2,0);}break;case R.id.LED4:if (checked) {// Put some meat on the sandwichToast.makeText(getApplicationContext(), "LED4 on", Toast.LENGTH_SHORT).show();HardControl.ledCtrl(3,1);}else {// Remove the meatToast.makeText(getApplicationContext(), "LED4 off", Toast.LENGTH_SHORT).show();HardControl.ledCtrl(3,0);}break;// TODO: Veggie sandwich}}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = (Button) findViewById(R.id.BUTTON);HardControl.ledOpen();checkBoxLed1 = (CheckBox) findViewById(R.id.LED1);checkBoxLed2 = (CheckBox) findViewById(R.id.LED2);checkBoxLed3 = (CheckBox) findViewById(R.id.LED3);checkBoxLed4 = (CheckBox) findViewById(R.id.LED4);button.setOnClickListener(new MyButtonListener());}
}

在主应用程序中 由于有c的调用 写出c库的代码

package com.thisway.hardlibrary;public class HardControl{public static native int ledCtrl(int which , int status);public static native int ledOpen();private static native void ledClose();static {try {System.loadLibrary("hardcontrol");} catch (Exception e) {e.printStackTrace();}}}```
根据 java程序中  写出  c被调用的代码  该代码不在Android studio中  拿去linux 中编译出  lib库
hardcontrol.c```c#include <jni.h>  /* /usr/lib/jvm/java-1.7.0-openjdk-amd64/include/ */
#include <stdio.h>
#include <stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<sys/ioctl.h>#include<android/log.h>#if 0
typedef struct {char *name;          /* JavaÀïµ÷Óõĺ¯ÊýÃû */char *signature;    /* JNI×Ö¶ÎÃèÊö·û, ÓÃÀ´±íʾJavaÀïµ÷Óõĺ¯ÊýµÄ²ÎÊýºÍ·µ»ØÖµÀàÐÍ */void *fnPtr;          /* CÓïÑÔʵÏֵı¾µØº¯Êý */
} JNINativeMethod;
#endifjint ledOpen(JNIEnv *env, jobject cls)
{__android_log_print(ANDROID_LOG_DEBUG, "LEDDemo", "native ledOpen " );return 0;
}void ledClose(JNIEnv *env, jobject cls)
{__android_log_print(ANDROID_LOG_DEBUG, "LEDDemo", "native ledclose " );
}jint ledCtrl(JNIEnv *env, jobject cls,jint which ,jint status)
{__android_log_print(ANDROID_LOG_DEBUG, "LEDDemo", "native ledCtrl : %d, %d,) ",which,status );return 0;
}static const JNINativeMethod methods[] = {{"ledOpen", "()I", (void *)ledOpen},{"ledClose", "()V", (void *)ledClose},{"ledCtrl", "(II)I", (void *)ledCtrl},
};/* System.loadLibrary */
JNIEXPORT jint JNICALL
JNI_OnLoad(JavaVM *jvm, void *reserved)
{JNIEnv *env;jclass cls;if ((*jvm)->GetEnv(jvm, (void **)&env, JNI_VERSION_1_4)) {return JNI_ERR; /* JNI version not supported */}cls = (*env)->FindClass(env, "com/thisway/hardlibrary/HardControl");if (cls == NULL) {return JNI_ERR;}/* 2. map java hello <-->c c_hello */if ((*env)->RegisterNatives(env, cls, methods, sizeof(methods)/sizeof(methods[0])) < 0)return JNI_ERR;return JNI_VERSION_1_4;
}

拿着hardcontrol.c 在linux里面编译

arm-linux-gcc  -fPIC -shared  hardcontrol.c -o libhardcontrol.so   -I/usr/lib/jvm/java-1.7.0-openjdk-amd64/include/ -nostdlib /home/book/Desktop/android-5.0.2/prebuilts/ndk/9/platforms/android-19/arch-arm/usr/lib/libc.so   -I/home/book/Desktop/android-5.0.2/prebuilts/ndk/9/platforms/android-19/arch-arm/usr/include /home/book/Desktop/android-5.0.2/prebuilts/ndk/9/platforms/android-19/arch-arm/usr/lib/liblog.so

生成 libhardcontrol.so文件 放入android studio

tiny 4412 在android中访问c 库相关推荐

  1. 在Android中调用KSOAP2库访问webservice服务出现的服务端传入参数为null的问题解决

    在Android中调用KSOAP2库访问webservice服务出现的服务端传入参数为null的问题解决 参考文章: (1)在Android中调用KSOAP2库访问webservice服务出现的服务端 ...

  2. Android中集成第三方库的方法和问题

    Android中集成第三方库的方法和问题 声明: 1. 本文參考了网上同学们的现有成果,在此表示感谢,參考资料在文后有链接. 2. 本文的重点在第三部分,是在开发中遇到的问题及解决的方法.第一,第二部 ...

  3. 如何在Android中使用emojicon库集成表情符号, 妈妈在也不用担心我的表情了~~~

    如何在Android中使用emojicon库集成表情符号 最全最专业的emojicon库教程. 在本教程中,我们将学习如何通过一个简单的示例在Android应用程序中使用emojicon库集成  表情 ...

  4. 在Android中访问内置SE和基于SE的卡模拟(一)

    2013-10-10 编写 前言 在"十问Android NFC手机上的卡模拟"文中仅仅简单的介绍了一下相关的概念,如果需要了解基于SE的卡模拟的更多细节,也就是,究竟在Andro ...

  5. Android中调用.so库操作步骤

    参考:http://www.cnblogs.com/anyanran/archive/2010/11/22/ndk1.html http://www.cnblogs.com/sevenyuan/p/4 ...

  6. 02_JNI中Java代码调用C代码,Android中使用log库打印日志,javah命令的使用,Android.mk文件的编写,交叉编译

     1  编写以下案例(下面的三个按钮都调用了底层的C语言): 项目案例的代码结构如下: 2 编写DataProvider的代码: package com.example.ndkpassdata; ...

  7. android中访问手机存储空间,android – 访问手机内部存储以推入SQLite数据库文件...

    我正在使用Netbeans和java开发我的android应用程序.当我使用模拟器时,我可以通过访问以下路径,data / data / com.example.helloandroid / data ...

  8. java隐藏密钥_java – 在Android中隐藏密钥库密码的最佳方法是什么?

    我是Android开发和实现SSLSockets的新手.在做了一些挖掘后,我能够设置一个正常工作的简单服务器/客户端.我认为实现可以使用一些工作,并且难以将密码加载到密钥库而不用纯文本.这是客户端的一 ...

  9. Android中访问sdcard路径的几种方式

    以前的Android(4.1之前的版本)中,SDcard路径通过"/sdcard"或者"/mnt/sdcard"来表示,而在JellyBean(安卓4.1)系统 ...

最新文章

  1. 【Codeforces】808D Array Division(前后两部分和相等)
  2. 精英讲师培训笔记02-培训师手势如何做
  3. 深入浅出剖析 OpenCV 视觉处理
  4. Atitit.操作注册表 树形数据库 注册表的历史 java版本类库总结
  5. Java 11即将发布的功能–启动单文件源程序
  6. 深和jsonp【转】 jsonpk跨域问题详解
  7. 《中国人工智能学会通讯》——11.64 基于成对约束的属性特征选择
  8. JAVA定义一个鲜花类_Java作业 题目:16版.情人节送玫瑰花
  9. TensorFlow函数使用总结
  10. python3基础-变量
  11. [HTML5]块和内联元素的嵌套
  12. 嵌套查询(2020-3-25 )
  13. Java——异常处理,数据库连接
  14. BeanUtils.copyProperties() 详解
  15. 详细Gitee(码云)使用方法
  16. Asp.net +jQuery +ajax 传参问题
  17. python爬虫-京东全网搜索
  18. C++中endl的本质是什么
  19. 万兆交换机用什么网线_万兆交换机SFP+端口是否能与千兆交换机SFP端口连接?...
  20. C语言 单词长度 代码

热门文章

  1. 智能工厂 | 联合汽车电子有限公司汽车驱动科技上海智能工厂
  2. validForm结合layer制作表单验证提示
  3. 百度入局, 一文读懂年交易过4亿「超级链」究竟是什么?
  4. python编程01 -- 基础知识
  5. 通过VNC远程接入BeagleBone Black桌面
  6. git从主干拉取新分支
  7. 程序设计入门——C语言 习题汇总
  8. SPARK-SQL 读取 内存table 或 hive中的table
  9. MATLAB怎么使用table格式读取csv文件并画图
  10. R语言用read.table()函数读取txt文件时报错incomplete final line found by readTableHeader