記一次uni-app Android原生插件開發(fā)歷程
一、項目背景與插件開發(fā)啟動
項目需求涉及RFID射頻手持設備(PDA)讀取羊只耳標功能。為了滿足這一特定需求,我們決定重新開發(fā)一個uni-app原生插件??紤]到需要兼容Android原生環(huán)境,我們選用了uni-plugin作為開發(fā)工具。
二、插件開發(fā)流程概述
1. 下載與導入插件開發(fā)工具:從官方網(wǎng)站獲取uni-plugin離線SDK及配套demo,使用Android Studio進行導入,為插件開發(fā)做好基礎準備。
2. 構建插件模塊:創(chuàng)建一個名為“uhfg”的模塊,導入相關的uhf庫,并調(diào)整build.gradle文件以適應項目需求。

3. 編寫核心支持類:編寫UHFGUtil類及UHFGUtilListenner類,前者用于處理設備通信,后者實現(xiàn)監(jiān)聽功能。
4. 創(chuàng)建數(shù)據(jù)模型類:根據(jù)項目的具體需求,設計并創(chuàng)建一系列模型類,用于存儲和處理數(shù)據(jù)。
5. 插件打包:利用Android Studio中的gradle工具,采用assembleRelease模式進行插件編譯。生成適用于uni-app的aar文件,并與必要的libs文件組合成完整的原生插件。
三、項目集成與云端發(fā)布
在項目中創(chuàng)建本地插件目錄,將插件包放置其中。在manifest文件中配置本地插件,最后打包為自定義基座以實現(xiàn)插件調(diào)用。開發(fā)完成的插件被發(fā)布至云市場,通過云端供其他項目調(diào)用,同樣需要打包為自定義基座。
四、調(diào)試與優(yōu)化

在開發(fā)過程中,我們遇到并解決了類名重復、第三方庫引入不當導致的編譯錯誤等問題,確保插件的兼容性和穩(wěn)定性。
五、開發(fā)總結與源碼分享
uni-app原生插件開發(fā)常見問題解析
一、關于UniPlugin-Hello-AS工程的導入問題
當導入UniPlugin-Hello-AS工程項目后,若運行時虛擬器報錯提示“device supports x86 but apk only supports armeabi-v7a”,這通常意味著項目構建的配置存在問題。解決這個問題需要檢查項目的構建配置,確保支持目標設備的架構。此外還需檢查項目中使用的依賴庫是否支持目標架構。具體解決辦法可能需要調(diào)整項目的gradle配置文件或重新下載支持目標架構的依賴庫。
二、關于uni-app插件的打包問題

在打包uni-app插件時,選擇Gradle→插件module→Tasks→build→assembleRelease進行操作。如果在雙擊運行assembleRelease時失敗,可能是因為插件module的gradle配置有誤。除了sdk的arr包引入不需要改為implementation外,其他地方的compileOnly都需要改為implementation。確保正確的配置后重新嘗試打包操作即可解決問題。成功之路:獲取插件module的aar文件并解決依賴問題
=======================
一、獲取AA件
成功獲取插件module的aar文件,這是一項重要的里程碑。在開發(fā)過程中,我們遇到了官網(wǎng)原生插件開發(fā)文檔中依賴庫的問題。原本所有依賴庫都是用compileOnly添加的,但在運行assembleRelease時報錯。經(jīng)過嘗試,我們將compileOnly改為implementation,問題得以解決。這是一個重要的經(jīng)驗,也讓我們對Android開發(fā)中的依賴管理有了更深入的了解。
二、應用閃退分析與解決策略
公司開發(fā)的uniapp應用在紅米Note11T Pro上遭遇拍照后閃退的問題。在解決這個問題的過程中,我們首先對前端代碼進行了檢查,確認無誤后,開始尋找其他原因。通過網(wǎng)絡查找,排除了代碼和部分常見原因的可能。然后,我們使用離線打包配置在Android Studio中運行項目到真機,并開啟logcat,獲取了有用的日志信息。通過分析日志,我們發(fā)現(xiàn)應用在進入后臺后被系統(tǒng)回收資源,導致應用閃退。為了解決這個問題,我們需要提升應用的后臺優(yōu)先級,以?;顟谩?/p>

