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.pswp.cn/news/167028.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/167028.shtml
英文地址,請注明出處:http://en.pswp.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;負責處理客戶端的連接請求。它監聽服務器上的端口…