Android11编译第七弹:串口文件读写

问题:需要对SIM卡进行管理,支持APP切换SIM卡。此功能需要访问串口文件,并且对串口文件进行读写。APP操作串口文件/dev/ttyUSB1时,串口文件打开失败。

2023-11-23 10:59:44.092 14264-14264 MULTI_CARD_SerialHandle com.wellnkiot.multinic               E  ===========open errorjava.lang.SecurityExceptionat android.serialport.SerialPort.<init>(SerialPort.java:108)at android.serialport.SerialPort$Builder.build(SerialPort.java:299)at com.wellnkiot.multinic.mode.SerialHandle.open(SerialHandle.java:79)at com.wellnkiot.multinic.mode.SerialHandle.open(SerialHandle.java:50)at com.wellnkiot.multinic.mode.SerialManage.open(SerialManage.java:70)at com.wellnkiot.multinic.mode.command.impl.ChangeCardPinServiceImpl.<init>(ChangeCardPinServiceImpl.java:53)at com.wellnkiot.multinic.mode.command.SimCommandMode.getChangeCardService(SimCommandMode.java:91)at com.wellnkiot.multinic.mode.command.SimCommandMode.changeAutoStatus(SimCommandMode.java:60)

打开串口的时候,报错“java.lang.SecurityException”,这个是安全访问错误。

一、什么是串口?

二、串口文件的访问

三、串口文件授权访问

怎么实现APP对串口文件的访问呢?

基本的实现思路:

1)APP授权system用户。APP采用系统签名,作为系统应用, 对应的用户system,方便用户访问读写串口文件

2)串口文件授权system用户访问

3.1 应用调整为系统应用

3.1.1 什么是应用应用?

系统应用需要集成到ROM中。

3.1.2 APP签名采用系统签名

APP打包的时候,签名文件采用系统签名文件。

