久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

Flutter for OpenHarmony實(shí)戰(zhàn):護(hù)理服務(wù)跨端適配與狀態(tài)管理

Flutter for OpenHarmony實(shí)戰(zhàn):護(hù)理服務(wù)跨端適配與狀態(tài)管理 1. 養(yǎng)老護(hù)理場(chǎng)景里的硬需求為什么這塊硬骨頭選了Flutter先說項(xiàng)目背景。我所在的團(tuán)隊(duì)接手了一個(gè)現(xiàn)代智慧養(yǎng)老平臺(tái)其中一塊核心業(yè)務(wù)是護(hù)理服務(wù)護(hù)理員需要在自己手邊的設(shè)備上查看當(dāng)日任務(wù)、完成上門簽到、采集老人健康數(shù)據(jù)、上報(bào)護(hù)理記錄遇到突發(fā)狀況還要能一鍵觸發(fā)SOS呼叫。設(shè)備形態(tài)很雜有老人家里的固定終端、護(hù)理員隨身攜帶的平板、管理端的大屏其中固定終端和平板預(yù)裝的是OpenHarmony系統(tǒng)。這就意味著我們沒法只寫一套Android App就收工必須直面OpenHarmony上能不能跑起來、跑得順不順的問題。當(dāng)時(shí)擺在面前的有三條路一是用ArkTS原生重寫一套二是讓Android APK直接兼容運(yùn)行三就是標(biāo)題里這條路線——Flutter for OpenHarmony用一套Flutter代碼同時(shí)覆蓋Android、iOS和OpenHarmony三個(gè)平臺(tái)。先解釋一下為什么ArkTS原生不是首選。項(xiàng)目里的業(yè)務(wù)邏輯不是一個(gè)頁面放兩個(gè)按鈕這么簡單護(hù)理任務(wù)流轉(zhuǎn)、排班、工單狀態(tài)機(jī)、健康數(shù)據(jù)圖表這些模塊加起來有幾十個(gè)頁面如果全用ArkTS重寫至少要多養(yǎng)一個(gè)前端團(tuán)隊(duì)而且后續(xù)Android端和鴻蒙端的業(yè)務(wù)要維護(hù)兩套邏輯迭代效率會(huì)非常難受。Android APK直接兼容運(yùn)行這個(gè)方案聽起來省事但實(shí)際在OpenHarmony設(shè)備上跑遇到高版本SDK的API差異、權(quán)限模型不一致、以及部分傳感器和藍(lán)牙服務(wù)拿不到數(shù)據(jù)排查成本反而比直接適配更高。于是我們認(rèn)真評(píng)估了Flutter for OpenHarmony這條路。Flutter本身是跨平臺(tái)UI框架Framework層和Engine層跟底層操作系統(tǒng)解耦只要社區(qū)和OpenHarmony官方把Embedder層的適配做扎實(shí)業(yè)務(wù)層的Dart代碼幾乎不用動(dòng)。事實(shí)也確實(shí)如此Flutter社區(qū)針對(duì)OpenHarmony的適配已經(jīng)能支撐日常業(yè)務(wù)開發(fā)我們最終確定用Flutter寫業(yè)務(wù)同時(shí)按需保留少量原生通道去調(diào)用系統(tǒng)能力比如撥打SOS電話、讀取定位、調(diào)用藍(lán)牙采集設(shè)備數(shù)據(jù)。這篇文章里我會(huì)把護(hù)理服務(wù)模塊從環(huán)境搭建、平臺(tái)適配到核心功能實(shí)現(xiàn)的完整鏈路講一遍重點(diǎn)放在EventChannel原生日志流、Cubit狀態(tài)管理方案、以及頁面切換狀態(tài)保留這幾個(gè)容易被坑的地方。如果你也在做OpenHarmony上的跨端應(yīng)用或者你所在團(tuán)隊(duì)正準(zhǔn)備把存量Flutter工程往鴻蒙生態(tài)上遷移這篇文章應(yīng)該能幫你少踩幾個(gè)真實(shí)的坑。2. Flutter for OpenHarmony的適配深度從環(huán)境搭建到工程結(jié)構(gòu)2.1 環(huán)境搭建里最容易被忽略的三個(gè)細(xì)節(jié)網(wǎng)上講Flutter安裝的教程一抓一大把但Flutter for OpenHarmony的環(huán)境搭建跟普通Flutter有幾個(gè)關(guān)鍵差異不是簡簡單單裝個(gè)SDK就能跑。第一OpenHarmony側(cè)需要安裝完整的SDK和配套工具鏈。它不是Android SDK那套需要用DevEco Studio來管理OpenHarmony SDK路徑和配置方式都不同。我們的實(shí)際做法是先把DevEco Studio裝好確認(rèn)里面的SDK能編譯出一個(gè)空工程再回過頭配置Flutter命令行。第二OpenHarmony SDK版本要與Flutter適配版本匹配。Flutter官方主分支對(duì)OpenHarmony的適配版本有對(duì)應(yīng)關(guān)系我們?cè)陧?xiàng)目里遇到過Flutter版本升級(jí)后工程能編譯但運(yùn)行時(shí)Engine層跟OpenHarmony系統(tǒng)庫不兼容的情況癥狀表現(xiàn)為頁面渲染偶發(fā)空白、點(diǎn)擊事件響應(yīng)延遲。后來把Flutter版本鎖在社區(qū)推薦的穩(wěn)定分支情況立刻好轉(zhuǎn)。這里我的建議是不要追最新要追最穩(wěn)等某個(gè)適配版本在社區(qū)跑了一段時(shí)間后再升。第三環(huán)境變量里必須顯式聲明OpenHarmony SDK路徑。這一步少了Flutter工具鏈就找不到設(shè)備命令行執(zhí)行flutter devices時(shí)只能看到模擬器里的Android而OpenHarmony設(shè)備永遠(yuǎn)處于offline狀態(tài)。當(dāng)時(shí)我在配置里加了類似這樣的設(shè)置export OHOS_SDK_HOME/path/to/ohos-sdk export DEVECO_SDK_HOME$OHOS_SDK_HOME配置完后執(zhí)行flutter doctor如果輸出里出現(xiàn)了OpenHarmony相關(guān)的工具鏈信息說明環(huán)境基本通了。別小看這幾行我在社區(qū)看到大量設(shè)備連不上flutter run找不到目標(biāo)設(shè)備的提問八成都是這一步?jīng)]做或者路徑寫錯(cuò)。2.2 工程結(jié)構(gòu)里那個(gè)叫ohos的目錄用Flutter創(chuàng)建跨端工程時(shí)默認(rèn)會(huì)生成android、ios、web這些平臺(tái)目錄。當(dāng)Flutter的OpenHarmony適配被激活后工程里會(huì)多出來一個(gè)ohos目錄里面是OpenHarmony原生工程的骨架由ArkTS和native代碼組成。這個(gè)目錄的角色就相當(dāng)于Android工程里的android目錄。開發(fā)時(shí)Dart業(yè)務(wù)代碼寫在lib目錄下這個(gè)跟普通Flutter完全一致。但有一個(gè)點(diǎn)要注意ohos目錄里的原生代碼很多組件默認(rèn)不是參與到構(gòu)建里的只有你顯式引用了對(duì)應(yīng)插件原生模塊才會(huì)被編譯進(jìn)去。這會(huì)帶來一個(gè)隱蔽問題你的Dart代碼在真機(jī)上跑到了一個(gè)功能但ohos工程里根本沒有對(duì)應(yīng)實(shí)現(xiàn)運(yùn)行時(shí)拋MissingPluginException排查起來非常容易懵。解決辦法是建立一份Flutter插件到ohos原生工程的映射清單。這個(gè)習(xí)慣我是后來踩了幾次坑才養(yǎng)成的尤其是當(dāng)團(tuán)隊(duì)里同時(shí)有人在改Android實(shí)現(xiàn)、有人在改ohos實(shí)現(xiàn)時(shí)沒有清單特別容易漏掉。2.3 平臺(tái)插件適配鴻蒙的完整流程以登錄SDK為例我們的App里需要集成一個(gè)第三方統(tǒng)一登錄SDK這個(gè)SDK原本只有Android和iOS版本鴻蒙端沒有現(xiàn)成的對(duì)接包。在H2標(biāo)題里提到的flutter平臺(tái)插件適配鴻蒙流程在這里得到了完整落地。我拆解成四步創(chuàng)建平臺(tái)接口、編寫鴻蒙端原生實(shí)現(xiàn)、用通道橋接、在Flutter側(cè)統(tǒng)一調(diào)用。第一步先定義Dart側(cè)的抽象接口。我們選用的是Federated Plugin的思路——Flutter社區(qū)里插件統(tǒng)一用這種模式一個(gè)app_side的接口包負(fù)責(zé)定義上層API具體實(shí)現(xiàn)由各個(gè)平臺(tái)去注冊(cè)。這樣Dart業(yè)務(wù)代碼不用關(guān)心底層是Android還是OpenHarmony只調(diào)用接口即可。第二步在ohos目錄里實(shí)現(xiàn)一個(gè)ArkTS類把登錄SDK的方法包一層。比如登錄方法底層要拉起SDK的登錄頁等待回調(diào)后把token通過回調(diào)返回。ArkTS的寫法跟TypeScript接近但對(duì)異步回調(diào)的約束更嚴(yán)一些所有原生回調(diào)都要通過通道轉(zhuǎn)發(fā)到Flutter側(cè)。第三步橋接。這里我用的是MethodChannelDart端發(fā)起登錄請(qǐng)求通過channel.invokeMethod觸發(fā)ArkTS側(cè)的login函數(shù)原生把登錄結(jié)果轉(zhuǎn)成JSON字符串再通過result.success返回。三端數(shù)據(jù)類型對(duì)齊是這一階段最常見的問題——Boolean在Dart里是bool在ArkTS里也可以是boolean但一旦某個(gè)方法返回的是數(shù)組套對(duì)象轉(zhuǎn)來轉(zhuǎn)去很容易丟字段。第四步在Flutter側(cè)寫一個(gè)統(tǒng)一入口讓業(yè)務(wù)只管調(diào)用LoginService.login()底層自動(dòng)路由到對(duì)應(yīng)平臺(tái)實(shí)現(xiàn)。跑通這個(gè)流程大概花了兩天時(shí)間其中一半時(shí)間耗在ArkTS側(cè)的異步回調(diào)線程切換上這個(gè)后面專門講。3. 護(hù)理服務(wù)的核心鏈路任務(wù)流轉(zhuǎn)、健康數(shù)據(jù)采集與SOS呼叫3.1 護(hù)理任務(wù)模塊的業(yè)務(wù)狀態(tài)機(jī)護(hù)理服務(wù)里第一個(gè)要落地的核心模塊是護(hù)理任務(wù)。這個(gè)模塊表面上看是一個(gè)帶列表和詳情頁的CRUD但實(shí)際背后是一個(gè)狀態(tài)機(jī)任務(wù)從待分配流轉(zhuǎn)到已接單護(hù)理員開始上門后變成服務(wù)中服務(wù)完成填寫記錄后變成已完成如果護(hù)理員臨時(shí)有事需要交接給別人還要有待轉(zhuǎn)單狀態(tài)。這幾個(gè)狀態(tài)之間不是隨便能跳的。比如待分配的任務(wù)不能被護(hù)理員直接改成已完成必須經(jīng)過接單動(dòng)作而服務(wù)中的任務(wù)如果老人臨時(shí)取消又得走已取消分支。設(shè)計(jì)這種狀態(tài)機(jī)的時(shí)候如果只是簡單地在頁面里if else判斷代碼會(huì)隨著狀態(tài)增加迅速腐化。我們?cè)贔lutter側(cè)用了枚舉加約束守衛(wèi)的方式enum CareTaskStatus { pending, // 待分配 assigned, // 已接單 inProgress, // 服務(wù)中 completed, // 已完成 cancelled, // 已取消 transferring // 待轉(zhuǎn)單 }每次狀態(tài)變更都走一個(gè)統(tǒng)一的transition方法在這個(gè)方法里用switch判斷當(dāng)前狀態(tài)和目標(biāo)狀態(tài)是否構(gòu)成合法遷移。一旦發(fā)現(xiàn)非法跳轉(zhuǎn)直接拋出異常并上報(bào)日志。這個(gè)設(shè)計(jì)在前期看起來有點(diǎn)用力過猛但等到接單、轉(zhuǎn)單、取消、完成這些業(yè)務(wù)流程全部串起來后受益非常明顯——每個(gè)頁面都不用重復(fù)校驗(yàn)狀態(tài)合法性只需要調(diào)transition方法。3.2 EventChannel把心率和血壓數(shù)據(jù)實(shí)時(shí)推到Flutter頁面護(hù)理服務(wù)里有一個(gè)關(guān)鍵場(chǎng)景護(hù)理員上門后需要用設(shè)備采集老人的心率、血壓、血氧數(shù)據(jù)。這些數(shù)據(jù)一部分來自藍(lán)牙穿戴設(shè)備一部分來自一體機(jī)。在OpenHarmony終端上藍(lán)牙和傳感器的能力都在原生層Flutter側(cè)拿不到必須通過通道橋接。數(shù)據(jù)采集場(chǎng)景適合用EventChannel而不是MethodChannel。MethodChannel是單向調(diào)用一次invoke對(duì)應(yīng)一次返回適合查一下狀態(tài)調(diào)一個(gè)接口這類場(chǎng)景而EventChannel建立的是持續(xù)的推送通道原生側(cè)可以持續(xù)向Flutter側(cè)發(fā)送事件比如每秒鐘上報(bào)一次心率讀數(shù)。這正好匹配健康數(shù)據(jù)采集的實(shí)時(shí)性要求。ArkTS原生側(cè)的思路是初始化一個(gè)EventSink然后把藍(lán)牙設(shè)備回調(diào)里的數(shù)據(jù)逐步寫入import { eventEmitter } from ohos.base; let heartRateEventSink: (data: string) void null; // 在SDK回調(diào)中持續(xù)推送數(shù)據(jù) function onHeartRateReceived(value: number) { if (heartRateEventSink) { heartRateEventSink(JSON.stringify({ bpm: value, timestamp: Date.now() })); } }Flutter側(cè)訂閱這段事件流的代碼相對(duì)簡單static const _eventChannel EventChannel( com.careapp/health_monitor ); StreamMapObject?, Object? _healthStream; void initHealthStream() { _healthStream _eventChannel.receiveBroadcastStream() .castMapObject?, Object?(); }拿到流數(shù)據(jù)后我在頁面里接了一個(gè)StreamBuilder把心率數(shù)值實(shí)時(shí)渲染成折線圖。這里有個(gè)實(shí)戰(zhàn)細(xì)節(jié)值得強(qiáng)調(diào)EventChannel的數(shù)據(jù)是異步到達(dá)的頁面如果切到后臺(tái)再回來流的訂閱關(guān)系可能會(huì)斷需要重新訂閱并做一次數(shù)據(jù)快照拉取。我是在頁面生命周期里處理恢復(fù)邏輯的具體方法后面講Navigator狀態(tài)時(shí)一起說。3.3 SOS緊急呼叫里最容易做錯(cuò)的一步護(hù)理服務(wù)中還有一個(gè)緊急場(chǎng)景——老人突發(fā)狀況護(hù)理員或老人本人按下SOS按鈕App需要立刻撥出預(yù)設(shè)的緊急聯(lián)系人電話同時(shí)把定位信息和簡單情況發(fā)送到管理后臺(tái)。這部分最初我們照搬了Android端的實(shí)現(xiàn)邏輯——點(diǎn)擊SOS后先通過網(wǎng)絡(luò)請(qǐng)求上報(bào)位置等請(qǐng)求返回成功后再調(diào)起撥號(hào)。實(shí)際在OpenHarmony真機(jī)上測(cè)試時(shí)發(fā)現(xiàn)一個(gè)問題網(wǎng)絡(luò)請(qǐng)求有時(shí)會(huì)卡住幾秒老人和護(hù)理員在緊張狀態(tài)下會(huì)反復(fù)點(diǎn)擊按鈕導(dǎo)致重復(fù)上報(bào)。后來改成撥號(hào)優(yōu)先異步上報(bào)點(diǎn)擊按鈕后先立即通過MethodChannel調(diào)起系統(tǒng)撥號(hào)同時(shí)后臺(tái)異步發(fā)送定位數(shù)據(jù)并且加了防重復(fù)點(diǎn)擊的節(jié)流器兩秒內(nèi)的重復(fù)點(diǎn)擊全部忽略。這個(gè)改動(dòng)邏輯很小但用戶的體感完全不一樣。撥號(hào)本身需要申請(qǐng)系統(tǒng)權(quán)限這里有一個(gè)跟Android的差異點(diǎn)OpenHarmony的權(quán)限模型更細(xì)撥號(hào)、定位、藍(lán)牙分別對(duì)應(yīng)不同的權(quán)限組而且部分權(quán)限需要用戶到系統(tǒng)設(shè)置里手動(dòng)授權(quán)App內(nèi)彈窗申請(qǐng)的能力有限。我們的做法是在首次啟動(dòng)時(shí)通過引導(dǎo)頁把權(quán)限一次性申請(qǐng)清楚避免緊急場(chǎng)景下彈窗打擾。4. 狀態(tài)管理與組件通信Cubit方案和頁面狀態(tài)保留的真相4.1 為什么CI方案我用Cubit而不是Bloc在Flutter社區(qū)里狀態(tài)管理一直是討論熱度最高的話題。我們的護(hù)理服務(wù)模塊最終采用了Cubit這是Bloc庫的精簡版。選擇它不是因?yàn)锽loc不好而是在這個(gè)項(xiàng)目的實(shí)際場(chǎng)景里Cubit的抽象層次更合適。Bloc的核心是把事件和狀態(tài)完全拆開通過事件驅(qū)動(dòng)狀態(tài)變化適合大型團(tuán)隊(duì)、復(fù)雜業(yè)務(wù)邏輯里需要嚴(yán)格流程管控的場(chǎng)景。但它的儀式感也帶來額外的代碼量每個(gè)交互都要定義Event類、寫mapEventToState方法、維護(hù)多個(gè)文件。而在護(hù)理服務(wù)模塊中很多邏輯是頁面觸發(fā)動(dòng)作數(shù)據(jù)變一下UI刷新用Bloc有點(diǎn)殺雞用牛刀。Cubit保留了Bloc的State流式管理能力但去掉了Event層直接通過方法調(diào)用來改變狀態(tài)。比如接單操作代碼如下class CareTaskCubit extends CubitCareTaskState { CareTaskCubit(this._repository) : super(CareTaskInitial()); final CareTaskRepository _repository; Futurevoid acceptTask(String taskId) async { emit(CareTaskLoading()); try { final task await _repository.acceptTask(taskId); emit(CareTaskLoaded(task)); } catch (e) { emit(CareTaskError(接單失敗請(qǐng)重試)); } } }這個(gè)寫法非常直觀業(yè)務(wù)人員看著代碼就能知道點(diǎn)接單后發(fā)生了什么。而如果用Bloc同樣的流程還要多一層SealedEvent類的定義。所以我的經(jīng)驗(yàn)是如果團(tuán)隊(duì)里Flutter水平參差不齊Cubit的接受成本更低如果你在做一個(gè)流程嚴(yán)苛的交易系統(tǒng)再上Bloc不遲。4.2 Navigator切換頁面后會(huì)丟失狀態(tài)嗎——這個(gè)問題要分兩半看這個(gè)熱搜詞我在項(xiàng)目里真實(shí)遇到了。護(hù)理員正在填寫一條護(hù)理記錄填到一半有人打電話來接完電話回來發(fā)現(xiàn)剛才草稿全沒了氣得直冒火。技術(shù)上這是頁面被銷毀導(dǎo)致State丟失的問題要理解它必須搞清楚Flutter頁面棧的機(jī)制。Flutter里用Navigator.push跳轉(zhuǎn)新頁面時(shí)默認(rèn)情況下原頁面并沒有銷毀它只是被壓到路由棧里State對(duì)象還活著。真正導(dǎo)致狀態(tài)丟失的常見原因是頁面已經(jīng)被pop銷毀了。比如護(hù)理員從任務(wù)列表點(diǎn)進(jìn)詳情頁在詳情頁里填草稿然后誤觸返回詳情頁出棧銷毀草稿自然沒了。另一種情況更隱蔽頁面還在棧里但系統(tǒng)內(nèi)存緊張時(shí)Flutter會(huì)觸發(fā)重建如果State里的數(shù)據(jù)沒有持久化依然會(huì)丟失。我們項(xiàng)目里護(hù)理記錄草稿用的是普通內(nèi)存變量后來改成每次輸入變化都寫入本地?cái)?shù)據(jù)庫再在頁面重建時(shí)恢復(fù)。具體做法是使用SharedPreferences做自動(dòng)保存每次EditController的內(nèi)容變化后防抖保存到本地頁面initState時(shí)讀回來回填。/// 草稿自動(dòng)保存的核心邏輯 textController.addListener(() { _debounce(() { prefs.setString(draft_brief, textController.text); }, 400ms); });至于頁面確實(shí)還留在棧里但是UI沒刷新這種偽丟失本質(zhì)是狀態(tài)更新后沒有通知到當(dāng)前頁面這個(gè)屬于組件通信問題下面繼續(xù)講。4.3 組件通信的四種主流方案和養(yǎng)老場(chǎng)景下的取舍Flutter組件間通信我實(shí)際用的方案按頻次排列ValueNotifier、Cubit、EventBus、InheritedWidget。ValueNotifier適合單節(jié)點(diǎn)狀態(tài)比如一個(gè)開關(guān)、一個(gè)滑塊頁面內(nèi)部用沒問題Cubit適合跨頁面共享某個(gè)業(yè)務(wù)領(lǐng)域的狀態(tài)比如護(hù)理任務(wù)的當(dāng)前狀態(tài)EventBus適合完全解耦的事件廣播比如老人數(shù)據(jù)已更新、刷新地圖標(biāo)記這類不關(guān)心誰監(jiān)聽的消息InheritedWidget適合主題、語言包這類全局靜態(tài)配置。在老項(xiàng)目里人們經(jīng)常用一個(gè)全局靜態(tài)類保存所有狀態(tài)頁面之間互相讀寫寫著寫著就分不清是誰改了誰排查問題非常痛苦。我們這次從一開始就規(guī)定凡是兩個(gè)以上頁面都要讀寫的狀態(tài)一律丟進(jìn)Cubit頁面里通過context.read和context.watch去讀寫禁止直接操作全局變量。4.4 一次真實(shí)的詭異數(shù)據(jù)不同步排查過程項(xiàng)目聯(lián)調(diào)時(shí)出現(xiàn)一個(gè)怪問題護(hù)理員在A頁面完成了接單操作回到B頁面刷新后B頁面上的任務(wù)狀態(tài)還是待接單。模型上看B頁面監(jiān)聽了同一個(gè)Cubit實(shí)例理論上狀態(tài)變化會(huì)逐幀廣播。排查了半天發(fā)現(xiàn)問題不在狀態(tài)管理而在B頁面用的Cubit對(duì)象是從一個(gè)每次build都新建實(shí)例的代碼塊里拿的。如果每次刷新都new一個(gè)Cubit那后續(xù)頁面監(jiān)聽的是新實(shí)例而A頁面操作的是舊實(shí)例兩者根本沒連上。這一類問題極容易發(fā)生在組件內(nèi)嵌帶參數(shù)初始化的場(chǎng)景?,F(xiàn)在我要求所有跨頁面共享的Cubit實(shí)例必須從頂層依賴注入容器里統(tǒng)一獲取任何地方都不得直接new。如果你也遇到明明監(jiān)聽了狀態(tài)卻不更新的問題先去檢查是不是每個(gè)build里都新new了狀態(tài)對(duì)象比排查UI邏輯快得多。5. OpenHarmony真機(jī)聯(lián)調(diào)中的編譯問題與性能優(yōu)化5.1 could not determine the dependencies of task這個(gè)報(bào)錯(cuò)到底是誰的鍋Flutter for OpenHarmony在打包和編譯階段搜索引擎里高頻出現(xiàn)的報(bào)錯(cuò)是類似could not determine the dependencies of task :app:compileDebugJavaWithJavac這一類任務(wù)依賴無法解析的錯(cuò)誤。第一次遇到時(shí)我以為是Flutter工程的問題折騰半天發(fā)現(xiàn)根因在Gradle依賴?yán)∩?。OpenHarmony工程的構(gòu)建鏈Flutter層會(huì)生成一個(gè)Gradle工程同時(shí)基于ArkTS的Hvigor構(gòu)建系統(tǒng)。當(dāng)兩套構(gòu)建系統(tǒng)的版本聲明和依賴倉庫不一致時(shí)Gradle解析任務(wù)依賴就會(huì)失敗。我們踩過的具體原因是工程里的ohos目錄帶了一個(gè)獨(dú)立的Gradle配置它引用的插件倉庫在部分網(wǎng)絡(luò)環(huán)境下拉取超時(shí)Gradle就干脆報(bào)依賴無法解析。解決辦法不神秘分三步第一步檢查Flutter工程根目錄的gradle-wrapper.properties確認(rèn)Gradle版本和已安裝版本一致第二步檢查倉庫源配置把OpenHarmony工程需要的三個(gè)倉庫——mavenCentral、華為開源倉、以及Gradle插件倉——全部顯式聲明第三步把依賴緩存目錄清掉重新構(gòu)建。項(xiàng)目里我們最終是通過整理統(tǒng)一版本的Gradle配置文件解決社區(qū)里有人說升級(jí)Gradle也能解決但升級(jí)有連帶風(fēng)險(xiǎn)我的經(jīng)驗(yàn)是優(yōu)先排查倉庫源。5.2 Flutter SDK版本兼容警告和一例打包崩潰的處理隨著Flutter版本迭代命令行里會(huì)頻繁出現(xiàn)the current configured Flutter SDK is not known to be fully supported這類提示。這個(gè)警告的意思是當(dāng)前Flutter版本和工程里某些插件適配版本沒有經(jīng)過官方全量測(cè)試有可能行為不一致。我記得有一次打包時(shí)崩潰在java.lang.AssertionError報(bào)錯(cuò)信息指向一個(gè)閉包無法關(guān)閉。這個(gè)問題的真實(shí)原因是Flutter引擎和OpenHarmony版本的一個(gè)已知兼容沖突。當(dāng)時(shí)社區(qū)里還沒有現(xiàn)成教程我排查兩天后是把Flutter的引擎回退到了鴻蒙適配分支的上一個(gè)穩(wěn)定tag崩潰就消失了。從那以后我養(yǎng)成一個(gè)習(xí)慣OpenHarmony工程里做任何Flutter版本升級(jí)都要先在測(cè)試設(shè)備上跑一遍核心用例再推給其他同事不要以命令行不報(bào)錯(cuò)作為升級(jí)成功的標(biāo)準(zhǔn)。5.3 性能層面值得關(guān)注的點(diǎn)Impeller和頁面卡頓OpenHarmony的Flutter渲染初始化、頁面切換的過程如果沒有做性能優(yōu)化在低端設(shè)備上很容易觀察到卡頓。熱搜詞里有一個(gè)flutter impeller這是Flutter渲染引擎的一個(gè)實(shí)現(xiàn)。Impeller的核心優(yōu)勢(shì)是避免了傳統(tǒng)Skia渲染的每幀著色器編譯卡頓這在跨端場(chǎng)景里體驗(yàn)差異比較明顯。但OpenHarmony適配分支上Impeller的支持狀態(tài)要以實(shí)際測(cè)試為準(zhǔn)如果設(shè)備上開啟后出現(xiàn)異?;ㄆ辆突赝说絊kia渲染。護(hù)理服務(wù)里那個(gè)實(shí)時(shí)心率折線圖最初在低端平板上刷新時(shí)掉幀明顯。后來我把刷新頻率從每幀刷新降到每秒三幀再把圖表數(shù)據(jù)的點(diǎn)集采樣壓縮設(shè)備負(fù)載立刻降下來。性能優(yōu)化這種事個(gè)中體會(huì)就是跨端框架的渲染性能上限不低但如果你不做節(jié)流和控制再強(qiáng)的框架也頂不住無腦刷新。5.4 真機(jī)聯(lián)調(diào)時(shí)最常見的三類問題OpenHarmony真機(jī)聯(lián)調(diào)跟Android模擬器調(diào)試有幾點(diǎn)明顯的不同按遇到概率排序第一設(shè)備連接不穩(wěn)定。用命令行跑flutter run設(shè)備偶爾會(huì)斷連日志直接中斷。這個(gè)是OpenHarmony調(diào)試服務(wù)自動(dòng)休眠導(dǎo)致的可以通過在設(shè)備端持續(xù)保持屏幕常亮來緩解設(shè)置電源為不休眠。第二權(quán)限彈窗容易誤觸。開發(fā)階段多次安裝應(yīng)用權(quán)限彈窗會(huì)重復(fù)彈出一旦誤點(diǎn)拒絕后續(xù)即使重新安裝部分權(quán)限也不會(huì)再自動(dòng)向用戶申請(qǐng)需要在系統(tǒng)設(shè)置里手動(dòng)打開。涉及定位和藍(lán)牙的模塊我建議在開發(fā)階段就做一個(gè)權(quán)限自檢頁面打開直接顯示哪些權(quán)限已授權(quán)、哪些被拒絕、哪個(gè)入口去設(shè)置里打開節(jié)省的時(shí)間遠(yuǎn)超寫這個(gè)頁面的投入。第三日志過濾規(guī)則不同。Dart側(cè)的print輸出和ArkTS側(cè)的hilog日志在OpenHarmony上不全是同一個(gè)出口很多時(shí)候你看到Flutter側(cè)沒有報(bào)錯(cuò)但原生其實(shí)已經(jīng)崩了。我的習(xí)慣是出問題先在ArkTS側(cè)打關(guān)鍵日志再回Flutter側(cè)對(duì)比不要只盯著Dart控制臺(tái)。6. 模塊設(shè)計(jì)里那份原生橋接清單的價(jià)值前面斷斷續(xù)續(xù)提到了不少踩坑經(jīng)歷但這里我還是想再單獨(dú)強(qiáng)調(diào)一個(gè)工程習(xí)慣維護(hù)原生橋接清單。一份清單記錄三個(gè)平臺(tái)下達(dá)成的通道協(xié)議和參數(shù)格式。我們護(hù)理服務(wù)模塊最終涉及到的橋接通道大概有十來個(gè)健康數(shù)據(jù)EventChannel、撥號(hào)MethodChannel、定位調(diào)用、藍(lán)牙連接、文件上傳原生壓縮等等。每加一個(gè)新通道如果不在清單里及時(shí)更新參數(shù)格式和回調(diào)類型等另外兩個(gè)平臺(tái)的同學(xué)各寫各的聯(lián)調(diào)階段就會(huì)冒出來一模一樣的字段、類型卻對(duì)不上的問題。實(shí)際落地的清單長這樣通道名類型參數(shù)格式原生平臺(tái)狀態(tài)health_monitorEventChannelJSON字符串OpenHarmony已聯(lián)調(diào)sos_callMethodChannelcontactId, lat, lngOpenHarmony已聯(lián)調(diào)location_updateMethodChannelJSON字符串OpenHarmony待聯(lián)調(diào)bluetooth_scanEventChannelJSON字符串OpenHarmony開發(fā)中有了這張表團(tuán)隊(duì)溝通成本會(huì)低很多。另外提醒一點(diǎn)通道名稱和參數(shù)結(jié)構(gòu)在正式使用后輕易不要改要改也要先改清單再改代碼否則兩端的同學(xué)完全無法感知對(duì)方變了。7. 護(hù)理服務(wù)上線前后我的一些復(fù)盤這套Flutter for OpenHarmony的護(hù)理服務(wù)App從開發(fā)到完成真機(jī)驗(yàn)收整個(gè)流程走下來我對(duì)跨端適配鴻蒙有了新的認(rèn)識(shí)。第一個(gè)體會(huì)是Flutter的統(tǒng)一UI能力在OpenHarmony上確實(shí)是成立的。幾十個(gè)頁面、復(fù)雜的狀態(tài)流轉(zhuǎn)、和有原生通信的模塊用一套Dart代碼覆蓋三個(gè)平臺(tái)效率層面的收益很明顯。真正拉開差距的是你對(duì)平臺(tái)差異的理解深度。OpenHarmony不是Android它的權(quán)限模型、構(gòu)建系統(tǒng)、調(diào)試方式、ArkTS的語言約束都自成體系。盲目地把Android經(jīng)驗(yàn)照搬過來會(huì)在細(xì)節(jié)處反復(fù)碰壁。第二個(gè)體會(huì)是狀態(tài)的持久化設(shè)計(jì)要提前做不能等到上線前再補(bǔ)。像護(hù)理記錄草稿、任務(wù)列表的篩選條件、健康數(shù)據(jù)的緩存這些看起來不起眼的功能如果一開始就規(guī)劃好本地存儲(chǔ)方案后期會(huì)省掉大量返工時(shí)間。我們項(xiàng)目里中途補(bǔ)了個(gè)本地緩存層代價(jià)是改了十幾個(gè)頁面的數(shù)據(jù)讀取邏輯。第三個(gè)體會(huì)是關(guān)于團(tuán)隊(duì)協(xié)作的。跨端開發(fā)最忌諱的是我這邊能跑就行。同樣的Dart代碼Android上的行為和OpenHarmony上的行為未必一致?,F(xiàn)在我們的做法是每個(gè)功能點(diǎn)至少要在兩個(gè)真實(shí)設(shè)備上跑一遍才算完成不允許只在一個(gè)平臺(tái)驗(yàn)證后直接標(biāo)已通過。這當(dāng)然會(huì)拉長單個(gè)需求的測(cè)試時(shí)間但上線后的穩(wěn)定性提升非常明顯。如果你正在評(píng)估Flutter for OpenHarmony或者已經(jīng)被分配了類似的項(xiàng)目我建議你從我們這套方案里直接拿走的不是具體代碼而是那幾條基于真實(shí)場(chǎng)景得出來的經(jīng)驗(yàn)版本鎖定優(yōu)先于版本最新、橋接通道必須維護(hù)清單、狀態(tài)和導(dǎo)航的設(shè)計(jì)要提前想清楚數(shù)據(jù)生命周期。這些點(diǎn)沒有在官方文檔里高亮但它們決定了項(xiàng)目能不能平穩(wěn)落地。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
国产第二页| 激情亚洲天堂| 在线免费观看高清无码视频| 91nbbbbbb| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 五月丁香啪啪| 国产乱伦亚洲色图高清无码| 综合亚洲网| 久久久啊啊| av日韩在线观看电影| 激情99| 爱爱动态试试看6 0秒| 91操熟女视频| 青草成人免费视频一COm| 九九九九精| 桃花色涩综合影院| 中文字幕一区 二区三四五 区日 日骚 | 亚州 综合 色图| 亚洲一区二区精品福利| 日韩一级性爱无码| 国内偷拍精品一区二区| 成人免费性爱视视| 蜜臀视频网站| 天天色图| www熟女乱伦com| 99久久久无码国产精品性男| 青青伊人这里只有精品| 超碰成人国产| 性在久久久久久| 国产日韩精品suv| 射久久| 日本精品加勒比海一区| 78精品在线| 9997se| 狠狠干妹子| 亚洲一本色码中文字幕| 97国产伦理| 国产精品。| 美女高潮视频91| 色婷婷av在线观看| 欧美亚洲性爱一区二区| 素人播放一区| 天天综合~91入口| 性爱1区| 日韩成人电影AV| 亚洲欧美激情在线视频| 欧美综合区| 国产综合操逼高清| 午夜精品久久久久久久男人的天堂 | 午夜福利1区2区3区| 99re95| 67914亚洲精品| 无码少妇精品一区二区60岁老人| 欧美性爱在线无码| 色爱综合网| 国产a级午夜毛片| 强奸乱伦大香蕉网| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 插入粉嫩少妇视频| 91视频女生| 少好三P| 疯操AV| 久久精品操| 丝袜美腿操av| 国产福利精品98视频| 久久久久久久强迫| 亚洲欧美综合区自拍另类| 日本免费一级AAA大片器| 国产精品国产自产高清AV| 久久亚洲AV无码专区国产精品| 日韩黄色av中文字幕| 肏逼福利网站| 久热这里只有精品9| 久9综合在线| 97在线免费| 老熟女搡BBBB搡BBBB视频| 韩国黄片aaaa| 国产欧美美女免费观看视频| 欧美色天堂网在线视频| 九九精品网| 欧差乱伦二三| 无码乱人伦中文视频| 99综合视频一体| 高树玛利亚无码流出| 99在线视频播放| 亚洲精品蜜桃久久久| 亚洲美女AV无码| 国产三级在线现体验区| 91色艳| 亚洲黄色网址| 国产又黄又爽| 五月激情影院| 丝袜视频网国产90| 91社区拍啪人妻| 夜夜操狠狠操| 亚洲综合色图欧美| 天天懆天天日| 欧美制服另类丝袜| 久久手机好看网站| 麻豆a'v电影| 欧美激情激情xxxx欧美专区| 人人考人人摸人人干| 亚洲熟女乱色| 午夜精品久久久久久久久久久久久 | 果冻国产精品麻豆成人av| 校园春色 男人天堂| 欧洲精品一二三在线| 丰满人妻一区二区三区四区| 国产大学生高潮在线播放| 欧美熟爽综合| 亚洲中文sv| 国产亚洲女v在线观看| 午夜天堂精品久久久久91| 爱爱久久| 日产欧美电影一区二区三区| 大香蕉综合| 久草看看看| 狠狠操夜夜| 麻豆国产原创AV色哟哟| av中亚| 伊人成人中文字幕久久网| 一本一道久久综合久久| 亚洲 日本 不卡| 爱做久久久久久| 97干天天| 蜜臀AV秘一区翔田千里| 老司机午夜精品福利视频一区二区| 成人毛片免费| 青春草A| 国产黄色在线播放观看| 操少妞在线视频| 操逼日批| 蜜臀久久精品久久久久视频| 国产精品69人妻无码久久久| 啊啊啊啊好疼视频| 综合啪啪| se..亚洲欧美| 午夜精品久久久久| 国产绿奴视频在线观看| 中文字幕伊人| 91色久| 老熟乱一区二区三区四区| 国模精品一区二区三区苹果色戒| 国产精品农村妇女精品| 欧美乱色| 国产成人+综合亚洲+天堂| 综合色久欲| 九热久| 无码免费一区二区三区啪啪| 亚洲精品一二牛牛| 亚洲精品1区| 中文日本免费高清| 淫纸中9区| 五月丁香色色网| 天美麻豆一区二区三区| 偷拍 精品 另类 四区| 97视频免费在线观看| 亭亭丁香激情| 亚洲综合色婷婷| 日韩精品午夜操呦呦不卡影院| 亚洲人妻一区二区三区| 国产51色综合久久免费| 亚洲色性| 久久熟女久| 欧美国产伊人久久久久| 91性片| 看黑人AV不卡| 99人人干| 蜜乳AV网址| 欧美在线天堂| 在线小视频| 激情六月天| SUV一区二区在线看| 亚洲色啪| 亚州AV无码国产精品| 久久久久久九九九九九| 青娱乐大香蕉| 97硬碰| www久| 久久久久久久强迫| 伊人91| 国产性爱欧美性爱在线| 日韩草久视频| 精品一区二区成人动漫| 国产多人在线观看视频| 神马久久久久久久| 久久97视频| 青春草A| 99这里有精品视频| yellow网站免费观看日韩高清无码| 亚洲国产精品无石码久久| 中文字幕在线观看第二页| 欧美性爱综合,免费| 亚洲日韩狠狠撸视频| 99re6久热只有精品6在线直播| 日韩无码黄色片| 欧美天天干| 9999九九九久久久| 亚洲色图欧美色图日韩色图| 97亚洲欧美| 91亚洲狠狠色| 欧美日本视频一区| 亚州五月| 亚州,欧美在线| 日韩精品电影| 天天摸夜夜操视频| 超碰久在线天天做| 农村妇女精品一区二区| 人妻天天爽夜夜爽精品2| 久7色| 99在线精品观看99| 天天看,天天做| 人人看人人爰人人操| 色婷婷国产精品一区在线观看| 97在线播放 | 亚洲日本天堂| 嗯嗯嗯啊啊在线观看| 国产精品天干天干综合网麻豆| 天天插天天插| 能看的av| 亚洲性综合9| 久久久久久久极品香蕉视频| 日本少妇va7777| 欧州色图区| 久久久久骚| 男人的天堂.com| 2001天天操| 97亚洲一区| 精品视频日日夜夜| 国产精品。| 天操老女人| 伊人991| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 亚洲中文一区二区三区视频| 丰满人妻av一区二区三区| 911粉嫩人妻| 极品极品色影院| 久热伊人| 精品视频97| 99综合自拍| 欧美熟女丝袜| 日韩图色| 欧美激情性久久久久久| 91精品丝袜在线观看| 久久久免费的精品| 蜜桃视频精品一区二区| 亚洲诱惑| 秋霞 色色| 日本性爱欧美性爱| 91站街按摩店老熟女熟女| 中文字幕精品一区二区精品| 国产丰满少妇久久久精品影院| 中国小夫妻勾搭露脸淫荡对白| 91综合国产精品| 97草草| 欧美AB在线| 精品人妻一二三| 约操熟妇| 蜜臀在线免费观看在线免费观看| 亚洲人精品午夜不卡| 天天综合~91| 中文AV制服乱伦| 91成人久久 | 日本成人在线不卡一区二区三区| 欧美日韩激情无码专区| 婷婷香蕉欧美在线一区二区三区| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 性色AV蜜色av色欲av| 国产欧美精选激情视频| 成人夜夜爽| 午夜精品人妻二区三区| 亚洲**2021在线观看| 国产亚洲禁久一区二区| 欧美老妇女内射网址| 一本一道久久综合久久| 亚洲蜜桃V妇女| 91人妻丝袜无码| 热G综合热G中文| 一级毛片电影免费看| 亚洲精品一区二区三区在线播放| 欧美一二三区四五区| 中文字幕av片| 亚洲国产成人高清在线| 亚拍在线| 国产一区在线观看无码AV| 中文字幕五区| 日本幼女18+| 久久亚洲AV无码专区首页| 97超级久久强资源| 亚洲天堂加勒比| 青青操轻轻| 夜精品久无码| 日本性爱欧美性爱| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 97香焦色区| 91欧美情色| 秋霞免费AV| baiduhicn.com。| 国产偷人伦激情在线观看| 色婷婷激情| 日日AAvv| 五月天啪啪| 日韩欧视频| 激情综合网激情五月天| 人人妻人人玩人人澡人人爽| 长长久久88视频| 婷婷性网| 久久9 9 9精品| 免费操逼91| 一区二区三区国产精产| 成人自拍三级在线观看| 91性高| 人人操人人操草草| 欧美人妖内射| 人妻天堂综合网| 亚洲高清自拍| 黄呦呦在线| 国产成人一级av88| 午夜男人的天堂| 嗯啊不要在线观看嗯啊| 少妇熟女1区2区3区| 超碰人妻久久人妻中文97| 9丨亚洲一区二区在线| 人妻 制服 日韩 中文 在线| 欧美另类综合久久| 亚洲第一页色网| 99精品视频在线观看| 熟女人妻一区二区三区| 国产精品肉丝自拍| 亚洲国产成人精品无码专区| 性天堂| 美女啪欧美一区| 人人操人人摸人人看人人干| 精品在线78| 韩国久久97| 天天色黄色影院天天操| 国产精品久久蜜乳av| 激激五月| 亚洲欧综合另类无码一区| 精品免费成人久久| 69人妻精品丰满熟女区| 97综合在线| 亚洲色图欧美色图另类图片| 九九夜精品九九在线| 91精品人妻电影| 日日骚中文字幕| 欧美高清性猛交| 久久久久国产一区二| 色欲av国内精品久久久久久| 日本九九久久99| 六月丁香啪啪啪| 99久久久无码精品国产人| 国内成人圈中文字幕无码视频| 91美女丝袜诱惑视频| 中文字幕日韩电影人妻| 亚洲丝袜天堂| 久久久久久精品免费看A级| 欧美久久草熟女| 91夜色| 精品人妻少妇| 九九九久久久久| 99热这里都是精品| 蜜桃av综合网发布| 美国aaaaa一级黄片| 欧美性xxxxx狂欢| 男女性扦B| 中文字幕加勒比海高清无码免费视频| 99热99色| 亚洲一本色道中文无码aV天美| 91美女在线观看| 91激情国产| 亚洲激情色片| 绯色AV粉色AV蜜臀AV| 婷婷综合五月天| 在线无码操| 豆花视频操逼网址| 插入逼91| 亚洲国产美女久久久久| 熟妇一区二区| 97日韩超碰超碰中文字幕| 久操av在线| 无毛精品| 91精品人妻啪啪间| 国产精品久久久久久夜夜夜夜| 人人操天天爽| 成人久久无码www| 韩国久久97| 久久婷五月| 9l视频自拍9l九色成人| 五月色网| 五月色综合| 六月丁香啪啪啪| 男人的天堂网免费| 99精品丰满人妻无| 日韩超碰精品综合| 亚洲 综合 第一页| 高清孕妇孕交 交孕妇| 亚欧美色图| 精品人妻一区二区三区蜜桃视频| 99热精品在线观看| 精品久久久久久久| 强被迫伦姧在线观看无码网站| 一中国女人毛片水真多| 中文字幕五月婷婷免费| 91快色色色色色| 嫖老熟女A片一二三区| 欧美性爱一级操| 99在线精品观看99| 久久久久久久少妇| 加勒比人妻综合| 亚洲熟妇综合久久久久久| 免看60秒涩涩视频| 99999久久精| 国产高清午夜成人在线观看| 国产精品美女在线一区| 九九热免费视频| 久久久久久性爱视频| 无码视频一区二区| 日本2020一区二区| 午夜国产成人精品视频| 亚洲蜜桃V妇女| 熟妇熟女亚洲天堂网| 97一区二压| 欧美肥臀在线| 1769一区| 欧美日韩第一页| 亚洲日韩电影| 久久五十路熟女人妻| 色狠狠色| 精品久久大胆人体| 大学生美女口爆| 91久久精品中文字幕| 伊人婷婷五月天| 麻豆精品A片免费观看| 无码九九九九| 一本一道波多野毛片中文在线| 99热精品在线观看| 内射黑丝袜| 一级毛片电影免费看| 国产区性爱在线视频秋霞豆| 久热久一区二区三区| 九九九九九九九| 中国AAAAAA黄色片| 97精品国产97久久久| 97网址97| 逼操网站| 欲色影视综合吧| 94色色电影网| 亚洲黄网在哪免费看| 国产熟妇一区二区| a片 xxxx受爽视频| 丁香五月av| 亚洲 综合 第一页| 日逼视频日本| 老熟妇一区二区三区啪啪| 美女91网站| 99热国产| 久久久一区二区三区麻豆| 色色香蕉| 超碰伊人在线| 日本欧美一区二区三区视频麻豆| 嗯嗯啊啊操死我| 午夜一区| 96久久科窝| 啊啊啊啊免费视频| 日本一级一级一级一级| 亚洲性刺激| 日韩中文字幕在线视频观看| 国产AV天美传媒一区二区三区| 青娱乐欧美激情一区二区| 污到发麻的视频 国产| 美女啊啊啊啊啊啊| 精品超碰中文在线| 欧美天天射| 亚洲麻豆精品二区三区| 日韩肏逼视频| 操美女人妻| 久艾草在线精品视频在线观看| 蜜桃传媒一区二区亚洲| 国产v片在线免费观看| 亚洲精品一二三四区| 国产美女在线精品免费看| 神马福利久草| 国产一区二区免费福利片| 91九色丨国产丨爆乳| 日语五十路和六十路亚洲国产精品 | 婷婷中文网| 亚洲人综合| 立川理惠加勒比无码| 97操B| 蜜臀少妇一区二区| 麻豆久久精品亚洲精品88| 91美女视屏| 日韩无码a片| 精品二区三四区五电影 | 亚洲97成人在线观看| 色婷婷婷五月天激情四射| 免费的黄片有限公司| 99精品丰满人妻| 中文字幕成人理论在线| 97欧美综合网| 白丝少妇一区二区| 日韩在线观看中文字幕视频| 97国产超碰| 蜜桃视频精品一区二区三区| 色色福利| 欧美色图色综合| 久草在| 日本九九九九| 7777奇米影视久久| 91热热色| 四季AV一区二区凹凸精品小说| 精品性爱一二三区| 91人妻少妇| 欧美激情久| 欧美性爱五月天| 久综合国内精品自在自线| 国产熟女自拍| 日本97久久久精品| 天天爽天天操| 日韩精品1区2区中文字幕| 欧美亚洲天天| 青青草玖玖爱| 国产精品经典一卡久久久| 日本高清有码网址视频| 日韩欧美性吧婷婷乱伦大香蕉| 俺也射| 美女高潮视频91| 天天拍天天操| 秋霞蝌科网日本一区| 天天日天天干天天操| 欧美日日人人天天| 麻豆一区在线| 真实高潮91| 黄污污污污| 日本肉体xxxx裸交| 亚洲午夜福利在线影院| 国产男女边吃边摸视频网站| 东京热男人的天堂| 久热最新在线杭州| av影院十区| 亚洲精品国产熟女久久久| 香港成人一级视频在线青青草| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 国内精品久久人妻性色av| 91精品网站| 天堂av最新电影网| 一区二区不卡免费| 粉嫩久久久极品| 人人妻人人色| 天天看特黄的免费网站| 美日韩一卡二卡三卡免费人妻精品| 婷婷五月天色色| 高清国产av无码| 99久久e免费热视| 变态乱伦伪娘灌肠一区二区| 亚洲精品国产无码高清| 亚洲97成人在线观看| 日本道不卡| 亚洲天天操| 成人怡红院| 东京热男人天堂| 啊啊啊啊操死我| 综合久久9| 欧美日韩性感| 91丝袜美女| 人妻在线中出视频| 亚洲欧美另类少妇精品| 老熟妇综合| 日韩资源网| 嗯~啊~轻一点 视频| 97射欧美| 9丨久久九九九| 97综合国产| 国产无码精品久久久久久| 日本不卡五区| 日本成熟少妇A∨网站| 欧美成人性爱视频在线播放| 久久免费99精品久久久久久| 亚洲伊人a线观看视频| 国产AV毛片| 亚洲欧洲国产综合av| 久久久精品国产亚洲AV无码| 精品一区二区啪啪啪| 射 色综合| 97色97好| 校园春色 亚洲| 亚洲色图欧美色图另类图片| 欧美人人曰人人操人人射射| 思思热影视| 欧美日韩操逼嗦吊| 爱射综合| 1024午夜激情男人的天堂| 精品人妻久久久| 国产91影院| 日本免费中文字幕在线| www超碰| 九九热免费在线国产视频伊人五月| 国产熟女精品区| 99热在线只有精品| AV麻豆免费一区| 入口操逼网站| 中文字幕乱码人妻一区二区三区,99精品 | 青青草日韩免费观看高清在线| 91九色网| 欧美A√综合网| 淫淫综合网| 操操操五月天婷婷丁香影院| 强免费黄色网址| 久久综合日韩亚洲欧美| 九九久精品| 亚洲一区中文精品| 五月丁香激情啪啪| 99re99视频在线免费观看| 78精品| 91碰超| 日产国产精品中文久久婷婷| 热热色综合网| 精品国产人成在线| 欧美少妇一区二区三区| 欧亚三区动漫| 欧美强奸一区二区诱惑| 你草精品在线视频| 日韩欧美日韩| 激情第四色| 九九九只有精品| 日韩 欧美 另类 人妻| 顶级少妇BT天堂| 久久久久成人网| 日韩激情啪啪| 色悠久久久av| 欧美性爱第一区| 亚洲色欲一区二区三区| 亚洲色交| www.婷婷| 久久精品区| 国产精品99久久久www| 国产一区二区三区,在线观看观看| 国产毛片片精品天天看视频| 熟女丝袜视频| 国产精品操| 五月婷在线| 日韩精品啪啪啪| 美女被艹尤物视频| 男人天堂无码| 操比国产| 天堂亚洲欧美| 久久99操天天日| 毛片视频白嫩| 偷拍亚洲| 久都青青视频 | 五月婷婷无码| 日夜精品| 91在线欧色| 极品销魂美女一区二区 | 欧美在线天堂| 最新AVzaixian| 欧美天天射| 大香蕉免| 眼镜人妻101.com| 91性高| 天天日B夜夜干B时时操B| 加勒比色综合| 超碰在线国产| 亚洲图片另类| 久久亚洲天天做| 黄色视频60分钟| 亚洲综合 欧美| 亚洲精品日日夜夜52| 夜夜高潮夜夜爽夜夜爱爱一区| 婷婷五月天激情四射| 神马久久午夜| 东北女人的毛片| 欧美国产伊人久久久久| 欧美性爱一区二区三区| 天天干天天日天天射黄色| 久久精品国产AV一区二区三区| 超碰欧美在线欧美| www.狠狠| 一级人妻性爱视频| 久久精品日韩专区免费观看| www.五月天| 啪啪啪精品| 懂色av中文字幕| 欧美成人9797| 在线观看色视频| 91亚洲网| 伊人在线大香蕉视频久久| 丁香六月啪啪| 精品无码一区二区三区| 天操天操夜操夜月操月年年操操| 男人久久天堂| 九九热精彩视频| 看日韩美女二区三区免费操逼视频| 日韩黄片影院| 9久久久久久| 99精品伊人| 天天综合色| 九九干| 天美91| 中文字幕欧洲有码| 亚洲美欧999| 99在线精品观看99| 无码最新| 久久精品国产亚洲AV清纯| 国产外初女出血视频| 国产天天骚| 九九黄色网| 亚洲色色探花| 久久国产逼| 青青久久艹| 久久影视二区三区行押| 大香蕉宅男伊人| 花野真衣| 超碰免费在线| 亚洲码专区| 久久久亚洲高清不打码| 久久久久久久强迫| 96久久久久| 久草色在线观看| 亚洲综合射| 欧美白嫩女HD| 欧美亚男人的天堂| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | AV网站高清无码在线观看| 久久久久9999| 国产精品一区二区三区免费视频| 欧美综合色综合| 欧美 亚洲 综合 制服 另类| 欧美日韩222| 丰满人妻一区二区三区四| 91精品大奶人妻| 91天堂色男人的天堂| 久久无码成人| 最新av在线| 中文字幕88av在线| 久久的网站啊啊啊啊啊| 韩国女主播青草福利视频| 日韩AV片| 日本三级韩国三级99| 婷婷五月天色色| 天美麻花大全视频| 婷婷五月天成人网| 丁香五月婷婷五月| 性爱动态120秒| 欧美夜夜狠| 啊啊啊啊嗯嗯嗯用力好爽 | 欧美性爱一内片一区二区三区| 人妻啊啊人妻啊啊| 99青草| 人妻天天爽夜夜爽爽| 草b在线 | 色综合91好| 丰满人妻一区二区三区蜜桃视频| 久久超碰日韩精品| 欧美色狠| 日韩99精品视频综合区| www.av在线视频| 日本性爱少妇| 久99| 精品久久久九九九孕妇| 亚洲码和欧洲精品激情系列| 亚洲三级网址久久最新| 91爱看| 一本一道久久综合久久| 欧美性暴力猛交| 日产操逼| 日va操| 九九成人视频| 美女在线H91| 1024手机看片欧美日韩| 欧美草草| 久久精品一区二区三区四区五区| 91久久九九精品国产综合| 国产99精品一区二区三区免费| 午夜久久无码1000合集| 五月婷婷丁香六月| 中文乱码99| 欧美在线第五页| 97爱综合| 日韩亚洲国产视频| 婷婷五月成人| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 啪一啪免费视频| 日韩久久三区| 日韩美女高潮喷水视频| 久久9精品| 久久欲| 中文字幕 码 自拍 视频 区| 大香蕉欧美伊| 4tube欧美女厕所| 欧美黄色手机在线观看| 日韩欧美字幕亚洲一区二区| 99热97| 校园春色家庭伦理欧美激情| 天天射夜夜操| 五月天玖玖资源站| 欧洲中文字幕| 黄色交缠性感爆操91国产精品免费一区二区三区| 男女无套 免费网站| 日操粉逼逼| 67194无码不卡| 久久99久久99精品天美传媒棢·纸:.| 亚洲āv网址在线观看| 人人看人人摸人人色| 97超碰色屌| 人人澡人人干| 久久一级无码精品毛片6| 精品一区96| 9 1果冻精品视频| 蜜乳AV一区二区三区四| 日本加靬比网站发布页| 天堂性色| 911粉嫩人妻| 亚洲成人妻日韩在线| 91亚州| 九九成人视频| 91在线一起| 一类无码操逼视频| 欧美性爱一区| 丰满人妻被猛烈进入中| 亚洲av夫妻操穴网| 精品人妻久久久| 福利在线黄片| 99精品久久久久久| 交换娇妻呻吟声不停中文字幕| 精品少妇后入一区二区三区四区人妻巨乳| 色香91| 黄页视频网站野外| 91精产一区二区三区| 免费少妇一区二区| 久久久久久性爱视频| 美女久久久| 午夜精品久久久久久久男人的天堂| 国产免费一区| 在线观看AV片| 黄色一区三区| 国产熟女乱论| 久久久久久免费电影| 澳门特级毛片免费观看| 99色在线| 超碰人人干| 欧洲亚洲人妻无码高清久久三区四区| 3p国产欧美99热| 色婷婷日韩精品一区二区三区| 日韩av不卡在线观看| 国内一区二区三区| 女人被添高潮免费视频| 少妇高潮一区二区三区在线| 99啪啪| 九久精品| 激情露脸爱| 亚洲激情综合另类男同| 天天色怡春院| 一个人免费HD91视频| 日日躁狠狠躁天天躁精品| 91色婷婷综合久久中文字幕二区| 超碰97COm中文| 天天看少妇| 99久国产精品午夜性色福利| 亚洲熟久久| 熟女六十路| 蜜臀网 一区| 乱理日韩中文| 一级特级aaaa毛片免费观看| 男女啊啊啊啊啊| 日韩99神马视频播放片在线播放| 精品亚洲成人免费在线| 青青欧洲黑| 久久精品美女一区| 亚洲有码视频二区| 欧美国产视频| 青青操轻轻| 熟女人妻精品一区二区视频| 国产超碰在线一区| 插插综合网天天影视网| 精品国产少妇高潮视频| 国产亚洲精品美女久久久| 少妇丝袜在线观看AV| 东京日日夜夜| 白天啪啪晚上啪啪视频| 欧美色图校园春色| 激情亚洲天堂| 91|九色|国产熟女| 东北少妇高潮zzzz| 啊啊啊啊好疼视频| 老色69| 精品性爱一区二区| 成人线上超碰| 国产不卡的视频| 黄色小说亚洲| 大香蕉综合在线| 成人小说另类在线| 欧美色图校园春色| 天天综合网1| 视频二区美腿丝袜制服人妻欧美| 先锋色眉乱伦资源| 无码精品久久久久久亚洲| 蜜桃臀一区二区aV | 四虎精品永久在线播放| 另类在线| 亚洲伊人青青草| 国精品一区二区三| 婷婷五月天色色| 无码外流操逼视频| 97综合| 欧美精品亚洲精品日韩传电影| 91色女| 中文字幕 国产 精品| 乱伦1色页| 久久精品国产精品一区| 国产91美女视频| 亚洲天天影视色综合| 中文字幕亚洲欧美在线不卡| 性爱久久| 日韩性爱网址| 国产69精品久久久久99尤物| www.99色| 性色亚洲| 国产精品噜噜噜日日日| 久久久精| 欧美成人一区二区| 神马久久久久久久久久| 大香蕉手机在线视频| 99精品视频在线观看| 不卡啪啪视频| 户外裸露刺激视频第一区| 少妇无码av专区线| 高清无码在线播放网站| 国产精品福利视频播放| 欧美极品美女aaaaaa级黄片| 中文字幕后石码四区五区| 蜜臀久久99精品久久久久电影| 丁香7月婷婷| 欧美综合色综合| 欧美手机在线综合| 欧洲一区二区三区四区在线观看| 亚洲黄色网址| 综合激情一一91| 色眯眯av| 国产自产22区| 久久风骚城市| 97在线/亚洲| 大香蕉淫人| 啊啊啊啊好爽好舒服一区二区易域| 97亚洲综合在线| 亚洲图片欧美偷拍| 中文字幕乱码在线观看| 国产高清成人免费视频| 国产 日韩 欧美一区| 超碰日韩人妻| 免费的黄片有限公司| 日韩欧美成人综合在线| 天天躁日日躁xxxxx| 黄片aaaaa一区| 免费久久精品麻豆一区二区av| 亚洲操逼视频网站| 1024香蕉视频| 大香蕉在线86| 精品九九九九九九九九九| 很狠操| 东京热天堂网| 亚洲 小说 欧美 激情 另类| 一级@啪啪视频| 屁屁影院一区二区三区国产| 五月天大香蕉| 后入 亚洲 美女 射| 999 久久久| 青青久日| 在线视频免费观看午夜| 国产精品成人无码a v毛片| 亚洲欧美一区二区三区一猛片| 欧美日韩成人| 久久婷婷在线观看视频| 97资源免费视频| 无码粉嫩白虎一线天b区| 香蕉欧美| 肉嘟嘟www视频在线观看高清| 9+1视频网址| 欧洲一区二区三区免费| 欧美日韩系列| 国产午夜在线观看| av日韩手机在线影视| 天美传媒国产原创中文字幕亚洲欧美另类 | 男人天堂久久精品不卡| 日韩小电影| 国产精品区在线12p| www超碰| 超碰综合色| 欧美天天搞| 中日韩久久久| 狼天天狼天天大香蕉| 操逼短片| 日本黄大片在线观看视频| 国产精品午夜高潮呻吟久久av| 人妻在线中出视频| 日韩97超碰| 精品九九国产无码| 亚 欧 美 综合| wuyechaopeng| 亚洲国产成人7777| 五月天激情国产综合婷婷婷| 怡红院成人av| 亚洲男人天堂网| 日韩啪啪视频| 欧美亚洲成人在线一区二区三区| 欧美牲| www色婷婷| 1024手机看片欧美日韩| 中文字幕丰满人妻日本| 黄色av一区二区在线| 中文字幕久久精品一区| 啊啊啊啊啊啊在线观看| 女人高潮抽搐喷水视频网站| 日本五十路在线| 色欲天天综合久久久无码网中文| 国产女人成人精品视频| 亚洲色丰满少妇高潮| 一二三区操逼国产91| 9 9精品一区二区三区| 精品制服美女中文一区二区三区| 日韩高清黄片| 嗯啊不要啊啊在线观看视频| 四方色播| 久久综合九九| 精品丰满熟妇人妻一区 | 色欲久久99精品久久| 亚洲第一精品在线视频| 国产精品 午夜福利| 超碰欧美| 欧美78p| 久草在线| 欧美 亚洲 制服 精品| 另类欧美色| 五月天婷婷基地| 欧美激情 一区| av片在线观看免费播放| 精品人妻视频一区二区在线播放| 老司机深夜影院18未满| 亚洲日韩少妇一道本视频| 搞中出久久| 欧美999999| 亚洲天堂AV在线播放| jiujiujiujingpin| 欧美少妇性爱网站| 色五月激情AV在线| 在线无码操| 亚洲狠狠入| 久久香蕉影院| 夜夜欢天天干| 人妻精品综合中文字幕在线| 欧美Ⅴ性爱| 久久內射| 操逼不卡中文字幕| 乱码人妻一区二区三区| 秋霞曰韩R级| 天天综合官网| 美女露胸露屁股| 肏逼福利网站| 大香蕉在线视频重口味毛片在线| 日本三级A片网站com| 国产精品在线一区二区| 日韩在线观看中文字幕视频| 综合亚洲欧美| 亚洲免费精品一区| 亚洲伊人a线观看视频| 啊啊啊在线看| 丁香六月激情| 久久久久久久强迫| 精品一二三区女同| 婷婷五月av| 国产操逼网站亚洲一级黄色| 韩国女主播青草在线| 日韩国产乱子伦App| 久久久久久久9999| 亚洲国产剧情少妇激情| 亚洲欧洲精品视频发布| 伊人性在线视频| 91超碰人人| 国产区91柔拿会所技师| 久久三区四区| 99综合自拍| 国产成人自拍视频在线| 蜜臀久久99精品久久久久| 日韩中文字幕2020| 久久久久久人妻| 欧美日韩啪啪电影| 成人区人妻精品一| 久草资源在线视频官方总站日韩丝袜美腿 | 激情啪啪拍91| 呦呦一区| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 97天天在线| 性色一线| 丝袜熟女一区二区三区| 国产h小视频在线观看免费| 中国一级操逼视频| 蜜臀网 一区| 性交一区二区在线播放| 男人的天堂亚洲| 国产女人操逼视频| 97在线观看| 亚洲另类色综合网站| 亚洲熟妇熟在线电影视频| 97啪啪| 青娱乐亚洲自拍| 九九九九九九视频免费| 青久久| 欧美色天堂网在线视频| 好吊色在线观看| 日本肏逼视频在线观看| 视频一区二区三区精品| 夜夜夜爽www精品视频| 天天日美女的B| 国产人伦精品一区二区三区| 欧美一级黄片免费播放| 2017人人操,人人摸| 亚洲色天| 大鸡巴久久| 欧美青青草视频| 亚洲激情色片| 蜜桃在线观看一区二区三区| 欧美成人都市人妻| 无码 有码 国产18p| 亚洲第一免费视频| 欧美性爱综合,免费| 99热这里只有精品18| 青青久日| 久久精品99| 色网综合网| 麻豆 亚洲 97| 人妻一区久久二区三区色播| 99少妇精品视频| 人妻少妇一区二区| 亚洲无码色| 婷婷啪啪| 色九区| 天天日夜夜| 长长久久免费视频| 熟女精品一区二区三区| 九九99精品| 久久久网站| 亚洲欧洲另类| 99爱精品| 综合网欧美在线| 精品国产乱码久久久久久久久1 | 亚洲另类色图片| 岛国AV一区二区电影| 偷窥自拍亚洲色图| 欧美色九九九| 久久亚洲天天做| 污污污8888| 综合久久99亚洲人妻中文在线| 午夜福利在线视频1000| 欧美中字二区| 久操在97| 欧美激情亚洲情色| 亚洲另类色综合网站| 亚洲图片 欧美电影| 亚洲图片欧美偷拍|