三、實現(xiàn)應用后臺保活功能
針對應用閃退問題,我們決定開發(fā)一個Android原生插件來提升應用的后臺優(yōu)先級。在實現(xiàn)過程中,我們遵循uniapp文檔的指導,配置環(huán)境、創(chuàng)建module、實現(xiàn)插件功能。通過啟動前臺服務方案,修改AndroidManifest.json注冊服務并添加權限,成功實現(xiàn)了后臺?;钚Ч?。查看應用后臺時的oom_adj值變小,證實了我們的解決方案有效。在實現(xiàn)過程中,我們也遇到了一些困難,比如國內(nèi)對后臺運行、自啟動、關聯(lián)啟動的嚴格限制。盡管如此,我們還是通過合規(guī)的方式實現(xiàn)了應用的?;罟δ堋?/p>
四、集成第三方APK到uniapp應用
在使用uniapp開發(fā)安卓應用程序時,集成第三方APK是一個常見的需求。為了實現(xiàn)這一功能,您可以按照以下步驟進行:首先獲取第三方APK文件并確保您有權使用。然后,將APK文件添加到uniapp項目中。您可以使用uniapp提供的原生插件或擴展插件來調(diào)用第三方APK。如果需求特殊,您也可以通過編寫Android原生代碼進行集成。這種方式可能需要更多的技術投入,但可以實現(xiàn)更復雜的功能。
五、總結與未來展望
在解決應用閃退問題和集成第三方APK的過程中,我們積累了豐富的經(jīng)驗。面對應用商店對后臺運行的嚴格要求,尋找合規(guī)且有效的方式實現(xiàn)應用的?;罟δ艹蔀榱艘粋€挑戰(zhàn)。對于輕量級?;罟δ艿膶徍耍覀冞€需要進一步觀察。在未來的開發(fā)中,我們將繼續(xù)探索更多的技術解決方案,提升應用的性能和用戶體驗。我們也會關注行業(yè)動態(tài),以適應不斷變化的市場需求。 一、uniapp應用程序集成與測試

在完成uniapp應用的集成后,緊接著進行的是運行和測試環(huán)節(jié)。這一步驟至關重要,它確保第三方APK能在您的應用程序中正常運行并順利交互。請注意,集成第三方APK涉及的技術和工具可能各有不同,因此具體的步驟可能會因您使用的APK和開發(fā)環(huán)境而異。
在集成過程中,建議您參考相關文檔、開發(fā)者社區(qū)或咨詢專業(yè)開發(fā)人員以獲取更詳細和具體的指導。豬八戒網(wǎng)為您整理的內(nèi)容,希望能為您的集成和測試工作提供有益的幫助。
二、uni-app 原生插件開發(fā)03 - 自定義基座制作
開始制作自定義基座之前,需要做好以下準備工作:
1. 確認provision profile的路徑。
2. 從keychain中導出p12文件。

3. 在HBuilderX中選擇制定自定義調(diào)試基座選項。
接下來,進行iOS的相關配置,完成后點擊打包按鈕,并查看控制臺輸出。當控制臺顯示完成自定義基座制作時,連接真機設備,點擊運行按鈕選擇真機設備運行。按照控制臺提示,在手機上打開新安裝的APP,即可開始調(diào)試。
三、APP安卓原生設計切圖給開發(fā)
對于APP的安卓原生設計,切圖給開發(fā)的方式有以下幾種:
1. 1.png的方案
采用3x規(guī)格png,設計師可以以iPhone6s plus為設計稿,導出相同大小的圖片。開發(fā)拿到切圖后,iOS對應放入3x,Android對應放入hdpi。目前使用率來說,3x規(guī)格已經(jīng)足夠,其他倍數(shù)會自動縮小獲得。