对应的APP application模块,build.gradle中,定义签名文件

    signingConfigs {release {keyAlias 'xxx'keyPassword 'xxx'storeFile file('../systemJupiter.jks')storePassword 'xxx'}debug {keyAlias 'xxx'keyPassword 'xxx'storeFile file('../systemJupiter.jks')storePassword 'xxx'}}buildTypes {debug {// 版本名称增加后缀versionNameSuffix = ".debug"minifyEnabled falsedebuggable trueproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'signingConfig signingConfigs.debug}release {minifyEnabled truedebuggable false//true 开启可以知道进程包名,debug默认为trueproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'signingConfig signingConfigs.release}}

编译时采用系统签名。

这样,生成的APP,对应的用户是system,用户组也是system

3.1.3 APP清单文件指定UID为system

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"package="com.sandstar.jupiter.client"android:sharedUserId="android.uid.system">
android:sharedUserId="android.uid.system"

将此APP的用户ID定义为系统system

3.1.4 内置应用允许升级更新

清单文件AndroidManifest.xml中,application节点,不要设置为常驻程序

android:persistent="true",否则无法安装过呢更新包。

因为系统应用+常驻程序,是不允许安装更新包的。

3.2 串口文件授权system访问

APP已经授权system用户以后,就可以访问system级别的文件。

3.2.1 确认系统串口文件普通权限

1|lahaina:/ $ ls -al /dev/tty*
crw-rw-rw- 1 root      root     5,   0 1970-01-03 08:44 /dev/tty
crw------- 1 root      root   235,   0 1970-01-03 08:44 /dev/ttyEUD0
crw-rw---- 1 bluetooth net_bt 234,   0 2023-11-23 11:17 /dev/ttyHS0
crw-rw---- 1 system    system 234,   1 1970-01-03 08:44 /dev/ttyHS1
crw-rw---- 1 system    system 234,   2 2023-11-23 11:21 /dev/ttyHS2
crw------- 1 root      root     4,  64 1970-01-03 08:44 /dev/ttyS0
crw------- 1 root      root     4,  65 1970-01-03 08:44 /dev/ttyS1
crw------- 1 root      root     4,  66 1970-01-03 08:44 /dev/ttyS2
crw------- 1 root      root     4,  67 1970-01-03 08:44 /dev/ttyS3
crw-rw---- 1 radio     radio  188,   0 2023-11-22 14:55 /dev/ttyUSB0
crw-rw---- 1 radio     radio  188,   1 2023-11-22 14:55 /dev/ttyUSB1
crw-rw---- 1 radio     radio  188,   2 2023-11-23 11:22 /dev/ttyUSB2
crw-rw---- 1 radio     radio  188,   3 2023-11-22 14:55 /dev/ttyUSB3
lahaina:/ $

很清理,我们能看到/dev/ttyHS1和/dev/ttyHS2都是归属 system:system用户组,因此我们的

系统应用可以访问。而 /dev/ttyUSB1,归属的用户是radio:radio,两者并非同一个用户组,

因此无法通过system访问 /dev/ttyUSB1 串口文件。

3.2.2 串口文件归属切换system用户

怎么将  /dev/ttyUSB1 文件用户组调整为 system:system 呢?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/167028.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三分钟快速理解 ChatGPT 背后的大模型技术

在过去的十年中&#xff0c;人工智能领域取得了重大突破&#xff0c;其中自然语言处理&#xff08;NLP&#xff09;是其重要子领域之一。NLP使用的模型之一是大型语言模型&#xff08;LLMs&#xff09;。LLMs被设计用于处理大量文本数据&#xff0c;采用先进的神经网络架构&…

nodejs 文件目录监听 chokidar watchpack

文件监听实现&#xff0c;推荐使用chokidar&#xff1a; chokidar 默认是基于事件监听文件 const chokidar require("chokidar"); const folderToWatch path.join(__dirname, "lib"); const watcher chokidar.watch(folderToWatch, { ignored: /(^|[…

在Vue中使用Echarts

文章目录 Echarts1. 介绍2. 体验NPM 安装 Echarts定义 Echarts 容器引入 Echarts 3. 基础配置 Echarts 1. 介绍 常见的数据可视化库&#xff1a; D3.js 目前 Web 端评价最高的 Javascript 可视化工具库(入手难)ECharts.js 百度出品的一个开源 Javascript 数据可视化库Highch…

鼠标拖拽问题,不选中文本不触发单击事件

文章目录 1. 为什么鼠标单击的时候触发了mousemove事件&#xff1f;明明鼠标没有移动2. 鼠标拖拽元素怎么能不触发单击事件&#xff1f;怎么处理鼠标在元素内的相对定位&#xff0c;而不是每次定位到左上角&#xff1f;方式一&#xff1a;拖拽的元素没有注册click监听就不会触发…

10年测试老鸟,自动化测试经验10条建议,一路狂飙...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、哪一刻&#x…

Java面试题(每天10题)-------连载(37)

目录 Mysql篇 1、Mysql如何优化DISTINCT&#xff1f; 2、如何输入字符为十六进制数字&#xff1f; 3、如何显示前50行&#xff1f; 4、可以使用多少列创建索引&#xff1f; 5、NOW()和CURRENT_DATE()有什么区别&#xff1f; 6、什么样的对象可以使用CREATE语句创建&…

Postman如何使用(二):Postman Collection的创建/使用/导出分享等

一、什么是Postman Collection&#xff1f; Postman Collection是可让您将各个请求分组在一起。 您可以将这些请求组织到文件夹中。中文经常将collection翻译成收藏夹。如果再下文中看到这样的翻译不要觉得意外。Postman Collection会使你的工作效率更上一层楼。Postman Colle…

【洛谷 B2080】计算多项式的值 题解(顺序结构+四则运算)

计算多项式的值 题目描述 假定多项式的形式为 x n x ( n − 1 ) x^nx^{(n-1)} xnx(n−1) … x 2 x 1 x^2x1 x2x1&#xff0c;请计算给定单精度浮点数 x x x 和正整数 n n n 值的情况下这个多项式的值。多项式的值精确到小数点后两位&#xff0c;保证最终结果在 doub…

NFS 速度变慢问题排查 性能优化

NFS 使用 RPC 来进行客户端和服务器之间的通信。而在 RPC 的底层&#xff0c;NFS 使用 TCP 来进行数据的可靠传输&#xff0c;以便客户端和服务器之间能够有效地传输文件和进行远程调用&#xff08;默认为TCP,也可调整为udp&#xff09; 1.首先服务器端启动RPC服务portmap&…

教师工作就业前景

在这个知识爆炸的时代&#xff0c;当老师无疑是社会发展的重要基石。随着科技的进步和社会的发展&#xff0c;教育行业的需求也在不断增长。那么&#xff0c;教师工作的就业前景如何呢&#xff1f; 我们来看看教师工作的市场需求。随着国家对教育的重视和投入的增加&#xff0c…

C/C++ 实现Socket交互式服务端

在 Windows 操作系统中&#xff0c;原生提供了强大的网络编程支持&#xff0c;允许开发者使用 Socket API 进行网络通信&#xff0c;通过 Socket API&#xff0c;开发者可以创建、连接、发送和接收数据&#xff0c;实现网络通信。本文将深入探讨如何通过调用原生网络 API 实现同…

「Java开发中文指南」IntelliJ IDEA插件安装(一)

IntelliJ IDEA是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的Java开发工具&#xff0c;尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能是非常强大的。 插件扩展了Intel…

【分布式】分布式中的时钟

一、物理时钟 vs 逻辑时钟 时钟的存在主要是为了标识事件的发生顺序。 分布式系统不使用物理时钟记录事件&#xff0c;分布式系统中每个节点记录的时间并不一样&#xff0c;即使设置了 NTP 时间同步节点间也存在毫秒级别的偏差 所以需要有另外的方法记录事件顺序关系&#x…

vue2中使用echarts

1,安装echarts npm install --save echarts 2&#xff0c;具体页面 <template><div class"app-container"><div class"aa" id"main" style"width: 500px; height: 400px;"></div></div> </te…

PDF 批量处理软件BatchOutput PDF mac中文版介绍

BatchOutput PDF mac是一款适用于 Mac 的 PDF 批量处理软件。它可以帮助用户将多个 PDF 文件进行异步处理&#xff0c;提高工作效率。 BatchOutput PDF 可以自动化执行许多任务&#xff0c;包括 PDF 文件的打印、转换、分割、压缩、加密、重命名等&#xff0c;而且它还可以将自…

Elasticsearch知识

目录 Elasticsearch逻辑设计和物理设计 逻辑设计物理设计Elasticsearch原理 倒排索引文档的分析过程保存文档搜索文档写数据的底层原理 数据刷新&#xff08;fresh&#xff09;事务日志的写入ES在大数据量下的性能优化 文件系统缓存优化数据预热文档&#xff08;Document&…

【数据分享】2023年我国省市县三级的瞪羚企业数量(免费获取/Excel/Shp格式)

企业是经济活动的参与主体。一个城市的企业数量决定了这个城市的经济发展水平&#xff01;比如一个城市的金融企业较多&#xff0c;那这个城市的金融产业肯定比较发达&#xff1b;一个城市的制造业企业较多&#xff0c;那这个城市的制造业肯定比较发达。 之前我们给大家分享了…

《opencv实用探索·二》根据RGB的像素排列来理解图像深度、像素深度和位深度

通常对于RGB图像主要分为RGB16&#xff0c;RGB24和RGB32。RGB16从高位到低位的排列为R->G->B&#xff0c;RGB24和RGB32从高位到低位的排列为B->G->R。 RGB16: 16 位为一个存储单元&#xff08;一个像素&#xff09;&#xff0c;来存储一个RGB像素;因为人眼对绿色比…

社区物联网云服务架构设计

文章目录 1 摘要2 架构图2.1 社区物联网云服务网络拓扑图2.2 社区物联网云服务通讯流程图2.3 社区远程开锁功能流程图 3 应用场景 1 摘要 随着社区管理越来越智能化&#xff0c;社区物联网升级与改造的市场空间也越来越大。社区物联网包含楼宇对讲、门禁门锁、通道闸等等设备系…

Netty 模型理解

参考文章 1 参考文章 2 官网API文档 Reactor模型 Netty模型 Netty主要基于主从Reactor多线程模型进行了一定的修改&#xff0c;该模型包括以下几个组件&#xff1a; MainReactor&#xff08;主Reactor&#xff09;&#xff1a;负责处理客户端的连接请求。它监听服务器上的端口…