Android UART 串口通信實戰(zhàn)記錄
近期有一個項目要求實現(xiàn)Windows機器與Android開發(fā)版之間的UART串口通信。經(jīng)過幾天的查找與嘗試,我最終找到了一個有效的解決方案。在此,我記錄下這個過程,希望能為后來的開發(fā)者提供一些參考,并希望大家能在Git上支持我的開源方案。
項目背景及環(huán)境

本項目涉及的環(huán)境包括:
Android版本:Android 3.0.1
Gradle版本:Gradle 4.1
開發(fā)板:ARM開發(fā)版 RK3399
PC機器:Windows 10

開發(fā)機器:Mac OS 10.13.3
遇到的挑戰(zhàn)及解決方案
在項目中,我遇到了“dlopen failed: has text relocations”的錯誤。這是因為使用的android-serialport-api項目中的so文件使用了較舊的NDK進行編譯,對于Android 6.0以上版本存在兼容性問題。為了解決這個問題,我決定升級項目,使用cmake進行編譯。
項目結(jié)構(gòu)升級
升級后的項目結(jié)構(gòu)如下:

app目錄對應原項目中的各個Activity。
androidserial是一個module,對應編譯之前的so文件,還包括API的封裝??梢灾苯右胊ndroidserial,并根據(jù)app目錄下的activity調(diào)用相關(guān)方法。
關(guān)于權(quán)限的問題
在接入開發(fā)板后,如果遇到了“Error You do not have read/write permission to the serial port”的權(quán)限問題,需要獲取root權(quán)限??梢栽陂_發(fā)者模式中開啟root權(quán)限,并使用adb和應用來操作。
使用以下命令開啟Android對串口的讀寫權(quán)限:

setenforce 0:關(guān)閉防火墻。但據(jù)我測試,實際上可能并不需要關(guān)閉防火墻,關(guān)鍵是給予相應的權(quán)限。
請注意,ttyS1-6對應的是UART串口1-6,需要根據(jù)開發(fā)板的說明確認具體的對應關(guān)系。
安卓開發(fā)需要掌握的技能
如果你正在學習安卓開發(fā),可以根據(jù)自己目前的技術(shù)能力判斷需要往以下哪個階段去進階:
1. Android基礎階段:掌握架構(gòu)設計、動態(tài)編程技術(shù)原理、Android虛擬機指令、垃圾回收、并發(fā)內(nèi)存模型等基本技能。

2. Android開發(fā)核心部分:深入學習UI優(yōu)化、啟動優(yōu)化、崩潰優(yōu)化、卡頓優(yōu)化、安全性優(yōu)化等,并對APP深度優(yōu)化、開發(fā)焦點問題優(yōu)化、編程效率優(yōu)化進行研究。
3. Framework與Android內(nèi)核:了解Framework通信、底層服務、系統(tǒng)資源、機制、UI機制等,并進行實戰(zhàn)總結(jié)。
一、Android音視頻技能
深入掌握Android音視頻技術(shù),首先需要奠定堅實的編程基礎。你需要熟悉C與C++基礎語法,這是構(gòu)建高效、穩(wěn)定應用的關(guān)鍵。H264編碼基礎及進階知識也是必不可少的。了解H265編碼原理和其在Android平臺上的應用,以及MediaCodec硬解碼技術(shù)(聯(lián)發(fā)科與高通)。Media內(nèi)核源碼的學習將幫助你更深入地理解音視頻處理技術(shù)。
二、Android資深架構(gòu)師技能

作為Android資深架構(gòu)師,除了掌握音視頻技術(shù)外,還需要具備一系列通用技能。深入了解網(wǎng)絡訪問、圖片加載機制以及進程通信框架是關(guān)鍵。掌握Rx響應式編程思想,精通依賴注入與解耦技術(shù),并具備組件化結(jié)構(gòu)設計的實戰(zhàn)經(jīng)驗。這些技能將幫助你在構(gòu)建高效、可擴展的Android應用時得心應手。
三、Flutter高級工程師技能
在跨平臺開發(fā)領域,F(xiàn)lutter技術(shù)日益受到重視。作為Flutter高級工程師,你需要掌握Dart語言的進階知識,深入了解Flutter 3.0的UI設計、線程管理以及啟動流程。掌握Flutter的性能監(jiān)控技術(shù),確保應用在各種設備上的流暢運行。這些技能將幫助你在開發(fā)高性能的跨平臺應用時游刃有余。
四、Android車載工程師技能
隨著智能車載系統(tǒng)的普及,車載工程師的需求也在日益增長。作為車載工程師,你需要掌握藍牙通信、串口通信技術(shù),了解DLNA協(xié)議及其在車載系統(tǒng)中的應用。掌握車載進程通信技術(shù)和CarLauncher開發(fā)技術(shù),以及車載多媒體系統(tǒng)的相關(guān)知識。這些技能將幫助你在車載系統(tǒng)開發(fā)方面取得突破。

五、Android前沿技術(shù)
在快速發(fā)展的技術(shù)領域,保持與時俱進至關(guān)重要。掌握自動化構(gòu)建App的技術(shù)、前沿編譯插件技術(shù),以及Compose框架的基礎和進階知識。這將使你緊跟行業(yè)趨勢,不斷提升自己的競爭力。參考騰訊文檔提供的Android進階學習路線資料,幫助你系統(tǒng)地提升自己的專業(yè)技能。通過不斷學習和實踐,你將為未來的Android開發(fā)領域做好準備。
以上五個章節(jié)涵蓋了Android開發(fā)的多個關(guān)鍵領域。通過深入學習和實踐這些技能,你將不斷提升自己的專業(yè)能力,成為Android開發(fā)領域的佼佼者。