2. 矢量圖方案
此方案相對復雜。iOS矢量圖為pdf格式,大小以1x輸出。Android可使用VectorDrawable或svg轉(zhuǎn)png插件。對于VectorDrawable,建議設計師使用簡單的方式制作svg,盡量避免使用蒙版、挖空、區(qū)域透明等復雜功能。使用svg轉(zhuǎn)png插件時,對svg的制作要求較低,但需要注意轉(zhuǎn)換后可能出現(xiàn)的清晰度問題。
3. 分辨率和倍數(shù)
市面上存在各種規(guī)格的分辨率,如Android的多種分辨率和iOS設備的不同分辨率。但幸運的是,除了分辨率外還有倍數(shù)的概念。不同設備的一個點物理距離是接近的。設計師在輸出切圖時,可以結合設備和倍數(shù)來進行輸出,以便開發(fā)的適配和布局。
我們公司的方案是設計師輸出一套1x規(guī)格pdf矢量圖,iOS可直接套用。對于Android,采用svg轉(zhuǎn)png插件,并自行編寫腳本將pdf批量轉(zhuǎn)換成svg,再由插件生成3x規(guī)格png。由于公司iOS項目先啟動,最終決定Android還是使用png格式。 1. 分辨率與“點”分辨率的概念
一、分辨率與機型“點”分辨率的探究

我們先來探討分辨率與機型特有的“點”分辨率。以iPhone為例,6s+的分辨率是414x736,6s是375x667,se則是320x480。從這些數(shù)據(jù)來看,不同機型的“點”寬度變化并不大,主要是高度有所差異。只要設計布局合理,一套設計稿完全可以適應大部分機型。
2. Android的分辨率與倍數(shù)體系
二、Android的倍數(shù)體系與命名規(guī)則
在Android系統(tǒng)中,類似的體系也存在。其倍數(shù)更多,并用mdpi、hdpi、xhdpi、hdpi等名稱來表示不同的倍數(shù)級別。其中,mdpi默認為1倍,hdpi為1.5倍,xhdpi為2倍,hdpi則為3倍。
3. iPhone 6 Plus的邏輯分辨率及布局考量
三、iPhone 6 Plus的邏輯分辨率與布局設計

再具體到iPhone 6 Plus的邏輯分辨率,為什么它是414x736呢?這涉及到iOS app開發(fā)的深層邏輯。而布局設計,就像排版一樣,需要考慮每一塊區(qū)域、每一個控件的擺放規(guī)則。設計稿應該能夠適應不同大小的變化,無論是在寬度還是高度上。這也涉及到倍數(shù)的問題,比如6s和se是2x,而6s+的倍數(shù)情況更為復雜。選用一款常用機型的分辨率作為設計稿基準后,剩下的便是如何進行有效的布局工作。
4. 良好布局的實踐與注意事項
四、良好布局的實踐與標注工具的重要性
布局設計需要多思考、多練習。以一個例子來說,如果公司的設計稿是以5s為基準,分辨率640x1136,倍數(shù)2x。那么,在進行適配時,知道以哪個倍數(shù)為基準非常重要。當倍數(shù)不為1x時,所有用px表示的數(shù)值都應該能被倍數(shù)整除。正確做法是調(diào)整圖標大小為能被倍數(shù)整除的數(shù)值,如44px或46px。一套高效的標注工具也能大大提高工作效率。
5. 不采用等比例縮放適配的原因
五、為何不適用等比例縮放適配

為什么不采用等比例縮放適配呢?因為等比例縮放不能充分利用大屏的優(yōu)勢,同時也難以保證系統(tǒng)UI的一致性體驗。更大的屏幕尺寸意味著更多的內(nèi)容展示空間,等比例縮放無法充分發(fā)揮這一優(yōu)勢。開發(fā)者需要尋求更高效的適配方法,以提供更佳的用戶體驗。