日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

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

Flutter鴻蒙化遷移實(shí)戰(zhàn):用dia依賴注入實(shí)現(xiàn)無(wú)感多端適配

Flutter鴻蒙化遷移實(shí)戰(zhàn):用dia依賴注入實(shí)現(xiàn)無(wú)感多端適配 最近 Flutter 社區(qū)里最熱鬧的事就是鴻蒙原生適配這條賽道。我手頭正好有個(gè)老項(xiàng)目核心依賴注入層用的是 dia 這個(gè)輕量庫(kù)趁熱把它遷到了 OpenHarmony 的 Flutter 分支上。整個(gè)過(guò)程比想象中順但也踩了不少教科書里不會(huì)寫的坑。這篇指南就是把我摸出來(lái)的路數(shù)完整復(fù)述一遍為什么選 dia 做解耦底座、它憑什么能“無(wú)感”橫跨 Android/iOS/鴻蒙三個(gè)平臺(tái)、真正的鴻蒙化適配要改哪些文件、以及構(gòu)建和運(yùn)行時(shí)會(huì)遇到哪些詭異問(wèn)題。目標(biāo)讀者很明確正在做 Flutter 鴻蒙化遷移、或者想在多端工程里引入依賴注入的開發(fā)者??赐昴隳苤苯诱罩挥迷倌弥?pub 上的老教程來(lái)回試錯(cuò)。1. 為什么偏偏是 dia鴻蒙生態(tài)下的依賴注入選型老規(guī)矩先聊清楚“為什么是它”。依賴注入在 Flutter 生態(tài)里早不是什么新鮮詞get_it、provider、riverpod 滿天飛。可在鴻蒙適配這個(gè)場(chǎng)景里選型邏輯和純 Android/iOS 完全不同搞不好后面整個(gè)遷移都會(huì)卡殼。1.1 Flutter 鴻蒙化的現(xiàn)狀與痛點(diǎn)OpenHarmony 對(duì) Flutter 的支持路線這兩年走得很快官方 SDK 分支已經(jīng)能跑起來(lái)不少純 Dart 項(xiàng)目但生態(tài)深度和安卓沒(méi)法比。最直觀的痛點(diǎn)有三個(gè)一是很多熱門的 pub 包沒(méi)做 OHOS 平臺(tái)適配尤其帶原生插件 (MethodChannel、FFI) 的基本一編就掛二是指標(biāo)采集、日志SDK、路由跳轉(zhuǎn)這類基礎(chǔ)組件沒(méi)有鴻蒙實(shí)現(xiàn)全得自己補(bǔ)三是構(gòu)建鏈路復(fù)雜經(jīng)典工程用 hvigor 編 HAP 包調(diào)試工具鏈和 Android Studio 那套完全是兩條路。然后你再把“工程解耦”這個(gè)訴求疊加上來(lái)。大多數(shù) Flutter 項(xiàng)目為了趕進(jìn)度業(yè)務(wù)模塊互相直接 importService 類滿天飛。這種結(jié)構(gòu)搬到鴻蒙上就是個(gè)災(zāi)難換一個(gè)平臺(tái)實(shí)現(xiàn)要改的不是一兩個(gè)文件而是關(guān)聯(lián)的一整片引用圖。能解決這個(gè)問(wèn)題的唯一思路就是在架構(gòu)層引入“面向接口編程 依賴注入容器”讓業(yè)務(wù)代碼只認(rèn)抽象不認(rèn)實(shí)現(xiàn)。1.2 dia 與 get_it、provider 的取舍我在 dia 之前先用過(guò) get_it也試過(guò) provider。get_it 確實(shí)強(qiáng)大全局注冊(cè)、異步加載、作用域、自動(dòng)注冊(cè)擴(kuò)展都有但它太重了。重到什么程度它的注冊(cè)風(fēng)格偏命令式你得在代碼里到處寫getIt.registerSingleton這對(duì)侵入性要求高的鴻蒙適配很不友好。provider 則是一套 Widget 樹狀態(tài)方案跟 DI 容器的定位壓根不是一回事。你當(dāng)然可以用它做服務(wù)定位但把邏輯和 UI 狀態(tài)綁定在一起跨端遷移時(shí)牽一發(fā)動(dòng)全身。dia 的定位剛好是那個(gè)最優(yōu)解它是一個(gè)純粹的、無(wú) Widget 綁定的容器實(shí)現(xiàn)核心 API 就幾個(gè)注冊(cè)、解析、移除、重置。代碼量小、零第三方依賴、純 Dart 編寫。最關(guān)鍵是它的注冊(cè)和獲取方式天然支持“類型到實(shí)例”的映射這讓鴻蒙適配可以做到非常干凈——需要替換某個(gè)實(shí)現(xiàn)時(shí)只在組裝層 (composition root) 改一行業(yè)務(wù)模塊全程無(wú)感。特性diaget_itprovider是否依賴 Widget 樹否否是支持類型映射解析是是弱容器生命周期管理支持重置與釋放部分支持無(wú)侵入性極低僅組裝層注冊(cè)中調(diào)用處需引定位器高UI 包 Provider鴻蒙移植成本純 Dart幾乎為零需要處理擴(kuò)展包兼容性需配合全局狀態(tài)改造1.3 dia 鴻蒙化后的價(jià)值無(wú)感替換與極端解耦“無(wú)感依賴注入”這個(gè)詞聽著玄其實(shí)說(shuō)透了就一句話調(diào)用方永遠(yuǎn)不知道實(shí)際跑的是哪個(gè)平臺(tái)的實(shí)現(xiàn)。體現(xiàn)在鴻蒙化上就是用 dia 做了一個(gè)“平臺(tái)實(shí)現(xiàn)切換層”。以前你從 Android 遷到鴻蒙得在業(yè)務(wù)類里寫if (Platform.isOhos) ... else ...。有了 dia你在啟動(dòng)時(shí)把接口綁定到 OHOS 實(shí)現(xiàn)業(yè)務(wù)代碼里只有Dia.getStorageService()至于背后是 Android 的 SharedPreferences 還是鴻蒙的 Preferences業(yè)務(wù)層完全不關(guān)心。至于架構(gòu)清流這個(gè)評(píng)價(jià)我理解是兩層意思。一層是模塊邊界干凈每個(gè) feature 只暴露接口實(shí)現(xiàn)類全部下沉到 assembly 目錄另一層是構(gòu)建產(chǎn)物干凈dia 沒(méi)有碰任何 Dart SDK 內(nèi)部能力編譯期不需要代碼生成。2. dia 的核心機(jī)制解析容器、注冊(cè)與自動(dòng)裝配很多初學(xué)者用 DI 庫(kù)只會(huì)調(diào) API不理解容器在內(nèi)存層面到底做了什么遇到問(wèn)題就抓瞎。我在鴻蒙適配時(shí)想改一個(gè)注冊(cè)策略就是因?yàn)楦闱辶藱C(jī)制才能對(duì)癥下藥這塊必須展開講。2.1 容器是怎么設(shè)計(jì)的dia 的容器本質(zhì)上是一個(gè)類型到實(shí)例工廠的映射表類似MapType, InstanceFactory。它不是簡(jiǎn)單地把對(duì)象塞進(jìn) Map而是維護(hù)了一條“如何創(chuàng)建這個(gè)對(duì)象”的指令鏈用哪種構(gòu)造函數(shù)、是否需要懶加載、是否需要單例、依賴的子服務(wù)有哪些。這個(gè)設(shè)計(jì)有個(gè)隱藏優(yōu)勢(shì)Dart 的泛型在運(yùn)行時(shí)是真實(shí)存在的類型Dia.getFoo()傳進(jìn)去的Foo可以直接作為 Map 的 key不需要像 Java 那樣搞 String 字符串 key 的注冊(cè)表。這也是 dia 能保持輕量的原因之一。對(duì)比傳統(tǒng)new方式這塊邏輯上的差別太大了。傳統(tǒng)寫法里StorageServiceImpl的構(gòu)造過(guò)程散落在各個(gè)調(diào)用點(diǎn)以后換實(shí)現(xiàn)要一個(gè)個(gè)找。dia 把“怎么構(gòu)造”這件事統(tǒng)一收口到容器里調(diào)用點(diǎn)只需要說(shuō)“我要一個(gè) StorageService”。鴻蒙化時(shí)你只需要保證 OHOS 環(huán)境下注冊(cè)的工廠能正常構(gòu)造出 OHOS 實(shí)現(xiàn)其他代碼一行不用改。2.2 注冊(cè)與解析的工作原理dia 的解析流程一條鏈路大致是拿到類型 → 查映射表 → 獲取工廠 → 按策略創(chuàng)建實(shí)例 → 若依賴其他服務(wù)則遞歸解析 → 返回結(jié)果。以一段典型的注冊(cè)代碼為例// 初始化容器 final Dia dia Dia.instance; // 注冊(cè)接口到具體實(shí)現(xiàn) dia.registerStorageService(() OhosStorageService()); // 注冊(cè)單例 dia.registerSingletonAppConfig(AppConfig()); // 懶加載注冊(cè)首次使用時(shí)才構(gòu)造 dia.registerLazySingletonApiClient(() ApiClient( config: dia.getAppConfig(), ));這里的細(xì)節(jié)我后來(lái)才琢磨明白。register和registerLazySingleton的主要區(qū)別不是“內(nèi)存占用”而是構(gòu)造時(shí)機(jī)。鴻蒙設(shè)備上你希望 AppConfig 這種啟動(dòng)就要用的配置對(duì)象立刻創(chuàng)建那就注冊(cè)成 eagerApiClient 這種耗資源的網(wǎng)絡(luò)客戶端最好等業(yè)務(wù)真正調(diào)網(wǎng)絡(luò)接口時(shí)才創(chuàng)建就注冊(cè)成 lazy。2.3 從 Dart 到鴻蒙dia 的可移植性判斷判斷一個(gè) Dart 包能不能跑在 OpenHarmony 的 Flutter SDK 上我在遷移時(shí)總結(jié)了一套標(biāo)準(zhǔn)pubspec.yaml 里的依賴是否全部是純 Dart 包有沒(méi)有flutter:以外的基礎(chǔ) SDK 能力引用代碼里是否用了dart:ffi、dart:mirrors。mirrors 在 release 編譯模式直接不可用FFI 在鴻蒙上需要重新鏈接原生庫(kù)是否依賴了 Flutter 引擎的原生 API比如MethodChannel調(diào) Android/iOS 原生模塊。dia 在這三條全部命中安全性它的 pubspec 里幾乎只有sdk: flutter全程只用了dart:collection和dart:async這些通用庫(kù)。這就是為什么它能做到“鴻蒙化適配幾乎零成本”——不是我們做了多大改造而是它一開始就沒(méi)有綁死任何平臺(tái)能力。提示如果你打算遷移其他 Flutter 庫(kù)先按上面三條標(biāo)準(zhǔn)做個(gè)“可移植性體檢”比直接改代碼高效得多。我見過(guò)有團(tuán)隊(duì)把一個(gè)重度依賴 path_provider 的包硬遷到鴻蒙改了一周最后還是換成自己寫文件管理接口。3. 鴻蒙化適配的前置準(zhǔn)備動(dòng)手改代碼之前先把環(huán)境和依賴梳理清楚。這塊沒(méi)弄好后面編一個(gè)錯(cuò)一個(gè)而且錯(cuò)誤信息還特別反直覺(jué)。3.1 確認(rèn) Flutter SDK 的鴻蒙分支OpenHarmony 官方社區(qū)維護(hù)了一份適配鴻蒙的 Flutter SDK 分支它和標(biāo)準(zhǔn) Flutter SDK 的主要差異在引擎層包含了鴻蒙的渲染適配、Ability 生命周期橋接以及針對(duì) OHOS 編譯鏈路的配置支持。實(shí)際操作時(shí)建議直接把flutter命令指向這個(gè)分支。配置方式有兩種一種是把分支 clone 到本地后改環(huán)境變量FLUTTER_ROOT另一種是在 IDE 的 SDK 設(shè)置里指定。我更推薦用命令行因?yàn)?hvigor 構(gòu)建時(shí)經(jīng)常需要直接調(diào)用flutter_tools環(huán)境變量配置得好能少踩很多 shell 腳本的坑。3.2 把 dia 引入 OHOS 工程的三種方式引入方式適用場(chǎng)景優(yōu)點(diǎn)缺點(diǎn)pub 依賴dia 版本和鴻蒙分支 Dart SDK 完全兼容改動(dòng)最小后續(xù)更新方便依賴網(wǎng)絡(luò)拉包純離線環(huán)境不可用path 依賴想鎖定某個(gè)本地版本或臨時(shí)修改 dia 源碼可控性強(qiáng)可打斷點(diǎn)調(diào)試每個(gè)開發(fā)者都要同一份本地路徑源碼拷入工程適配時(shí)深度定制容器行為完全自主失去上游更新后續(xù)維護(hù)麻煩首選方案肯定是 pub 依賴。但要注意鴻蒙分支的 Dart SDK 版本可能落后于標(biāo)準(zhǔn) Flutter 的最新版而 pub 上最新版的 dia 可能要求更高的 SDK。遇到這種情況用 path 依賴把你驗(yàn)證過(guò)的 dia 版本固定下來(lái)dependencies: dia: path: ./third_party/dia這個(gè)操作還有個(gè)附加收益鴻蒙工程里經(jīng)常需要同時(shí)調(diào)整多個(gè)三方庫(kù)統(tǒng)一把源碼放到third_party目錄下維護(hù)起來(lái)比讓每個(gè)開發(fā)者各自改 pub 緩存清晰太多。3.3 依賴與混編檢查哪些庫(kù)會(huì)成為攔路虎我在做鴻蒙化前置檢查時(shí)列了一個(gè)“依賴檢查清單”照著排查再動(dòng)手能省掉后面大量定位時(shí)間帶原生代碼的 Flutter 插件最典型的 path_provider、shared_preferences、flutter_secure_storage它們的 Android/iOS 實(shí)現(xiàn)不能直接用必須找鴻蒙版替代或自己用PlatformInterface補(bǔ)一套 OHOS 實(shí)現(xiàn)依賴反射/動(dòng)態(tài)代理的庫(kù)部分序列化庫(kù)、ORM 庫(kù)在 Dart 里用了編譯期代碼生成 (build_runner) 還好一旦運(yùn)行時(shí)反射就麻煩了涉及dart:io的庫(kù)鴻蒙分支對(duì)dart:io的支持已經(jīng)不是死角了但個(gè)別能力比如網(wǎng)絡(luò)套接字的底層實(shí)現(xiàn)仍可能和 Linux 內(nèi)核表現(xiàn)有差異遇到再說(shuō)先不主動(dòng)踩與函數(shù)式編程、流式處理相關(guān)的庫(kù)比如 rx_dart、fpdart 這類基本都是純 Dart通常沒(méi)問(wèn)題。dia 完全不在攔路虎清單里這也是我敢拿它當(dāng)“鴻蒙化適配樣板間”的原因。你完全可以用它驗(yàn)證整條鴻蒙適配鏈路是否通暢而不需要先解決一堆原生插件兼容問(wèn)題。4. 實(shí)操核心適配步驟與關(guān)鍵代碼前面鋪墊了那么多現(xiàn)在進(jìn)入正題。我會(huì)按完整流程帶你走一遍創(chuàng)建 OHOS 工程、引入 dia、做雙端注冊(cè)、寫帶平臺(tái)差異的實(shí)現(xiàn)最后構(gòu)建驗(yàn)證。4.1 第一步搭好 OHOS 的 Flutter 工程骨架OpenHarmony 的 Flutter 工程結(jié)構(gòu)比標(biāo)準(zhǔn) Flutter 工程多了一層鴻蒙的工程外殼因?yàn)樽罱K產(chǎn)物不是 APK 而是 HAP (HarmonyOS Ability Package)。一個(gè)最小工程結(jié)構(gòu)大致長(zhǎng)這樣my_app/ ├── ohos/ │ ├── entry/ │ │ └── src/main/ │ │ ├── ets/ │ │ │ └── entryability/ │ │ │ └── EntryAbility.ets │ │ ├── resources/ │ │ └── module.json5 │ ├── build-profile.json5 │ └── hvigorfile.ts ├── lib/ │ └── main.dart ├── pubspec.yaml └── oh_modules/EntryAbility.ets負(fù)責(zé)把 Flutter 的 View 加載到鴻蒙的 Page Ability 里。這里有個(gè)關(guān)鍵點(diǎn)鴻蒙的 Ability 生命周期必須和 Flutter 引擎的生命周期橋接好。如果只寫super.onCreate和loadName而不處理 onForeground/onBackground 的轉(zhuǎn)發(fā)Flutter 里的路由切換或后臺(tái)恢復(fù)時(shí)機(jī)就會(huì)出現(xiàn)問(wèn)題。hvigorfile.ts里還要配置好 Flutter SDK 的路徑。如果flutter命令和鴻蒙分支不匹配第一輪構(gòu)建就會(huì)失敗而且錯(cuò)誤信息往往指向一個(gè)和真正原因無(wú)關(guān)的文件。4.2 第二步完成 dia 容器的雙端注冊(cè)這一步是鴻蒙化適配里最“核心”的細(xì)節(jié)也是很多人在普通 Flutter 項(xiàng)目里沒(méi)搞透的容器一定要在 UI 構(gòu)建之前完成組裝。我在main.dart里寫了一個(gè)獨(dú)立函數(shù)來(lái)組裝Futurevoid bootstrap() async { WidgetsFlutterBinding.ensureInitialized(); // 初始化 dia 容器 final Dia dia Dia.instance; dia.reset(); // 確保熱重啟時(shí)容器是干凈的 // 注冊(cè)基礎(chǔ)服務(wù) dia.registerSingletonAppConfig(AppConfig.load()); dia.registerLogger(() PrettyLogger()); // 注冊(cè)平臺(tái)相關(guān)服務(wù)按當(dāng)前環(huán)境選擇實(shí)現(xiàn) dia.registerStorageService(() OhosStorageService()); dia.registerDeviceInfo(() OhosDeviceInfo()); // 注冊(cè)業(yè)務(wù)倉(cāng)儲(chǔ) dia.registerOrderRepository( () OrderRepositoryImpl( local: dia.getStorageService(), remote: dia.getApiClient(), ), ); } void main() { bootstrap().then((_) { runApp(const AppEntry()); }); }這段代碼有幾個(gè)要點(diǎn)。第一WidgetsFlutterBinding.ensureInitialized()必須在任何Dia.get()之前調(diào)用否則部分依賴 Flutter 引擎能力比如 PlatformChannel的服務(wù)在構(gòu)造時(shí)拿不到綁定。第二dia.reset()在熱重載場(chǎng)景下非常關(guān)鍵鴻蒙調(diào)試器支持熱重載如果容器狀態(tài)在上一次會(huì)話里殘留重載后就會(huì)跑出“幽靈單例”排查起來(lái)極其痛苦。第三容器組裝是異步的但沒(méi)有提前 await我用.then包裹啟動(dòng)保證 runApp 之前所有注冊(cè)已完成。4.3 第三步用 dia 切換平臺(tái)實(shí)現(xiàn)類剛才注冊(cè)代碼里出現(xiàn)了OhosStorageService()這就是鴻蒙適配里“無(wú)感”二字的實(shí)體化。假設(shè)你的業(yè)務(wù)代碼原本這樣用class OrderDetailPage extends StatefulWidget { override StateOrderDetailPage createState() _OrderDetailPageState(); } class _OrderDetailPageState extends StateOrderDetailPage { late final StorageService _storage Dia.getStorageService(); override void initState() { super.initState(); _storage.save(order_cache, orderId); } }在 Android 階段容器里注冊(cè)的是AndroidStorageService到了鴻蒙階段你不需要碰OrderDetailPage任何一個(gè)字符只需要在bootstrap里把AndroidStorageService換成OhosStorageService。這就是無(wú)感替換的核心邏輯。更關(guān)鍵的是業(yè)務(wù)服務(wù)之間也通過(guò) dia 傳遞依賴而不是自己 newclass OrderRepositoryImpl implements OrderRepository { final StorageService _local; final ApiClient _remote; OrderRepositoryImpl({ required StorageService local, required ApiClient remote, }) : _local local, _remote remote; }構(gòu)造函數(shù)的參數(shù)列表成了“需求清單”由 dia 在組裝階段統(tǒng)一“注入”。鴻蒙化時(shí)只要保證StorageService和ApiClient在容器里有對(duì)應(yīng)的 OHOS 實(shí)現(xiàn)OrderRepositoryImpl完全不需要意識(shí)到自己跑在哪個(gè)平臺(tái)。4.4 第四步構(gòu)建驗(yàn)證與運(yùn)行驗(yàn)證工程配置完成、代碼組裝完成后進(jìn)入構(gòu)建環(huán)節(jié)。鴻蒙工程的構(gòu)建命令hvigorw assembleHap --mode module -p productdefault -p buildModedebug有兩點(diǎn)會(huì)直接影響構(gòu)建成敗。一是確保 Flutter SDK 分支與 hvigor 插件版本匹配我見過(guò)有人用標(biāo)準(zhǔn) Flutter SDK 去跑 HAP 構(gòu)建報(bào)了一堆莫名其妙的缺少引擎符號(hào)的錯(cuò)二是首次構(gòu)建時(shí)鴻蒙分會(huì)加載 Flutter 引擎產(chǎn)物網(wǎng)絡(luò)不好會(huì)等很久但別中途強(qiáng)殺進(jìn)程強(qiáng)殺后緩存半殘第二次構(gòu)建會(huì)查不出來(lái)問(wèn)題。構(gòu)建通過(guò)后用 hdc (HarmonyOS Device Connector) 安裝到真機(jī)或模擬器hdc install entry/build/default/outputs/default/entry-default-unsigned.hap運(yùn)行起來(lái)后不要急著點(diǎn)頁(yè)面先在日志里確認(rèn) dia 是否正確完成了注注冊(cè)。我習(xí)慣在 bootstrap 末尾打一行容器健康日志dia.healthCheck(); // 檢查關(guān)鍵服務(wù)是否都注冊(cè)到了容器如果某個(gè)接口沒(méi)有注冊(cè)實(shí)現(xiàn)healthCheck 會(huì)直接拋缺失異常好在第一時(shí)間定位真正要查的業(yè)務(wù)邏輯問(wèn)題別在啟動(dòng)階段浪費(fèi)半小時(shí)猜想哪一步漏了。5. 實(shí)戰(zhàn)場(chǎng)景dia 在鴻蒙工程里的解耦玩法架構(gòu)是拿來(lái)用的不是拿來(lái)曬的。下面三個(gè)場(chǎng)景是我在這個(gè)項(xiàng)目里實(shí)際跑過(guò)的代表了三類最常見的鴻蒙遷移痛點(diǎn)。5.1 場(chǎng)景一網(wǎng)絡(luò)層直接換實(shí)現(xiàn)Flutter 項(xiàng)目最常見的網(wǎng)絡(luò)層就是 Dio。Dio 本身是純 Dart 包鴻蒙上可以正常使用但很多線上應(yīng)用的網(wǎng)絡(luò)層在上層封裝了攔截器、日志、證書校驗(yàn)這些實(shí)現(xiàn)和平臺(tái)或多或少有耦合。我在遷移時(shí)抽象了一個(gè)HttpDriver接口abstract class HttpDriver { FutureHttpResponse get(String url, {MapString, String? headers}); FutureHttpResponse post(String url, {MapString, dynamic? body}); }Android 和 iOS 下直接注冊(cè) Dio 的實(shí)現(xiàn)dia.registerHttpDriver(() DioHttpDriver( dio: Dio(BaseOptions(baseUrl: https://api.example.com)), ));鴻蒙下如果發(fā)現(xiàn)某些網(wǎng)絡(luò)行為需要適配 OHOS 的證書邏輯我補(bǔ)了一個(gè)OhosHttpDriverdia.registerHttpDriver(() OhosHttpDriver( ohosContext: ohosContext, // 從 EntryAbility 傳入 ));業(yè)務(wù)模塊原先各種Dio().get(...)的地方現(xiàn)在統(tǒng)一Dia.getHttpDriver().get(...)。這套改完之后從 Android 切到鴻蒙只需要啟動(dòng)時(shí)換一行注冊(cè)。更妙的是所有頁(yè)面代碼甚至不需要重編。模塊之間的網(wǎng)絡(luò)依賴關(guān)系在結(jié)構(gòu)上變成了“單行道”頁(yè)面 → HttpDriver 接口 → dia 容器 → 具體實(shí)現(xiàn)這種單向依賴把可測(cè)試性也順帶提上來(lái)了。5.2 場(chǎng)景二平臺(tái)通道的注入式適配鴻蒙適配里最麻煩的一件事就是平臺(tái)通道。你不可能把原生代碼直接拿過(guò)來(lái)只能重新寫一套 OHOS 的 MethodChannel-Style 實(shí)現(xiàn)這個(gè)場(chǎng)景下 dia 的價(jià)值不是“換實(shí)現(xiàn)”而是“按平臺(tái)裝配通道”。假設(shè)業(yè)務(wù)里有這樣一個(gè)獲取設(shè)備唯一ID的方法class DeviceId { static FutureString get() async { const channel MethodChannel(com.example/device); return await channel.invokeMethod(getDeviceId); } }頭鐵的做法是改成if (Platform.isAndroid) ... else if (Platform.isOhos) ...。而 dia 的做法是先定義一個(gè)接口abstract class DeviceIdProvider { FutureString getDeviceId(); }Android 下注冊(cè)走M(jìn)ethodChannel的實(shí)現(xiàn)鴻蒙下注冊(cè)走 OHOS 原生側(cè)實(shí)現(xiàn)dia.registerDeviceIdProvider(() OhosDeviceIdProvider());業(yè)務(wù)方只拿接口。而且這樣還可以順帶解決一個(gè)實(shí)際問(wèn)題MethodChannel 的字符串 key 在 Android 和鴻蒙之間要做 name 空間隔離否則兩個(gè)平臺(tái)的原生代碼在混淆時(shí)可能會(huì)出現(xiàn) channel 名沖突隔離機(jī)制也可以包在實(shí)現(xiàn)類里不污染業(yè)務(wù)。5.3 場(chǎng)景三模塊間依賴的延遲裝配鴻蒙應(yīng)用啟動(dòng)時(shí)系統(tǒng)對(duì)后臺(tái)任務(wù)和資源加載是有限制性策略的如果啟動(dòng)階段塞太多非必要初始化很可能會(huì)觸發(fā)系統(tǒng)的資源管控甚至導(dǎo)致首次啟動(dòng)白屏?xí)r間過(guò)長(zhǎng)。dia 的懶加載機(jī)制正好治這個(gè)病。像日志上傳、埋點(diǎn)推送、圖片緩存這類模塊我全部注冊(cè)成 lazydia.registerLazySingletonAnalyticsService(() AnalyticsService()); dia.registerLazySingletonImageCacheManager(() ImageCacheManager());啟動(dòng)時(shí)容器只創(chuàng)建一個(gè)超輕量的日志接口占位真正的AnalyticsService直到首次上報(bào)埋點(diǎn)時(shí)才觸發(fā)構(gòu)造。對(duì)用戶來(lái)說(shuō)冷啟動(dòng)更快對(duì)系統(tǒng)來(lái)說(shuō)不會(huì)在啟動(dòng)瞬間制造一堆并發(fā)任務(wù)。這里要特別叮囑一句懶加載不是白拿的必須在接口的注冊(cè)處寫明這個(gè)實(shí)例“什么時(shí)候能建什么時(shí)候不能建”。我在一個(gè)位置延遲加載了某個(gè)依賴數(shù)據(jù)庫(kù)連接的服務(wù)等到頁(yè)面調(diào)用時(shí)才構(gòu)造結(jié)果第一次調(diào)用卡了 300ms。解決辦法是給這個(gè)服務(wù)拆出一個(gè)isReady狀態(tài)配合 dia 的isRegistered方法做前置判斷確保調(diào)用時(shí)實(shí)例已經(jīng)完成了預(yù)熱。6. 踩坑記錄與排查速查表無(wú)論理論講得多漂亮真跑起來(lái)一定會(huì)遇到問(wèn)題。這節(jié)專門記錄我在鴻蒙化過(guò)程中實(shí)打?qū)嵅冗^(guò)的坑以及沉淀下來(lái)的排查思路。6.1 我踩過(guò)的四個(gè)典型坑坑一Dart SDK 版本不匹配導(dǎo)致 pub get 失敗鴻蒙分支的 Flutter SDK 版本通常落后官方主干幾個(gè)版本而 dia 或者其他最新依賴包要求更高的 SDK。報(bào)錯(cuò)經(jīng)常是The current Dart SDK version is 3.2.0, but dia requires 3.4.0.解決思路不是硬換 SDK而是去跟 dia 的 pubspec.yaml 里看到的兼容范圍取交集。我用的是environment: sdk: ^3.0.0的 dia 版本鎖到 path 依賴?yán)飭?wèn)題當(dāng)場(chǎng)消失。坑二熱重載后容器狀態(tài)殘留在鴻蒙調(diào)試器上按 R 熱重載第一次啟動(dòng)業(yè)務(wù)正常第二次再啟動(dòng)時(shí)頁(yè)面里出現(xiàn)了舊數(shù)據(jù)甚至有的頁(yè)面崩潰。排查了半天最后發(fā)現(xiàn)是 dia 容器里的單例沒(méi)有被清掉舊的 StorageService 持有舊工程的緩存路徑。解決方案就是前面說(shuō)的在bootstrap最開頭調(diào)用dia.reset()并給容器做一個(gè)冪等的初始化保護(hù)if (Dia.instance.isInitialized) return;坑三注冊(cè)順序?qū)е逻\(yùn)行時(shí)依賴缺失dia 解析是遞歸的比如OrderRepository依賴StorageService如果StorageService還沒(méi)注冊(cè)O(shè)rderRepository在構(gòu)造時(shí)就會(huì)拋 “No provider found for StorageService”。我一開始是隨意寫的注冊(cè)代碼后來(lái)改成把注冊(cè)列表拆成“基礎(chǔ)層、平臺(tái)層、業(yè)務(wù)層”三段每一段按依賴關(guān)系從基礎(chǔ)到上層排列還加了注釋。這個(gè)習(xí)慣在鴻蒙化這種多端環(huán)境下尤其重要因?yàn)椴煌钠脚_(tái)實(shí)現(xiàn)可能注冊(cè)順序不一致。坑四混合編譯下產(chǎn)物中有兩個(gè)容器實(shí)例這個(gè)坑比較隱蔽。Flutter 引擎在鴻蒙工程里可能被同時(shí)掛在 entry 模塊和某個(gè)公共庫(kù)模塊下如果 dia 的代碼被編譯進(jìn)了兩個(gè)不同的har產(chǎn)物運(yùn)行時(shí)就會(huì)出現(xiàn)“兩個(gè)容器”的假象你在這個(gè)模塊注冊(cè)的服務(wù)在另一個(gè)模塊Dia.get()拿不到。解決方法是檢查 HAP 產(chǎn)物里的 so 和 lib確認(rèn) dia 的 Dart 代碼是打在一個(gè)共享模塊里而不是多處重復(fù)編譯。這也是我前面推薦把 dia 源碼放到third_party統(tǒng)一管理的原因之一。6.2 問(wèn)題排查速查表這里整理了一張速查表按癥狀、可能原因、解決思路三個(gè)維度列出來(lái)。毫不夸張地說(shuō)鴻蒙適配 90% 的問(wèn)題都能在這張表里找到對(duì)應(yīng)。癥狀可能原因解決思路啟動(dòng)即崩日志里有No provider注冊(cè)順序不對(duì)或漏注冊(cè)檢查 bootstrap 各層注冊(cè)順序補(bǔ)齊缺失綁定頁(yè)面數(shù)據(jù)是上一輪的舊值容器狀態(tài)熱重載后未清理在 bootstrap 開頭調(diào)用dia.reset()pub get 報(bào) SDK 版本沖突dia 與鴻蒙 Dart SDK 版本不匹配改用 path 依賴鎖定兼容版本HAP 里服務(wù)無(wú)法跨模塊獲取多份編譯導(dǎo)致多容器實(shí)例統(tǒng)一產(chǎn)物模塊確保 dia 編譯進(jìn)公共包子產(chǎn)品第一次調(diào)用某服務(wù)卡頓懶加載實(shí)例構(gòu)造太慢拆分服務(wù)預(yù)熱邏輯或用isRegistered判斷狀態(tài)日志打印完整但頁(yè)面白屏Flutter 引擎與 Ability 生命周期橋接缺失檢查 EntryAbility 的 onForeground/onBackground 轉(zhuǎn)發(fā)構(gòu)建時(shí)找不到 Flutter 引擎產(chǎn)物SDK 分支與 hvigor 插件不匹配核對(duì)分支版本并清理.flutter本地緩存6.3 獨(dú)家避坑技巧最后再分享兩個(gè)純經(jīng)驗(yàn)的東西。一個(gè)是打印容器注冊(cè)清單。我常在 bootstrap 完成后把 dia 里所有注冊(cè)的接口和實(shí)現(xiàn)類打印出來(lái)一眼能看到有沒(méi)有遺漏、有沒(méi)有錯(cuò)誤綁定。這在跨端適配時(shí)幾乎是無(wú)價(jià)的功能因?yàn)槟銢](méi)法靠肉眼在一堆文件里找出隱蔽的“指向 Android 實(shí)現(xiàn)的殘留引用”。另一個(gè)是小步切換策略。別試圖一夜之間把整個(gè)項(xiàng)目從 get_it/provider 切到 dia。先挑一個(gè)模塊做試點(diǎn)比如只把存儲(chǔ)服務(wù)切過(guò)去等驗(yàn)證了這個(gè)模塊在鴻蒙真機(jī)上能跑通再逐步把網(wǎng)絡(luò)、設(shè)置、用戶中心一個(gè)個(gè)模塊遷進(jìn)來(lái)。我在項(xiàng)目里就是這樣做的第一個(gè)模塊跑了三天才穩(wěn)定后面的模塊基本一天一個(gè)。7. 結(jié)語(yǔ)一次遷移三層收益說(shuō)實(shí)話一開始做這個(gè)鴻蒙化適配的時(shí)候心里沒(méi)底生怕 dia 這種小眾庫(kù)在鴻蒙 SDK 上出幺蛾子。但跑完之后回頭看它帶來(lái)的收益遠(yuǎn)超“能上鴻蒙”這一個(gè)目標(biāo)。第一層收益是真正的多端能力同一套業(yè)務(wù)代碼Android、iOS、鴻蒙三端跑得完全一致平臺(tái)差異只在組裝層體現(xiàn)代碼修改量小到幾乎可以忽略。第二層收益是工程結(jié)構(gòu)被迫變好了為了適配我把原來(lái)散落各處的服務(wù)實(shí)現(xiàn)收斂到了各個(gè)接口背后整個(gè)工程的依賴圖變得非常干凈新同學(xué)看代碼也能很快就明白架構(gòu)邊界。第三層收益是測(cè)試成本下降因?yàn)闃I(yè)務(wù)邏輯不再依賴具體平臺(tái)實(shí)現(xiàn)單元測(cè)試直接 mock 接口就能跑不用再起模擬器。這個(gè)收益在項(xiàng)目后期特別明顯。所以如果你正在做 Flutter 鴻蒙化或者準(zhǔn)備做我建議先別急著改業(yè)務(wù)先把依賴注入的基礎(chǔ)打好。dia 是個(gè)很好的起點(diǎn)輕、穩(wěn)、可移植性極高。你在它身上投入的時(shí)間后續(xù)會(huì)在每一次多端適配中連本帶利都賺回來(lái)。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
精品视频久久区| 99色在线视频| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 欧美色图 人妻| 婷婷丁香人妻 | 丝袜视频网国产90| WWW4虎| 99国产在线 精品 视频| 日本天堂在线播放| 少妇国产不卡| 激情看片网站| 亚洲1区2区三区高清中文字幕| 欲色综合| 制服中出中文人人精品| 丁香六月婷| 国产传媒一区二区三区| 9精品久久久久| 国产黄色av大片网站| 少妇内射视频| 久久噜| 亚洲国产亚洲天堂| 夜色97| 91在线欧美| 97精品97久久| 97爱爱影院| 青青草成人视频在线观看二区| 欧美激情 亚洲色图| 亚洲精品国产无码高清| 超碰在线974| 天天淫人人妻日日色| 天天干天天操天天干天天操| 高清无码在线播放网站| 男人的天堂2018| 国产网红精品| 日本阿v天堂在线观看| 最新9久久久9免费视频| 精品久久久久,69国产成人精| 国产精品自拍xxxx| 激情综合五月| 激情综合网五月婷婷五月天| 亚洲密乳AV| 精品国产乱码久久久久久网站入口| 性交一区二区在线播放| 蜜桃久久久久久久久久久久| 绑缚麻绳人妻寝取完整版| 久久激情五月| 成人夜夜爽| 久久久久久精品免费看A级| 粉嫩av一区二区三区天美传媒 | 亚洲无码日韩电影| 国产精品一区人妻精品阁在线| 九九精品99| 国产福利一区二| 啊啊啊啊啊在线观看网址| 青青草视频爽一爽| 2019天天干天天操| 精品久久久一本一道| 免费视频a级毛片免费视频| 9l视频自拍9l九色成人| 你草精品在线视频| 偷窥自拍亚洲色图| 狠狠中文字幕| 97欧美精品综合| 88在线一区二区三区| 97超碰中文| 日本好吊色视频| 美女91在线观看| 亚洲一区二区 麻豆传媒| 黄色高清久久无码依人| 91久久久久久久| 99无码| 久久亚洲婷婷| 玖玖综合.com| 日韩精品9999| 91久久久久| 国产伊人精品在线| 人人弄人人摸| 国产A v无码专区| 少妇3P性爱自拍| 一区二区三区机械有限公司| 欧美色图成人网一区二区 | 亚洲日产专区婷婷| 久久久999国产精品| 日本精品加勒比海一区| 久草视频在线视频在线视频在线观看| 99999久久精| 99在线免费观看| 欧洲欧美视频一区二区| 搡老女人老91妇女老熟女| 日日97| 丁香婷婷色五月| 91操碰| 东京热激情视频一二三区 | 激情五月天中文字幕色| 国产精品探花色| 欧美激情中文字幕另类小说| 四虎在线播放| 色欧洲| 九九亚洲| 欧美日韩高潮喷水91| 97人亚洲综合字幕| 成人五月天丁香激情综合| 综合av社区| 美女黄频a美女大全免费皮| 一级A片女人高潮叫床| 久久婷婷苹果| 大黄片做爱的大的| 亚洲人在线| 欧美BT 亚洲色图| 强奸抽插av| 91五月天| 综合在线导航一区| 日韩av不卡在线观看| 啊啊啊轻点在线观看| 精品十八在线观看| 人爽不卡视频| 日本 情色 1区| 超碰欧美| 尤物国产一区在线观看| 91女网站| 在线观看A啊啊啊| 狠狠操狠狠插| 人人澡人人澡人人| 小少妇| 安微少妇操BBB| 天堂日本亚洲欧美| 国产精品人妻一区二区| 91|九色|国产熟女| 亚洲 欧美 另类 日韩 人妻一区| 亚洲情色在线| 精品九区| 91在线精品| 色九九九综合| 久久国内| 加勒比性爱成人在线| 免费超碰97在线观看| 日本日日色视频| 日韩成人性日韩成人性爱视频在线免费观看| 人人扣人人操| 日韩啪啪视频| 97精品一二区| 正宗无毛一线天嫩逼| 97免费免费视频网| 影音先锋少妇| 亚洲脚交| 久久大香蕉手机高清视频| 亚洲精品99999| 69一区二区三区| 天天插天天操| 玖玖爱视频网站| 国产精品久久久久无码Av网曝门| 蜜臀久久在线视频| 精品中文字幕一区二区| 东北女人的毛片| 婷婷av在线中文字幕| 91精品国产乱码| 久久精品一区一起草| 九九热精品在线| 欧美组图日韩亚洲中文字幕| 亚州欧美另类| 国产美女高潮| 人人妻人人爽人人精品| 亚洲成熟国产精品美女| 91天美免费| 国产精品自拍视频| 精品传媒在线一区| 日日夜夜精品| 日本二区不卡| 另类亚洲图色| 亚洲日韩精品在线播放| 水滴偷拍| 日韩精品作爱导航| 欧美性爱另类综合| 日韩97P| 天天做天天爱天天爽AV| 国产一区二区三区影片| 日本精品网站在线中文| 老熟女网站| 夜夜骑天天燥| 青青草中文-久久青草精品一区二区三| 91露脸熟女专区| 老女人91| av大香蕉网站| 国产一区二区三区影片| 国产资源中文字幕在线| 一级二级在线观看| 久久久久久人| 欧美日韩青操| 色小视频蜜乳| 亚洲成a人在线观看久| 亚洲色人| 深喉吞精| 国产成人亚洲精品无码古代早漏男 | 9 1果冻精品视频| 中文字幕久久精品一区| 日日夜夜骚| 青娱乐日韩无码| 日韩av免费一级电影| 国产第二页| 情色日播放AV| 另类小说五月天| 男女性感激情网站| 日本人妻中文字幕精品| 日本人妻最新在线中| 加勒比性爱成人在线| 欧美精品91| 人妻丝袜无 码视频专区| 国产AV激情无码久久无码 | 成人性爱美曰韩| 国产精品亚洲色婷婷久久久| 人妻少妇精品视频一区二区三区| 久久超碰天天| 俞拍自拍| 毛片视频白嫩| 超碰亚洲欧美日韩无| 久久久97| 在线看免费无码AV天堂的| 欧美精品一区二区少妇免费A片 | 欧美激情久久久久| 国产第二页| 四季AV一区二区凹凸精品小说| 91久热这里只有精品| 肉嘟嘟www视频在线观看高清| 日韩一级久久毛片| 精品日韩中文在线| 亚洲一区二区性爱电影| 激情综合色| 日韩一性一交一A片俄罗斯| av网站在线观看了| 精品在线观看视频在线| 色情五月婷婷| 国产免费一区二区在线A片视频| 91性高朝久久久久久久久| 国产无码精品无码| 中国AV美女| 人人操 欧美| 国产二区三区免费视频| 国产精品无码av嫩草| 91人妻最真实刺激绿帽| 超碰 另类 欧美 | 啊啊啊啊啊啊啊在线| 婷婷综合在线观看| 韩国黄色片精品久久久| 亚洲色综合| 夜夜爽爽夜夜精品视频| 婷婷伊人| 天天综合网91入口| 国产成人久久久精品免费AV| 青青草这里只有精品| 天堂男人网| 国产成人精品必看| 亚洲欧美国产日本一区二区三区| 欧美日韩久久精品爱爱| 俺也射| 一级免费精品| 中日韩免费看男女操逼大全| 激情小说在线视频| 看免费的黄片| 91视频综合| 综合色播| 激情无码日韩| 综合激情五月天| 五月婷婷激情综合| 国产精品丝袜久久亚洲不卡| 少妇天堂| 毛片久久| 亚洲第一黄色av网站| 免費黃色視頻觀看一| 天综合中文| 高潮综合网| 人妻少妇精品久久久久久| 夜夜草天天| 日本123区操B视频| 青青草视频导航官网| 91天天综合在线观看| 日韩无码第3页| 伊人丁香五月婷婷| 97香焦色区| 中文字幕三四五区| 日韩AV中文字幕电影| 国产诱惑| 中文字幕1区2区| 一区操逼日比视频| 人妻少妇久久| 精品人妻一二三| 人人操我人人干| 99久久9| 欧美色图成人网一区二区 | 久久久亚洲精品中文字幕人妻| 免费久久一级毛片大黄| 九九热超碰| 人人爽人人精品乱人伦AV| 久久久96| 旡码电影特区| 麻豆亚洲AV成人无码久久精品| 日韩黄片视频试看| 美国久久一二三四| 性色av蜜臀av色欲aV| 国产日韩精品一区二区三区| 欧美97| 成人网址在线观看| 久久久久深夜无码| 国产精品秘 福利姬在线观看| 国产熟女精品区| 人人操人人操人妻人| 亚洲第一成人影院色播| 亚洲黄色网址| 你想操日本小逼吗| 嗯嗯啊啊亚欧精品| 欧美aaaaaaa| 日韩 成人 有码| 久久久久久亚洲Av无码| 九九热九九热| 精品国产91内射久久| 少妇天堂网络| 国产黄色 A 片免费看| www.男人天堂| 国内精品伊人久久久久影院会| 亚洲色图久久成人| 国产精品乱码久久久| 久久久久久欧美精品se一二三四| 四虎AV在线播放| 婷婷五月色| 黑人性暴力毛片| 久久九九99| 伊色久人大在线| 欧美国产伊人久久久久| 射久久| 夜夜操老骚逼视频网站| 中文字幕美女91| 91色伦综合| 国产一级做a爰大片免费久久| 情色五月天就去干| 亚洲第一无码播放立川理惠| 欧美一级二级三级| 丝袜综合色图| 色色色色日本| 五月天精品| 一二三区在线| 强奸乱伦免费网站| 91精品少妇搡搡搡| 极品尤物女神在线观看| 国产精品久久久 | 亚洲欧美国产va在线播放频| 床上啊啊啊一区二区三区| 久久免费少妇| 久久啊啊啊视频| 黄色av片三级三级三级免费看| 俺去啦自拍| 中亚精品极乱| 青青操综合网| 黄片视频观看| 超碰偷拍| 白丝少妇一区二区| 熟妇熟女视频一区二区三区| 久久av一级av少妇av高潮| 欧美色图99| 久久亚州高清| 六月丁香五月婷婷| 午夜视频好爽啊| 青青操在线视频| 久jiu久神马影院| 99久久e免费热视| 99999亚洲| baiduhicn.com。| 99热只有| 男女一级A片大黄,一进一出| 色就色综合| 精品少妇99| 一二三四视频在线社区中文字幕| 天天干2019| 日韩精品视频在线观看一卡二卡| Sekablack无码一区| 校园春色美腿丝袜 | 国产精品乱码久久久| 老熟妇一区二区三区啪啪| 日韩人妻少妇中文字幕| 六月婷婷激情| 五月天色图| 约操熟妇| 亚洲色图欧美视频| 成人乱码一区二区三少妇| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 欧美论理片| 人妻精品一区二区在线| 免费观看国产小粉嫩喷水精品午| 热99这里有精品综合久久| 黄色区免费观看中文字幕| 天天干,天天日| 区二区亚洲婷| 国内毛片热久久思思热| 日韩午夜精品一区二区三区电影| 国产无码久久高清| 日本在线伊人啪啪| 五月天社区| 黄色性爱网网| 欧美色图 人妻| 伊人久久大香蕉线AV五月天| 久久国产精品91| 狠狠干综合| 人人透人人操| 国产精品探花色| 九月激情婷婷| 日韩亚洲中文字幕在线| 操操操日本的逼| 精品高清一区二区三区三州| 中文字幕一区二区三区高清| 国产精品探花在线| 午夜男女爽爽大片免费观看| 综合另类| 亚洲综合另类小说色区亚洲成av人片在www| 日婷婷| 国产精品麻豆成人av| 国产亚洲福利第一页丝袜| 无码78| 超碰在线人妻中文字幕| 日韩Va亚洲va欧美Ⅴa久久| 色噜噜精品一区二区三| 亚洲另类在线观看| 96精品在线| 打av高清| 精品一区二区三区四区女| 激情自拍 校园春色| 91欧美美女日韩国产婷婷| 精品国产乱码久久久久久蜜臀| 黄色大片一区二区密桃丝袜| 国产中文福利| 久久鲁夜| 99热这里只有精品8| 欧美大香蕉专区网| 日韩免费看黄片| 成年女人黄网站| 国产伦精品| 情侣操 逼视频99| 91男同| 黑人精品XXX一区一二区| 在线免费试看60秒| 岛国激情视频软件| 国产91福利小视频在线观看 | A 天堂| 韩国嫰模上门援交视频| 人澡逼| 欧美情色贴图| 中文字幕伊人| 日韩在线观看AV| 四虎免费看黄| 夜夜操二区| 97视频7| 日本最新免费韩国1区2区视频播放| 一区二区三区 丝袜高跟| 制服中出中文人人精品| 欧美人妻少妇| 婬女免费一二三区A片| 蜜桃久久久久久久| 欧美天天搞| 国产人伦a片信息免费片| 女同亚洲欧美一二三区久久电影| 国产AB视频| 日产操逼| 男人夜色天堂ss| 青青草久草AV| 午夜精品久久久| 亚洲日韩国产欧美综合v| 欧美男人一区| 怡红院成人视频| 亚洲97精品| 极品色www影院| 亚爽爽爽爽爽爽爽爽| 国产精品网址| 97精品| 丁香五月天啪啪| 日日AAvv| 免费看久久久性性| 成年人免费观看网站| 久草综合京东| 久久久久国色αv免费观看| 男人女人18禁片免费看网站| 九九无码久久精品视频| 精品一区二区综合熟妇| 大香樵伊人网| 国产精品久久泡妞网站| 开心激情婷婷| 欧美青青草视频| 变态乱伦伪娘灌肠一区二区| 夜夜嗷嗷一区二区| 99色热国产视频精品| 插入综合网| 国产精品操| 天天插天天射| 婷婷爽人人婷婷爽视频| 天堂蜜桃无码视频一区二区| 精品一区二区三区麻豆| 91xingse| 欧美成年人性爱视频免费观看| av优播| 婷婷操视频| 超碰午夜在线| 性色亚洲| 欧美97在线观看| 伊人操| 久久一二区四| 九九九热| 热久日综合| 欧美一区二区男人天堂| 蜜乳AV免费观看| 91熟女综合| 亚洲码在线中文在线观看| 另类av天堂| www.黄色在线| 精人妻一区二区三区| 九九成人视频| 久久久久久亚洲Av无码| 欧美 亚洲 91| 国产男人又猛又粗又爽| 日躁天天爽爽| 免费在线视频97| www99热| 97色涩| 国产大学生高潮在线播放 | 亚洲āv网址在线观看| 亚洲中文字幕噜噜噜久久久| 土豪酒店各种姿势玩弄极品幼稚| 天堂种子在线www网资源| 欧美综合1性辶| 久九九九九九九九热| 在线看的av| 中文字幕一二三av| 久久av网| 国产精品女生av| 久久最新视频免费观看| 无套内射性感少妇视频| 日韩美女啪啪一区| 人人妻人人澡人人爽久久av| 少妇三P| 岛国黄| 东京热毛片177b2viP| 欧美无圣光在线| 99久在线精品99re8| 肏逼视频日本| 91综合无码| 欧美色图私拍91| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 少妇精品久久久八区九区| 91精品国产高清久久久久久,亚洲成人| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 五月天激情影院| 人人弄人人摸| 日1区2区3区2020| 熟妇艹鸡八| 天天爱综合网| 日韩三级在线观看mp4| 婷婷月色| 国产高清成人传媒影视| 高清无码在线播放网站| 人人操人人摸人人骑| 夜夜高潮夜夜爽夜夜爱爱一区 | 九九热精品视频六| 亚洲欧洲无码97久久精品| 天天综合精品| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 人人贴人人摸| 天堂v无码免费视频| 91国产丝袜白虎| 九热大香蕉| 999狠狠综合| 国产精品成人无码a v毛片| 另类欧美色| 视频在线观看青青99国产| 操少妞在线视频| 99啪啪视频| 欧亚在线视频| 91精品久久综合熟女| 色成人Www精品永久观看| 亚洲 欧美 制服 另类 自拍| 日韩欧洲操屄视频| 精品无吗m| 中文字幕福利视频一区二区三区在线观看| 色悠久久久av| 啊啊啊轻点在线观看| WWW美腿丝袜香蕉中文| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 强奸乱伦大香蕉网| av天堂电影网| 性欧美91| 日韩兔费看黄片| 少妇综合网| 激情婷婷综合久久| 伊人黄色片| 狠狠色噜噜狠狠狠狠狠色综合久久| 天天搞在线综合网| 999岛国大片| 人人操AV| 丰满人妻一区二区三区在线| 欧美久久婷婷| 熟女久久久| 超碰超碰超碰超碰的大鸡吧操黑丝袜| 成人一二三区| 中文字幕一区二区三区50路| 91丝袜| av网站国产主播在线| 国产三级资源在线观看| 91 亚洲 欧美 日韩 国产 综合| 偷拍三区| 最新av网站在线观看| 欧洲性爱无码区| 日韩欧美操逼xxx| 在线综合色| 亚洲精品99| AV大香蕉| 又摸又舔在线观看网站| 超碰是碰在线观看| 久久久久久久人妻丝袜| 特级毛片特黄久久免费看 | 99热日| 欧美日韩亚洲天堂| 亚洲精品一二区| 国产最火爆久久国产网站网站| 岛国AB视频| 亚洲精品视频二区| 中文字幕一区二区三区蜜臀| 青青草字幕AV| 国产精品久久久久婷婷二区次| 翔田千里一区二区三区奶水| 国产一级内射无挡观看| 色播综合| 欧美内射少妇| 日韩欧美中文字幕搭讪巨乳美人妻视频| 一本大道青青| 欧美在线色| 东京热男人的天堂| 国产做?爰片久久毛片?片美国| 天天看片天天爽| 国产精品久久久久久久久久二区三区| 日本成熟少妇A∨网站| 91快色色色色色| 最新一二三区视频| 日日摸日日碰夜夜爽视频| 欧美精品宗合| 五月天啪啪| 天天日熟妇| 天天色天天干天天爱| 新版天堂中文资源8在线| 久久国99999| 大香蕉手机在线| 日韩 欧美 另类 人妻| 五月综合激情网| 成人综合网 欧美| 精品少妇一区二区三区| 美女操逼福利视频| 欧美熟妇亚洲版| 91AV入口| 一区二区三区网站日日骚| 国内黄色精品| 肏逼视频日本| 操人无码| 少妇激情一区二区三区视频| 精品人人插人人操| 天美传媒精品久久视频| 国产 亚洲 丝袜 制服| 大香蕉男人的天堂| 性饥渴少妇av无码毛片| 欧色综合| wwwxxx日本爽| 另类 综合 日韩 欧美 亚洲| 操逼视频国产无套| 91亚洲欧美色图| 蜜乳AV免费观看| 少妇人妻精品| 成年人三级黄色片视频| 东京热一区二区三区四区五区六区| 人妻人妻天天碰| 国产精品干干干| 丝袜色综合| 欧美亚洲中文字幕| 国产欧美另类久久久精品课程| 成人看片网站| 91色色网站| 97色爱| 日本无码1| 欧洲精品欧洲精品| 色九区| 欧美综合91| 密臀在线免费观看| 亚洲国产成人7777| 欧美高清性猛交| 亚洲精品一二区| 中文字幕88av在线| 亚洲一欧洲中文字幕在线| 色九九九综合| 亚洲欧洲网站免费观看| 97爱亚洲| www.高清无码诱惑一区.com| 欧美日韩另类在线| 欧美综合色综合| 婷婷久草一区二区三区| 亚洲精品一二牛牛| 91亚洲欧美综合高清在线| 99久久久久久久久| 熟女久久久| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 伊人色综合网电影| 国产在线播放成人免费| 东京热一区二区三区四区五区六区| 波多野42部无码喷潮在线观看 | 97 九色| 99精品在线播放| 久久激情婷婷| 久久久久久久久久久人妻| 久草网站免费在线观看| 亚洲男人天堂手机版| 久久久久成人蜜桃精品| 国产一区在线观看无码AV | 三级片网站在线播放| 五月婷亚洲精品天堂| 日本免费一区二区不卡| 97干com| 2017av无码免费无线播| 任你干在线视频| 亚洲色啪| 人人操人人摸人人看人人干| 97干在线视频| 国偷自 一区| 国产大片精久久久久久| 99无码视频| 18禁的网站在线| 一级毛片电影免费看| 18+91网站| 啊啊啊啊啊啊啊啊啊啊在线观看| 乱精品一区字幕二区| 久久精品店| 97干97色| 亚洲天堂资源在线| 一区二区三区在线日韩影院观看| 久久九七| 久久久啊啊| 亚洲成熟国产精品美女| 91影库| 婷婷婷婷婷婷久久久久| www欧美91| 久久 久久国内精品亚洲| 国产suv精品一区二区四| www.夜夜操| 欧美综合区| 午夜影美女日鸡鸡天天视频国产| 五月天婷婷在线看| 麻豆天美91| 人人操人人肉久久精品| 伊人96在线| 欧美曰韩国产精品| wwe 天天干.com| 色哟哟国产精品免费网址| AV九九| 99热精品在线| 9色在线| 曰韩成人免费视频| 人、人、摸,人、人、草| 久久av成人无码免费| 日本丝袜人妻内射| 欧美亚洲另类在线蜜桃| 精品中文字幕一区二区| 日本东京热加勒比久久| 天天日天天搞天天干| 国模无码人体一区二区三| 日韩精品字幕| .精品人妻一区二区三| 日韩在线欧美精品一区二区| 三男一女不戴套的A片| 日韩 国产 欧美自拍| 亚洲电影中字一区二区| 亚洲?V无码专区在线电影| 久久男人的天堂| 伊人热综合| 涩涩涩综合| 激情 欧美 亚洲 小说| 超碰诱惑| 91美女网站| 淫荡网址| 少妇无码av专区线| 久久久久成人亚洲国产| 强奸乱伦中文字幕AV| 大香蕉黄色一区| 插入综合网| 亚洲射综合网| 久久精品91| 夜夜爽夜夜摸夜夜操免费视频| 性高潮久久久久久久久久久| 97Ai亚洲| 99无码狠狠久久| 日逼逼免费看| 亚洲最新中文字幕免费| 欧美亚洲日韩人妻在线观看| 久久伊人在线五区| 97国产综合欧美| 亚洲色图a| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 丝袜综合网| 久久综合国产精品国产| 亚洲h片在线免费观看| 欧美中出1| 暖暖精品二区三区观看| 超碰日本97美女人妻人人玩人人爱| 99.色网| 亚洲97网站| 永久免费观看的毛片的网站| 亚洲中文日韩精品| 91精品电影18| 熟妇一区,二区,三区。| 国产精品美女久久久久久网站| 2019天天干天天操| 97精品国产97久久久久久| jiujiujiujingpin| 国产内射爽爽大片| 午夜黄色免费在线观看| 日han少妇无码| 熟妇色99| 在线观看成人性爱免费小视频| www久久久| 欧美熟女丝袜| 欧美成人性爱视频在线播放| 4399成人黄A片| 综合97亚洲| 国产精品白领在线观看| 操逼片中文| 91嫩草欧美| 屁股久久久久久| 久久这里只精品99re66图| 啊啊啊啊啊操我视频| 婷婷性网| 熟女精品va中文字幕| 国产夫妻一区二区| 91熟女.com| 人妻干天天| 大香蕉伊人亚洲| 久久无码精品| 婷婷五月天激情小说| 91欧美高清| 日韩三级性| 日本一区二区三区午夜观看| 九九aV| 蜜桃色院一区久久| 国产精品懂色tv影视免费观看| 大香蕉AV在线| 热G综合热G中文| 超碰在线观看av不卡| 欧美熟女激情| 狠狠久久手机视频精品| 色妹子A V| 久久老女人| 人人喜人人妻| 操国产高清| 青娱乐av在线| 黑人免费福利视频| 天天干天天日天天射黄色大片 | 欧美精品自慰系列寂寞少妇| 骚逼自拍99| 国产树林里野战在线看| 伊人在线大香蕉二。| 台湾成人无码AV| 欧美亚洲涩涩| 亚洲国产成人精品无码专区| 热天堂一区二区| 美国日韩黄片| 超碰人妻中文在线| 18禁免费视频| 97精品网站| 色婷婷影院| 校园春色 欧美| 任我爽视频在线观看| 日韩日本欧美在线观看| 久久久久久久久久黄色网 | 丝袜美腿诱惑亚洲欧美视频在线观看 | 狠狠入| 夜夜嗨AV一区天天| 91人妻人人澡人人爽人人精品| 中文字幕片| 天天插夜夜操| 精品一区99999| 亚洲成人综合在线| 91视频综合网| 传媒免费一区二区三区| 亚洲色图亚洲无码强奸乱伦| 9久9久9久9久视频网站| 992这里有精品| 日韩免费av片高清无码| 亚洲成人妻日韩在线| 黄色电影在线播放综合网站| 后入福利视频| 深田咏美亚洲精品福利社| 日韩欧美蜜桃精品久久中文字幕久久| 九九亚洲视频| 另类图片欧美激情综合| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 精品女同一区| 色97| 亚洲国产精品成人综合| 99精品伊人| 爱射综合| 成人av福利在线观看| 日日干夜夜操视频h| 永久免费发布性爱网| 成人性交免费视频| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 久污| 久久久久亚洲Av无码专区老牛影视| 91爰爱欧美| 亚洲激情在线| 宅男影院久久久,99| 少好三P| 99re这里只有精品3| 国产中文字幕曰本毛片| 日韩av在线精品观看| 中出20p| 久久欧洲| 精品人妻一区二区视频| 91性色| 2020天天色综合| 国产四虎在线| 日本综合色图| 色婷婷视频| 夜夜爽夜夜| 欧美黑人日韩少妇色情| 国产盗摄美女如厕大神作品在线观看| 少妇干B| 91国产操逼视频| 亚洲高清综合网| 亚洲怡春院| 午夜福利区| 91女人的网站| 五月天婷婷基地| 麻豆综合一区av| 天天网综合| 亚洲精品国产拍免费91在线| 精品久久大胆人体| 久久久av爱| 蜜桃视频一区二区三区在线观看| 91色鬼| 成人网欧美风情| 亚洲有薄码区日本系列中文字幕| 吻戏激情性巴克| 婷婷五月天影院| 色哟哟的毛片| 你操综合| 欧美极品女人的天堂| 91ise欧美| 九九九九88| 亚洲少妇色图自慰直播| 丝袜喷水在线| 亚洲AV乱码专区国产噜噜亚洲 | 超碰调教97| 国产精品一二三区福利| 色色操| 日本天天操| 欧美精品四区| 一起草日韩| 国产精品美女久久久久AⅤ国产馆| 一级黄色性爱裸体视频| 一区AV| 7777奇米影视久久| 亚洲欧美色图| 亚洲麻豆av一区二区| 欧美欧美啪啪视频| 大香蕉免费3| 一区二区不卡视| 日韩在线观看三级电影| 亚洲国产精品无码AV久久| 中日韩免费看男女操逼大全| 夜草网站| 翔田千里Av在线| 天天看夜夜看日日干| 搡老熟女免费视频 | 亚洲免费97免费| 久久亚洲人妻| 中文子幕一二三| 亚洲综合嫩| 97超碰护士| se吧提供国产乱老熟视频胖女人 | 黄片在线免费在线观看| 精品久久久高清无码| 中文自拍欧美影视| 青青在线视频日韩欧美| 极品欧美一区二区三区| 人妻在线视频| 婷婷五月在线视频| 另类 综合 日韩 欧美 亚洲| 天天日骚逼熟女| 91丝袜美女视频| 久久精品中文字幕观看| 国产成人网站在线观看| 欧美 亚洲 大香| 9997se| 特色a在线上| 国产精品一级特黄aaa大片在线观看| 99精品在线播放| 久久天天躁日日躁狠狠躁| 中文字幕午夜精品久久久| 91热色| 国产男女边吃边摸视频网站| 国产精品自在线发布| 日本天天操| 日韩综合97P| 激情黄色片在线观看| 亚洲αv一区二区三区| 青青欧美在线| 日韩91网| 大学生口爆吞精| 天天看综合网| 亚州春色| 1769一区| 熟妇在线视频一区二区| 亚洲精品一卡二卡三卡福利视频网站 | www. 男人天堂成人在线| 天天看天天日天天操| 人人干人人搞人人摸| 欧美另类自拍| 操逼网站网站| 性吧在线视频| 久久久女人| 日韩乱伦AⅤ| 炮色五月| 97在线视频免费| 密乳无码| 欧美91在线+|+欧美| 亚洲AV麻豆Aⅴ无码电影一| 久久久九九网站| 青操影院| 国产精品视频一区二区三区八戒| 麻豆天美久久91| 9久久精品| 国产成人+综合亚洲+天堂| 久久爱超碰网| 大香焦A片| 日韩钢筋无码高清啾啾啾| 啊啊啊啊啊啊在线观看| 色婷婷丁香五月| 欧美日韩欧美| 国产动漫操逼视频| 偷窥自拍亚洲| 亚洲国产激情国产av| 男人的亚洲天堂| 探花在线免费观看视频国产一区| 国产精品视频播放| 国产成久久综合片| 综合亚洲情色| 99re在线| 天天欧美色| 亚洲天堂在线怕怕视频| 日本久久久久久久久| 免费视频97| 偷拍网站久久男女男| 亚洲一区中文字幕| 91精品丝袜在线观看| 大香蕉草草| 久久精品国产亚洲AV无码电影| 蜜乳av一区二区三区四区不卡| 亚洲精品官网在线观看| 嗯嗯啊好大| 天天天天天天天天天天干美女| 欧美最大综合网| 日韩一级特黄av毛片| 一本色道久久综合狠狠操| 亚洲成成熟女人综合一区二区| 国产亚洲深夜激情| 日韩精品怡红院| 国产高清成人传媒影视| 色老大| 亚洲熟妇自偷自拍另欧美| 免费观看日本操逼视频| 少妇高潮99p| 国产女同在线观看视频| 超碰久久草| 欧美亚洲| 国产黑白丝在线| 久热伊人99re| 在线A日本| 深夜激情| 国产一区二区三区不卡手机在线| 青青免费在线视频一区| 青青伊人久久| 久久XX| 国产最火爆久久国产网站网站| m欧洲一级午老| 婷婷综合在线| 国产av激情无码久久天堂| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 色汉综合| 伊人国产视频| 亚洲精品日韩国产欧美| 天久久久噜噜噜久久国产精品爽爽| 亚洲美女30b| 狠狠色丁香| 国产精品诱惑| 久久久久久久久国产| 神马久久久久眼| 欧美特大黄一级片片免费| 日日操夜夜操天天操免费观看麻豆| 偷拍超碰| 欧苏综合色综合| 高清孕妇孕交| 熟女欧美日韩综合婷婷| 少妇人妻太紧太深av| 国产精品乱码久久久| 天天综合网~91入口| 日韩精彩免费| 国产成人精品日本视频| 日本人妻中文字幕精品| v91av| 国产又长又大又粗的视频| 天天日老熟妇| 99久re热视频精品98| 福利视频一区二区微拍| 色综合一本| 9I1性色影院| 亚洲欧洲激情| 福利天堂| 国产精品九9| 欧美夜夜狠| 99久久网站| 91动漫操逼视频| 黄色香蕉视频网站一区| 欧美激情综合| 好吊色综合| 少妇熟女视频一区二区三区| 99蜜桃臀久久久欧美精品网站| 久久久久97| 国产性久久久| 久久免费99精品久久久久久| 国产高清成人免费视频| 亚洲自拍青操视频| 91大神精品长腿在线观看网站| 亚州五月| 麻豆天美AV传媒第一页| 麻豆AV短剧| 97露脸精品丝袜| 久久综合中文国产| 啊啊啊啊一区| 亚洲精品一区中文字幕乱码| 91黑人无码激情在线| 中文自拍欧美影视| 午夜超爽| 久久av一级av少妇av高潮| 亚洲日本激情| 青青青国产手线观看视频2| 青娱乐休闲视频在线观看| 亚洲九九九| 麻豆久久精品亚洲精品88| 亚洲骚逼少妇| 久午视频| 久久人| 伊人97| 欧美性夜| 精品久| 日本潮催一卡操| 欧美日韩大香蕉| 高清国产无码av| 国产对白刺激视频| 福利视频香蕉免费一区二区在线| 999999精品| 日韩一级性爱无码| 狠狠操官网| 在线欧美69V免费观看视频|