亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

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

Flutter鴻蒙化遷移實(shí)戰(zhàn):用dia依賴注入實(shí)現(xiàn)無感多端適配 最近 Flutter 社區(qū)里最熱鬧的事就是鴻蒙原生適配這條賽道。我手頭正好有個(gè)老項(xiàng)目核心依賴注入層用的是 dia 這個(gè)輕量庫趁熱把它遷到了 OpenHarmony 的 Flutter 分支上。整個(gè)過程比想象中順但也踩了不少教科書里不會(huì)寫的坑。這篇指南就是把我摸出來的路數(shù)完整復(fù)述一遍為什么選 dia 做解耦底座、它憑什么能“無感”橫跨 Android/iOS/鴻蒙三個(gè)平臺(tái)、真正的鴻蒙化適配要改哪些文件、以及構(gòu)建和運(yùn)行時(shí)會(huì)遇到哪些詭異問題。目標(biāo)讀者很明確正在做 Flutter 鴻蒙化遷移、或者想在多端工程里引入依賴注入的開發(fā)者。看完你能直接照著抄不用再拿著 pub 上的老教程來回試錯(cuò)。1. 為什么偏偏是 dia鴻蒙生態(tài)下的依賴注入選型老規(guī)矩先聊清楚“為什么是它”。依賴注入在 Flutter 生態(tài)里早不是什么新鮮詞get_it、provider、riverpod 滿天飛。可在鴻蒙適配這個(gè)場景里選型邏輯和純 Android/iOS 完全不同搞不好后面整個(gè)遷移都會(huì)卡殼。1.1 Flutter 鴻蒙化的現(xiàn)狀與痛點(diǎn)OpenHarmony 對 Flutter 的支持路線這兩年走得很快官方 SDK 分支已經(jīng)能跑起來不少純 Dart 項(xiàng)目但生態(tài)深度和安卓沒法比。最直觀的痛點(diǎn)有三個(gè)一是很多熱門的 pub 包沒做 OHOS 平臺(tái)適配尤其帶原生插件 (MethodChannel、FFI) 的基本一編就掛二是指標(biāo)采集、日志SDK、路由跳轉(zhuǎn)這類基礎(chǔ)組件沒有鴻蒙實(shí)現(xiàn)全得自己補(bǔ)三是構(gòu)建鏈路復(fù)雜經(jīng)典工程用 hvigor 編 HAP 包調(diào)試工具鏈和 Android Studio 那套完全是兩條路。然后你再把“工程解耦”這個(gè)訴求疊加上來。大多數(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è)問題的唯一思路就是在架構(gòu)層引入“面向接口編程 依賴注入容器”讓業(yè)務(wù)代碼只認(rèn)抽象不認(rèn)實(shí)現(xiàn)。1.2 dia 與 get_it、provider 的取舍我在 dia 之前先用過 get_it也試過 provider。get_it 確實(shí)強(qiáng)大全局注冊、異步加載、作用域、自動(dòng)注冊擴(kuò)展都有但它太重了。重到什么程度它的注冊風(fēng)格偏命令式你得在代碼里到處寫getIt.registerSingleton這對侵入性要求高的鴻蒙適配很不友好。provider 則是一套 Widget 樹狀態(tài)方案跟 DI 容器的定位壓根不是一回事。你當(dāng)然可以用它做服務(wù)定位但把邏輯和 UI 狀態(tài)綁定在一起跨端遷移時(shí)牽一發(fā)動(dòng)全身。dia 的定位剛好是那個(gè)最優(yōu)解它是一個(gè)純粹的、無 Widget 綁定的容器實(shí)現(xiàn)核心 API 就幾個(gè)注冊、解析、移除、重置。代碼量小、零第三方依賴、純 Dart 編寫。最關(guān)鍵是它的注冊和獲取方式天然支持“類型到實(shí)例”的映射這讓鴻蒙適配可以做到非常干凈——需要替換某個(gè)實(shí)現(xiàn)時(shí)只在組裝層 (composition root) 改一行業(yè)務(wù)模塊全程無感。特性diaget_itprovider是否依賴 Widget 樹否否是支持類型映射解析是是弱容器生命周期管理支持重置與釋放部分支持無侵入性極低僅組裝層注冊中調(diào)用處需引定位器高UI 包 Provider鴻蒙移植成本純 Dart幾乎為零需要處理擴(kuò)展包兼容性需配合全局狀態(tài)改造1.3 dia 鴻蒙化后的價(jià)值無感替換與極端解耦“無感依賴注入”這個(gè)詞聽著玄其實(shí)說透了就一句話調(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è)評價(jià)我理解是兩層意思。一層是模塊邊界干凈每個(gè) feature 只暴露接口實(shí)現(xiàn)類全部下沉到 assembly 目錄另一層是構(gòu)建產(chǎn)物干凈dia 沒有碰任何 Dart SDK 內(nèi)部能力編譯期不需要代碼生成。2. dia 的核心機(jī)制解析容器、注冊與自動(dòng)裝配很多初學(xué)者用 DI 庫只會(huì)調(diào) API不理解容器在內(nèi)存層面到底做了什么遇到問題就抓瞎。我在鴻蒙適配時(shí)想改一個(gè)注冊策略就是因?yàn)楦闱辶藱C(jī)制才能對癥下藥這塊必須展開講。2.1 容器是怎么設(shè)計(jì)的dia 的容器本質(zhì)上是一個(gè)類型到實(shí)例工廠的映射表類似MapType, InstanceFactory。它不是簡單地把對象塞進(jìn) Map而是維護(hù)了一條“如何創(chuàng)建這個(gè)對象”的指令鏈用哪種構(gòu)造函數(shù)、是否需要懶加載、是否需要單例、依賴的子服務(wù)有哪些。這個(gè)設(shè)計(jì)有個(gè)隱藏優(yōu)勢Dart 的泛型在運(yùn)行時(shí)是真實(shí)存在的類型Dia.getFoo()傳進(jìn)去的Foo可以直接作為 Map 的 key不需要像 Java 那樣搞 String 字符串 key 的注冊表。這也是 dia 能保持輕量的原因之一。對比傳統(tǒng)new方式這塊邏輯上的差別太大了。傳統(tǒng)寫法里StorageServiceImpl的構(gòu)造過程散落在各個(gè)調(diào)用點(diǎn)以后換實(shí)現(xiàn)要一個(gè)個(gè)找。dia 把“怎么構(gòu)造”這件事統(tǒng)一收口到容器里調(diào)用點(diǎn)只需要說“我要一個(gè) StorageService”。鴻蒙化時(shí)你只需要保證 OHOS 環(huán)境下注冊的工廠能正常構(gòu)造出 OHOS 實(shí)現(xiàn)其他代碼一行不用改。2.2 注冊與解析的工作原理dia 的解析流程一條鏈路大致是拿到類型 → 查映射表 → 獲取工廠 → 按策略創(chuàng)建實(shí)例 → 若依賴其他服務(wù)則遞歸解析 → 返回結(jié)果。以一段典型的注冊代碼為例// 初始化容器 final Dia dia Dia.instance; // 注冊接口到具體實(shí)現(xiàn) dia.registerStorageService(() OhosStorageService()); // 注冊單例 dia.registerSingletonAppConfig(AppConfig()); // 懶加載注冊首次使用時(shí)才構(gòu)造 dia.registerLazySingletonApiClient(() ApiClient( config: dia.getAppConfig(), ));這里的細(xì)節(jié)我后來才琢磨明白。register和registerLazySingleton的主要區(qū)別不是“內(nèi)存占用”而是構(gòu)造時(shí)機(jī)。鴻蒙設(shè)備上你希望 AppConfig 這種啟動(dòng)就要用的配置對象立刻創(chuàng)建那就注冊成 eagerApiClient 這種耗資源的網(wǎng)絡(luò)客戶端最好等業(yè)務(wù)真正調(diào)網(wǎng)絡(luò)接口時(shí)才創(chuàng)建就注冊成 lazy。2.3 從 Dart 到鴻蒙dia 的可移植性判斷判斷一個(gè) Dart 包能不能跑在 OpenHarmony 的 Flutter SDK 上我在遷移時(shí)總結(jié)了一套標(biāo)準(zhǔn)pubspec.yaml 里的依賴是否全部是純 Dart 包有沒有flutter:以外的基礎(chǔ) SDK 能力引用代碼里是否用了dart:ffi、dart:mirrors。mirrors 在 release 編譯模式直接不可用FFI 在鴻蒙上需要重新鏈接原生庫是否依賴了 Flutter 引擎的原生 API比如MethodChannel調(diào) Android/iOS 原生模塊。dia 在這三條全部命中安全性它的 pubspec 里幾乎只有sdk: flutter全程只用了dart:collection和dart:async這些通用庫。這就是為什么它能做到“鴻蒙化適配幾乎零成本”——不是我們做了多大改造而是它一開始就沒有綁死任何平臺(tái)能力。提示如果你打算遷移其他 Flutter 庫先按上面三條標(biāo)準(zhǔn)做個(gè)“可移植性體檢”比直接改代碼高效得多。我見過有團(tuán)隊(duì)把一個(gè)重度依賴 path_provider 的包硬遷到鴻蒙改了一周最后還是換成自己寫文件管理接口。3. 鴻蒙化適配的前置準(zhǔn)備動(dòng)手改代碼之前先把環(huán)境和依賴梳理清楚。這塊沒弄好后面編一個(gè)錯(cuò)一個(gè)而且錯(cuò)誤信息還特別反直覺。3.1 確認(rèn) Flutter SDK 的鴻蒙分支OpenHarmony 官方社區(qū)維護(hù)了一份適配鴻蒙的 Flutter SDK 分支它和標(biāo)準(zhǔn) Flutter SDK 的主要差異在引擎層包含了鴻蒙的渲染適配、Ability 生命周期橋接以及針對 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 工程的三種方式引入方式適用場景優(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)證過的 dia 版本固定下來dependencies: dia: path: ./third_party/dia這個(gè)操作還有個(gè)附加收益鴻蒙工程里經(jīng)常需要同時(shí)調(diào)整多個(gè)三方庫統(tǒng)一把源碼放到third_party目錄下維護(hù)起來比讓每個(gè)開發(fā)者各自改 pub 緩存清晰太多。3.3 依賴與混編檢查哪些庫會(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)代理的庫部分序列化庫、ORM 庫在 Dart 里用了編譯期代碼生成 (build_runner) 還好一旦運(yùn)行時(shí)反射就麻煩了涉及dart:io的庫鴻蒙分支對dart:io的支持已經(jīng)不是死角了但個(gè)別能力比如網(wǎng)絡(luò)套接字的底層實(shí)現(xiàn)仍可能和 Linux 內(nèi)核表現(xiàn)有差異遇到再說先不主動(dòng)踩與函數(shù)式編程、流式處理相關(guān)的庫比如 rx_dart、fpdart 這類基本都是純 Dart通常沒問題。dia 完全不在攔路虎清單里這也是我敢拿它當(dāng)“鴻蒙化適配樣板間”的原因。你完全可以用它驗(yàn)證整條鴻蒙適配鏈路是否通暢而不需要先解決一堆原生插件兼容問題。4. 實(shí)操核心適配步驟與關(guān)鍵代碼前面鋪墊了那么多現(xiàn)在進(jìn)入正題。我會(huì)按完整流程帶你走一遍創(chuàng)建 OHOS 工程、引入 dia、做雙端注冊、寫帶平臺(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)大致長這樣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)問題。hvigorfile.ts里還要配置好 Flutter SDK 的路徑。如果flutter命令和鴻蒙分支不匹配第一輪構(gòu)建就會(huì)失敗而且錯(cuò)誤信息往往指向一個(gè)和真正原因無關(guān)的文件。4.2 第二步完成 dia 容器的雙端注冊這一步是鴻蒙化適配里最“核心”的細(xì)節(jié)也是很多人在普通 Flutter 項(xiàng)目里沒搞透的容器一定要在 UI 構(gòu)建之前完成組裝。我在main.dart里寫了一個(gè)獨(dú)立函數(shù)來組裝Futurevoid bootstrap() async { WidgetsFlutterBinding.ensureInitialized(); // 初始化 dia 容器 final Dia dia Dia.instance; dia.reset(); // 確保熱重啟時(shí)容器是干凈的 // 注冊基礎(chǔ)服務(wù) dia.registerSingletonAppConfig(AppConfig.load()); dia.registerLogger(() PrettyLogger()); // 注冊平臺(tái)相關(guān)服務(wù)按當(dāng)前環(huán)境選擇實(shí)現(xiàn) dia.registerStorageService(() OhosStorageService()); dia.registerDeviceInfo(() OhosDeviceInfo()); // 注冊業(yè)務(wù)倉儲(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()在熱重載場景下非常關(guān)鍵鴻蒙調(diào)試器支持熱重載如果容器狀態(tài)在上一次會(huì)話里殘留重載后就會(huì)跑出“幽靈單例”排查起來極其痛苦。第三容器組裝是異步的但沒有提前 await我用.then包裹啟動(dòng)保證 runApp 之前所有注冊已完成。4.3 第三步用 dia 切換平臺(tái)實(shí)現(xiàn)類剛才注冊代碼里出現(xiàn)了OhosStorageService()這就是鴻蒙適配里“無感”二字的實(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 階段容器里注冊的是AndroidStorageService到了鴻蒙階段你不需要碰OrderDetailPage任何一個(gè)字符只需要在bootstrap里把AndroidStorageService換成OhosStorageService。這就是無感替換的核心邏輯。更關(guān)鍵的是業(yè)務(wù)服務(wù)之間也通過 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在容器里有對應(yīng)的 OHOS 實(shí)現(xiàn)OrderRepositoryImpl完全不需要意識到自己跑在哪個(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 插件版本匹配我見過有人用標(biāo)準(zhǔn) Flutter SDK 去跑 HAP 構(gòu)建報(bào)了一堆莫名其妙的缺少引擎符號的錯(cuò)二是首次構(gòu)建時(shí)鴻蒙分會(huì)加載 Flutter 引擎產(chǎn)物網(wǎng)絡(luò)不好會(huì)等很久但別中途強(qiáng)殺進(jìn)程強(qiáng)殺后緩存半殘第二次構(gòu)建會(huì)查不出來問題。構(gòu)建通過后用 hdc (HarmonyOS Device Connector) 安裝到真機(jī)或模擬器hdc install entry/build/default/outputs/default/entry-default-unsigned.hap運(yùn)行起來后不要急著點(diǎn)頁面先在日志里確認(rèn) dia 是否正確完成了注注冊。我習(xí)慣在 bootstrap 末尾打一行容器健康日志dia.healthCheck(); // 檢查關(guān)鍵服務(wù)是否都注冊到了容器如果某個(gè)接口沒有注冊實(shí)現(xiàn)healthCheck 會(huì)直接拋缺失異常好在第一時(shí)間定位真正要查的業(yè)務(wù)邏輯問題別在啟動(dòng)階段浪費(fèi)半小時(shí)猜想哪一步漏了。5. 實(shí)戰(zhàn)場景dia 在鴻蒙工程里的解耦玩法架構(gòu)是拿來用的不是拿來曬的。下面三個(gè)場景是我在這個(gè)項(xiàng)目里實(shí)際跑過的代表了三類最常見的鴻蒙遷移痛點(diǎn)。5.1 場景一網(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 下直接注冊 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í)換一行注冊。更妙的是所有頁面代碼甚至不需要重編。模塊之間的網(wǎng)絡(luò)依賴關(guān)系在結(jié)構(gòu)上變成了“單行道”頁面 → HttpDriver 接口 → dia 容器 → 具體實(shí)現(xiàn)這種單向依賴把可測試性也順帶提上來了。5.2 場景二平臺(tái)通道的注入式適配鴻蒙適配里最麻煩的一件事就是平臺(tái)通道。你不可能把原生代碼直接拿過來只能重新寫一套 OHOS 的 MethodChannel-Style 實(shí)現(xiàn)這個(gè)場景下 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 下注冊走M(jìn)ethodChannel的實(shí)現(xiàn)鴻蒙下注冊走 OHOS 原生側(cè)實(shí)現(xiàn)dia.registerDeviceIdProvider(() OhosDeviceIdProvider());業(yè)務(wù)方只拿接口。而且這樣還可以順帶解決一個(gè)實(shí)際問題MethodChannel 的字符串 key 在 Android 和鴻蒙之間要做 name 空間隔離否則兩個(gè)平臺(tái)的原生代碼在混淆時(shí)可能會(huì)出現(xiàn) channel 名沖突隔離機(jī)制也可以包在實(shí)現(xiàn)類里不污染業(yè)務(wù)。5.3 場景三模塊間依賴的延遲裝配鴻蒙應(yīng)用啟動(dòng)時(shí)系統(tǒng)對后臺(tái)任務(wù)和資源加載是有限制性策略的如果啟動(dòng)階段塞太多非必要初始化很可能會(huì)觸發(fā)系統(tǒng)的資源管控甚至導(dǎo)致首次啟動(dòng)白屏?xí)r間過長。dia 的懶加載機(jī)制正好治這個(gè)病。像日志上傳、埋點(diǎn)推送、圖片緩存這類模塊我全部注冊成 lazydia.registerLazySingletonAnalyticsService(() AnalyticsService()); dia.registerLazySingletonImageCacheManager(() ImageCacheManager());啟動(dòng)時(shí)容器只創(chuàng)建一個(gè)超輕量的日志接口占位真正的AnalyticsService直到首次上報(bào)埋點(diǎn)時(shí)才觸發(fā)構(gòu)造。對用戶來說冷啟動(dòng)更快對系統(tǒng)來說不會(huì)在啟動(dòng)瞬間制造一堆并發(fā)任務(wù)。這里要特別叮囑一句懶加載不是白拿的必須在接口的注冊處寫明這個(gè)實(shí)例“什么時(shí)候能建什么時(shí)候不能建”。我在一個(gè)位置延遲加載了某個(gè)依賴數(shù)據(jù)庫連接的服務(wù)等到頁面調(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. 踩坑記錄與排查速查表無論理論講得多漂亮真跑起來一定會(huì)遇到問題。這節(jié)專門記錄我在鴻蒙化過程中實(shí)打?qū)嵅冗^的坑以及沉淀下來的排查思路。6.1 我踩過的四個(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)飭栴}當(dāng)場消失??佣嶂剌d后容器狀態(tài)殘留在鴻蒙調(diào)試器上按 R 熱重載第一次啟動(dòng)業(yè)務(wù)正常第二次再啟動(dòng)時(shí)頁面里出現(xiàn)了舊數(shù)據(jù)甚至有的頁面崩潰。排查了半天最后發(fā)現(xiàn)是 dia 容器里的單例沒有被清掉舊的 StorageService 持有舊工程的緩存路徑。解決方案就是前面說的在bootstrap最開頭調(diào)用dia.reset()并給容器做一個(gè)冪等的初始化保護(hù)if (Dia.instance.isInitialized) return;坑三注冊順序?qū)е逻\(yùn)行時(shí)依賴缺失dia 解析是遞歸的比如OrderRepository依賴StorageService如果StorageService還沒注冊O(shè)rderRepository在構(gòu)造時(shí)就會(huì)拋 “No provider found for StorageService”。我一開始是隨意寫的注冊代碼后來改成把注冊列表拆成“基礎(chǔ)層、平臺(tái)層、業(yè)務(wù)層”三段每一段按依賴關(guān)系從基礎(chǔ)到上層排列還加了注釋。這個(gè)習(xí)慣在鴻蒙化這種多端環(huán)境下尤其重要因?yàn)椴煌钠脚_(tái)實(shí)現(xiàn)可能注冊順序不一致??铀幕旌暇幾g下產(chǎn)物中有兩個(gè)容器實(shí)例這個(gè)坑比較隱蔽。Flutter 引擎在鴻蒙工程里可能被同時(shí)掛在 entry 模塊和某個(gè)公共庫模塊下如果 dia 的代碼被編譯進(jìn)了兩個(gè)不同的har產(chǎn)物運(yùn)行時(shí)就會(huì)出現(xiàn)“兩個(gè)容器”的假象你在這個(gè)模塊注冊的服務(wù)在另一個(gè)模塊Dia.get()拿不到。解決方法是檢查 HAP 產(chǎn)物里的 so 和 lib確認(rèn) dia 的 Dart 代碼是打在一個(gè)共享模塊里而不是多處重復(fù)編譯。這也是我前面推薦把 dia 源碼放到third_party統(tǒng)一管理的原因之一。6.2 問題排查速查表這里整理了一張速查表按癥狀、可能原因、解決思路三個(gè)維度列出來。毫不夸張地說鴻蒙適配 90% 的問題都能在這張表里找到對應(yīng)。癥狀可能原因解決思路啟動(dòng)即崩日志里有No provider注冊順序不對或漏注冊檢查 bootstrap 各層注冊順序補(bǔ)齊缺失綁定頁面數(shù)據(jù)是上一輪的舊值容器狀態(tài)熱重載后未清理在 bootstrap 開頭調(diào)用dia.reset()pub get 報(bào) SDK 版本沖突dia 與鴻蒙 Dart SDK 版本不匹配改用 path 依賴鎖定兼容版本HAP 里服務(wù)無法跨模塊獲取多份編譯導(dǎo)致多容器實(shí)例統(tǒng)一產(chǎn)物模塊確保 dia 編譯進(jìn)公共包子產(chǎn)品第一次調(diào)用某服務(wù)卡頓懶加載實(shí)例構(gòu)造太慢拆分服務(wù)預(yù)熱邏輯或用isRegistered判斷狀態(tài)日志打印完整但頁面白屏Flutter 引擎與 Ability 生命周期橋接缺失檢查 EntryAbility 的 onForeground/onBackground 轉(zhuǎn)發(fā)構(gòu)建時(shí)找不到 Flutter 引擎產(chǎn)物SDK 分支與 hvigor 插件不匹配核對分支版本并清理.flutter本地緩存6.3 獨(dú)家避坑技巧最后再分享兩個(gè)純經(jīng)驗(yàn)的東西。一個(gè)是打印容器注冊清單。我常在 bootstrap 完成后把 dia 里所有注冊的接口和實(shí)現(xiàn)類打印出來一眼能看到有沒有遺漏、有沒有錯(cuò)誤綁定。這在跨端適配時(shí)幾乎是無價(jià)的功能因?yàn)槟銢]法靠肉眼在一堆文件里找出隱蔽的“指向 Android 實(shí)現(xiàn)的殘留引用”。另一個(gè)是小步切換策略。別試圖一夜之間把整個(gè)項(xiàng)目從 get_it/provider 切到 dia。先挑一個(gè)模塊做試點(diǎn)比如只把存儲(chǔ)服務(wù)切過去等驗(yàn)證了這個(gè)模塊在鴻蒙真機(jī)上能跑通再逐步把網(wǎng)絡(luò)、設(shè)置、用戶中心一個(gè)個(gè)模塊遷進(jìn)來。我在項(xiàng)目里就是這樣做的第一個(gè)模塊跑了三天才穩(wěn)定后面的模塊基本一天一個(gè)。7. 結(jié)語一次遷移三層收益說實(shí)話一開始做這個(gè)鴻蒙化適配的時(shí)候心里沒底生怕 dia 這種小眾庫在鴻蒙 SDK 上出幺蛾子。但跑完之后回頭看它帶來的收益遠(yuǎn)超“能上鴻蒙”這一個(gè)目標(biāo)。第一層收益是真正的多端能力同一套業(yè)務(wù)代碼Android、iOS、鴻蒙三端跑得完全一致平臺(tái)差異只在組裝層體現(xiàn)代碼修改量小到幾乎可以忽略。第二層收益是工程結(jié)構(gòu)被迫變好了為了適配我把原來散落各處的服務(wù)實(shí)現(xiàn)收斂到了各個(gè)接口背后整個(gè)工程的依賴圖變得非常干凈新同學(xué)看代碼也能很快就明白架構(gòu)邊界。第三層收益是測試成本下降因?yàn)闃I(yè)務(wù)邏輯不再依賴具體平臺(tái)實(shí)現(xiàn)單元測試直接 mock 接口就能跑不用再起模擬器。這個(gè)收益在項(xiàng)目后期特別明顯。所以如果你正在做 Flutter 鴻蒙化或者準(zhǔn)備做我建議先別急著改業(yè)務(wù)先把依賴注入的基礎(chǔ)打好。dia 是個(gè)很好的起點(diǎn)輕、穩(wěn)、可移植性極高。你在它身上投入的時(shí)間后續(xù)會(huì)在每一次多端適配中連本帶利都賺回來。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
激情文学小说一区二区| 色999五月色| 国产超碰欧美| 日日噜噜夜夜久久亚洲一区二区| 欧洲无码一区二区| 嗯嗯,啊啊,国产精品| 国产精品一区午夜福利| 极品销魂美女一区二区 | 中文字幕精品探花视频| 美女啊啊啊啊啊啊| 老熟妇一区二区三区| 久超超碰| 97天天操天天干| 96AV精品| 五月丁香狠狠爱| 日韩欧美aⅴ综合网站发布| 一本色道久久综合精品婷婷| 人人操人人射人人干| 国产精品一二三区福利| 中文字幕亚洲在线一区| 国产精品探花视频| 人妻少妇精品一区二区三区| 婷婷五月激情综合| 1769国内精品视频| 日韩国产中文字幕| 亚洲图片欧美偷拍| 国产传媒午夜理伦精品| 五码视频在线观看| 久久乐| 蜜乳视频网站| 久久直播国产| 久草国产在线视频| 脫衣舞一区二区三区| 欧美精品三级黄片| 一区二区乱码福利| 亚洲天堂精品日韩电影| 97香蕉网| 青娱乐国产精品| 国产精品无码久久久久2028| 立川理惠加勒比无码| 日本精品第一视频在'| 成年人黄色小视频网站| 久久女人一区二区三区| 青青国产精品在线| 97视频在| 久久9999| 九月伊人中文字幕| ,成人免费啪啪视频| 99国产精品视频尤物| 国产 日韩 欧美高清| 国产成人一级av88| 日本黄 R色 成 人网站| 青娱乐 成人娱乐在线| 精品国产一区二区三区久久久蜜臀 | 青女在线| 亚洲无码 国产无码| 日韩电影在线观看网址| 日本熟女中文字幕一区| 激情综合网激情五月天| 天天摸天天碰天天添青青| 怡春院久久| 欧洲亚洲天堂精品| 99国产精品自在自在| 啊啊啊好疼| 92久久| 日韩欧美性吧婷婷乱伦大香蕉| 日韩欧美大片免费高清啪啪| 成人福利视频网| 吻戏激情性巴克| 4141514逼喷水三级片| 亚洲黄日韩无码专区| 成人资源中文字幕在线观看| 家庭乱伦麻豆| av片在线观看免费播放| 色婷婷aV一区二区三区麻豆综合| 亚欧操逼片在线观看 | 久久久久久久久999| 亚洲字幕一区二区| 国产精品老熟女一区二区| 狠狠热这里都是精品| 久久久久921| 91成人无码| 在线色导航| 五月丁香啪啪啪| 日韩精品人妻中文字有码在线 | 最新日产中文在线麻豆| 综合亚洲情色| 欧美色就是色| 熟女乱伦二区| 美女爽爽爽刺痛洞洞| 夜夜嗨视频| 亚洲四虎熟女精品| 欧美日动态视频| 人人操人人摸超碰| 久99视频| 亚洲国产亚洲天堂| 少妇3P性爱自拍| 九色97| asc国产精品| 欧美性爱免费短视频| 91国产精品在线看| 久久riav中文精品| 韩国轻伦国内自拍一区| 在线视频资源| 久久婷色| 日本欧美不卡| 丁香五月天啪啪| 欧美色交| 日韩午夜啪啪视频| 九t超碰| 日韩中文字幕在线视频观看| 九九久久99| 84YTCOM性无码| 人妻熟女一区在| 久久婷婷一区| 午夜黄色免费在线观看| 久久久无码精品人妻二区| 免费的很黄很污的全部视频| 久久99999| 少妇无码av专区线| 任你干在线视频| av天堂精品久久| 男人的天堂在线| 在线观看免费视频国产| 亚洲色91C| 一本色道久久天天射天天干| 亚洲**2021在线观看| 91色女| 亲子敌伦对白在线播放| 97干在线看| 亚洲国产丝袜熟女av| 日夜啪电影| 国产精品网址| 熟妇亚洲一区二区三区| 国产乱人伦AVA麻豆软件.| 天天综合有色网| 欧美亚洲自拍另类人妻| 97色诱| 可能人人看人人摸| 国产成人久久精品蜜臀| 久久99精品九九久久久婷婷| 国产浮力影院第1页| 中文日韩欧美熟| 欧美综合区| 高清无码91| 丝袜天堂| 天天综合欧美综合| 亚洲午夜免费狠狠干| 亚洲综合色图欧美| yirendaxiangjiashipin| 日韩综合成人免费视频| 蜜桃一区二区三区| 久久xx| 亚洲色图欧美色图另类图片| 1二区9| 国产免费久久久久| 婷婷伊人五月| 天堂精品| 欧美少妇第一页| 两性色网| 一中国女人毛片水真多| 免费99精品国产自在在线| 色色五月婷| 国内亚洲高清无码| 91精品人妻一区二区三区蜜臀| 人人乐大香蕉| 色色色色网站| 青青操狠狠撩| 亚洲国产成人精品999| 精品二区三四区五电影 | 日韩黄片影院| 麻豆久久精品亚洲精品88| 亚洲熟女综合网| 一级黄色性爱A级片| 国产日本熟女顶级一区二区三区视频| 国产免a费看黄片在线| 丝袜美腿丝袜| 999 久久久| 人人爱夜夜爱| 992这里有精品| 乱伦日本色图AⅤ| 人人么人人操| 亚洲综合在线91| 亚洲日韩东京热一区| 蜜桃久久久久久| 亚洲日韩精品在线播放| 国产精品久久99日日| 大香蕉99999| 亚洲有薄码区久久在线一区| 男人的天堂kva| 啊啊啊不要嗯嗯在线观看| 午夜精品久久久久久久男人的天堂 | 日韩午夜精品一区二区三区电影| 中文字幕,人妻,日韩| 91人妻熟女| 精品制服美女中文一区二区三区| 青女在线| 五十路熟女工口 | 日日骚中文字幕| 欧美综合色图片| 亚洲黄a三级三级三级看三级| 嗯嗯嗯啊啊啊操的我好爽 | 亚洲国产天堂| 美女久久久| 亚洲se91| 天天网综合| 在线播放欧洲免费av| 九一性生活免费视频| 欧美国产成人在线| 国产一区二区三区,在线观看观看 五月开心久久AV官网 | 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 97精品网站| 国产精品乱码久久久久久| 亚州 综合 色图| 禁十八久久| av亚洲天堂资源网站| 久久av色| 久9爱精品| 97精品在线视频| 欧美中文综合| 性爱乱伦视频免费| 能在线播放的国产三级| 噜噜在线| 91精品丝袜久久久久久无码人妻| 国产视频小说| 91欧美网| 国产极品精品美女视频| 嗯啊抽插大香蕉网页| 99久久久er直播网址| 国产男人又猛又粗又爽| 男人的天堂2019AV| 亚洲色图美腿丝袜| 中出20p| 国产精品视频在线观看| 亚洲精品一二牛牛| 久久AV无码网址| 五月丁香成人网| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 超碰在线日韩一区| 美女91AV| 美女午夜福利免费视频| 狠狠五月天| 青草香蕉网| 久久天堂网| 亚洲欧美色图片| 午夜乱轮操逼视频免费看| 日韩精品黄片免费观看| 亚洲色图 欧美热图 清纯唯美 另类自拍| 欧美在线啊啊啊| 超碰97人人乐| 亚洲密乳AV| 久操热线| 欧洲亚洲人人爽爽视频| 91丝袜视频在线观看| 88xx成人精品视频| 超碰久热| 亚洲一区二区av| 久久一区无码| 日韩欧美~中文字| 九九九九热| 国内自拍 日韩激情 99| 大香蕉在线86| 91 丝袜在线播放| 亚洲AV无码国产成人| 精品国产网站| 青青青青青手机视频| 强奸乱伦AV网址| 婷婷操逼| 青青草国产一区二区三区| 欧美一级黄色免费专区| 蜜桃精品一区二区三区ww| 国产一| 久久透逼视频| 天天干一区二区| 伊人欧美大香蕉视频| 99这里只有精品国产| 五月天婷婷基地| 日韩欧美麻豆 | 黄页视频网站野外| 人人摸人人干| 中日韩一区二区三区欧美| www.人人cao| 操逼999| 先锋影音av先锋一区| 爽爽淫人网| 亚洲日本大香蕉1| 91成人久久 | 亚洲色图伊人网| 2018天天日天天日| 夜夜高潮夜夜爽高清视频一 | 秋霞蝌科网日本一区| 亚熟hd视频在线| 国产成人自拍视频视频| 啊啊啊啊啊舒服| 91c色| 亚熟hd视频在线| 岛国视频一二三区| 淫纸中9区| 五月天婷婷久久| 中文AV制服乱伦| 丁香色狠狠色综合久久小说| 九九九九久久久| 日韩猛交| 色老汉色| 欧美一区二区三区日韩| 欧美视频一区二区三区| 五月黑AⅤ| 起碰97| 国产13区| 日本操色导航| 中文字幕国产| 欧美|91色综合| 91免费看一区二区三区| 鸥美精品一区二区久久婷婷| 国产精品一级毛片不卡视| 久久妇| 色官网在线| 96精品久久| 色狠人在线99| 2024人人操人人摸| 久操91视频| 久久大线蕉一区| 欧美日韩青操| 色婷婷99| 国产女人高潮嗷嗷嗷叫小说| 欧日韩一二三f区| 麻豆亚洲Av成人无码一区精品| 亚洲欧洲日本精品中文a∨| 亚洲drav色图| 91在线美女| 国产女人高潮嗷嗷嗷叫小说 | 老熟女网站| 蜜桃中文字日产乱幕4区| 人人看人人插| 综合色久欲| 日本综合久久| xxxx网站亚洲精品| 97网色| 黄色二级片网站| 日韩美女啪啪一区| 国产一区二区成人av在线播放| 97欧美色资源| 久久黄黄| 亚洲无码免费看| 精品久9| 日韩精品人妻中文字幕有码午| 欧美性爱无码一区二区三区| 骚货操死你| 加勒比伊人综合| 久碰视频| 日韩一级特黄av毛片| 偷拍亚洲视频一区二区三区四区| 在线播放成人网站| 人人操人人插人www| 蜜臀在线网站| 麻豆成人av| 五月综合视频| 国产成人无码久久精品| 国产亚洲性生活视频播放| 天天综合网亚洲综合网| 99999久久久久9国产精品| 五月丁香综合啪啪| 午夜爽爽爽在线观看永久入口姬片| 久久久青青草| aV中文麻| 精品一区二区三区18| 经典丝袜一区| 久久久久久久久久黄色网| 精品久久久九九九孕妇| 婷婷亚洲综合| 伊人五月天| 91午夜无码| 欧美五十路熟| 亚洲 暴爽 AV人人爽日日碰| JuliaAnn丝袜熟女系列| 日韩91网| WWW美腿丝袜香蕉中文| 麻豆影音天美视频| 女一区二区| 熟妇熟女视频一区二区三区| 精品超碰国产| 国产精品免费视频人成| 精品一区二区成人动漫| 欧 美 自 拍 偷 拍| 激情五月天中文字幕色| 人人操人人肉久久精品| 性色亚洲| 婷婷伊人五月| 看免费一级在线播放毛片| 亚洲影视高清第一页| 一起草欧美| 91性高朝久久久久久久久| 日产操逼| 欧美性色网| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 国产精品 视频| 人妻娇喘 激情视频| 亚洲日韩97| 国产精品久久久久久久久久二区三区| 操老熟女AV| 欧美性五月| 天天爱综合网| 国产白丝网站| 亚洲成人精品在线一区| 被男人吃奶很爽的毛片| 亚洲色系另类精品国产| 国产久久av| 夜草欧美| 亚洲网污污污污| 欧美激情久| 九九九九一区| 丝袜足交视频| 欧美日韩黄片精品在线| 亚洲欧美综合区自拍另类| 黄片aaaaa一区| 日韩av影片在线观看| 欧洲色色| 级品肉射| 五月天婷婷社区| 日本操逼aaaaa| 九月激情婷婷| 免费久久精品麻豆一区二区av| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 六月丁香五月婷婷| 亚洲激情 欧美色图| 日韩啊V| 情趣丝袜无码操逼视频| 日韩成人网址| 99re3这里只有精品| 欧洲一区二区三区免费| 亚洲蜜臀精品视频久久| 国产在线能看的你懂的| 欧美成人性爱视频大全| 天天摸夜夜摸| 亚洲日本天堂| 青青久久艹| 大香蕉免费3| 欧美啪啪女女| 欧美日韩日产免费网站看| 久久久女人| 97国产中文| 人人弄人人摸| 99热精品在线| 亚洲丰满很很操| 日韩成年人性爱视频| 国产精品久久久久亚洲av| 人人摸人人干| 中文字幕无码不卡啪啪| 牛牛操视频逼| 天天色综合图片| 国产精品小视频一区二区三区| 精品成人女人久久| 日本中文字幕不卡视频| 麻豆久久视频在线地址| 91老妇女| 3p国产色噜噜一区| 歐美性天天| 91大神精品长腿在线观看网站| 精品国产精品一区二区| 91影视亚洲| 在线欧美69V免费观看视频| 亚洲精品丝袜-不卡成人免费……| 1024午夜激情男人的天堂| 在线a亚洲视频播放在线| 99热66| 91足交| 欧美色997| 欧美宗合网| 日韩AV一起草| 日韩无码服务区| 一区操逼日比视频| 欧美专区17页| 91丨九色丨国产打屁股| 92大香蕉| 久久久久久久伊人精品| 精品无码人妻一区二区免费蜜桃| 青娱乐二区免费| 北京专精特新企业招聘信息| 国产色产精品在线观看| 亚洲欧洲美腿丝袜| 91色综合| 人妻在线中出视频| 人人干黄色| 亚洲一区二区 麻豆传媒| 精品毛片av一区二区| 国产天天骚| 国产精品久久| 91少妇香蕉久久精品| 亚洲高清无毛一区二区| 青久操| 国产一区自拍欧美日韩| 四季AV一区二区凹凸精品小说| 国产v亚洲v日韩v欧美v片另类| 亚洲日韩一区电影| 园内精品自拍视频在线播放| 99re在线精品78| 欧美麻豆成人同性GⅤ在线| 婷婷五月天激情网| 啊啊啊操死我了| 日本 欧美 亚中文字幕| 亚洲中文字幕熟女| 久久久久久9999| 国产精品噜噜噜日日日| 殴美日韩m| 国产A v无码专区| 97久久国产精品| 婷婷日韩一区二区三区中文字幕在线| 天天夜躁日日躁狠狠2002| 亚洲少妇在线影音| 国内毛片无码一级毛片| 91欧洲国产成人久久精品网站| 欧美亚洲国产自久久| 1级午夜影院费免区| 好湿好紧视频| 亚州操操穴网| 在线观看黄色电话| 国产日韩色综合| 极品出轨视频网站| 国产有码一区| 亚洲日韩精品在线播放| 精品久久久久久AV无码| 青青草AV色| 欧美日韩理论一区| 亚洲精品成人激情在线| 熟女啪啪视频| 深夜激情无码| 爱妃国产亚洲视频中文字幕| 在线观看啊啊啊啊啊| 麻豆乱码久久精| 国产精品视频精品一二| 性色AV蜜色av色欲av| 少妇高潮喷水无套久久久久久| 超碰97爽| 99性视频| 国产精品久久成人免费| 99久久久无码精品国产人| 欧美色综合网| 成人欧美日超碰| 综合网欧| 欧美天堂亚洲电影院一区在线播放| 蜜臀久久99精品久久久久电影| 色老汉色| 九九在线视频| 99在线精品观看99| 亚洲国产麻豆一区二区三区| 欧洲性爱无码区| 校园春色 欧美| 中文熟女五十乱码在线| 91久久久老司机| 国产青视频| 精品四五区| A久久| 无码外流操逼视频| 高清国产精品无码| 亚洲国产精品V?在线播放| 欧美天堂在线| 久久久亚洲| 蜜臀久久99精品久久久久久婷婷| 人人摸人人舔一区二区| AV男人天堂网| 九七人妻在线| 超碰视97中文| 欧美男人的天堂| 九色 蝌蚪 熟女自 | 在线电影亚洲色图| 天欧美在线| 日噜夜夜夜夜夜夜夜夜夜夜爽爽爽爽爽爽爽爽爽爽爽爽 | 黑人粗大V S日韩女优视频| AA级电影三区| 精品69网| 内射小黄片| 岛国激情视频在线观看| 色翁荡息又大又硬又粗又爽| 日本色色色色色视频| 国产精品久久久久久久黄无码| 高清无码在线播放网站| 久久性爱大全| 天天插天天射| 亚洲一区二区三区久久 亚洲一区二区| 校园春色第一页| 日韩欧视频| 五月亭亭六月丁香| 久久久久久久久久va| 中国AAAAAA黄色片| 亞洲久久直播| 99爱爱| 大香蕉免费中文| 亚洲激情 欧美色图| 99热 按摩 日韩| 操淫穴亚洲五月丁香 | 夜夜综合| 色综合1991| 熟妇一区二区| 亚洲国产奇米影视久久| 亚欧国产无码精品在线| 五月天精品| 日韩ab网| 久久香蕉国产线看观看亚洲女人 | 狠狠躁AV| 无码人妻系列少妇| 91东北熟女| 日韩高清黄片| 欧美顶级黄色大片免费| 加勒比无码一区二区三区| 九九久久久九九| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 亚洲一二三精品久久网| nuu12国产麻豆精品| 国产suv一区二区三区6| 久操精品| www久| 国精品一区二区三| 久久无码成人| 欧美综合骚| 日欧毛片久久| 久久久青青草| 国产 无码 一区二区| 亚洲另类综合欧美| 欧美变态激情网| 97天天| 亚洲天堂中文字| www九九热| 久久99草| 另类图片天天影视| 福利视频一区二区微拍| 一区久久久二区| 久久人妻熟女一区二区| 国产精品无码av| 久艹伊人精品综合在线| 97精品免费视频网站| A V视频日本| 五月天伊人| 中文一区二区三区影院| 久久99网站| 91爱看| 青青青在线高清视频在线一二三四区| 女人爽到高潮潮喷18禁网站| 国产99999久久精品| 日日干天天干夜夜爽| 日日爽夜夜爽| 96精品久久| 婷婷久久五月| 性色高清..……| 粉嫩在线一区二区懂色| 激情四射五月天| 性色av大全| 高跟伊人julia ann| 天天草天天日| 中文字幕精品一区二区精品| 国产精品乱码久久久| 婷婷丁香五月激情啪啪| 亚州色图片在线色| 操比国产| 久久久久久裸体| 日韩AV无码中文一区二区| 欧美一区二区三区黄色影视| 黄片国产精品一区二区| 青娱乐大香蕉| 啪一啪免费视频| 欧美黑人91| 色婷婷丁香五月| 欧美色九九| 婷婷伊人| 伊人热综合| 校园春色综合色| 国产不良强奸视频免费看| 欧美伦乱爱| 免费作爱一级视频| 91成人亚洲色图| 精品少妇一区二区三区免费观看| 啊啊啊啊网站| 久久嫩草国产成人一区| 三级网色| 97在线视频免费看| 亚洲综合图文| 超碰成人最新最好看| 无码九九九九| 日韩pv中文| 国产精品成久久久久午夜午夜| 欧美老妇综合网| 久久香蕉综合一本到3atv| 精品人妻一区二区蜜桃视频 | 国产精品久久久久久亚洲色欲| 韩国轻伦国内自拍一区| www.黄色在线| 十八禁黄色| 麻豆AV一区二区| 国产色呦呦| 射久久| 精国久久一区二区三区98| 96久久精品一二三区色欲| 72av视频| 91n免费处女| 天天干天天干天天干| 天天看精品动漫视频一区| 欧美一区二区三区成人性生活| 国产做?爰片久久毛片?片美国| 亚洲人妻爽爽爽| 狠狠色一区二区中文字幕| 色色色色网站| 欧美97色| 天天色踪合| 天天操天天射青青草| 久操网无码在线| 丰满人妻一区二区三区免费 | 欧美性爱免费短视频| WWW美腿丝袜香蕉中文| 99.色网| 999岛国大片| 精品久久久av无码免费| 91女日逼| 日本顶级天天操狠狠操夜夜操中文字幕| 久久精品国产精品亚洲艾通辽熟妇 | 日本东京热大香蕉a片| 美女刺激久久国产欧美| 日韩亚洲中文字幕在线| 日韩av性爱在线播放| 久热这里| 亚洲区限制级| 日韩精品熟妇| 青青国产精品在线| 强奸国产在线| 亚洲一区中文精品| 久久人妻熟女一区二区| 久久精品人妻一区二区三区| 国产乱弄免费在线视频。| 久久99亚洲精品久久99果| 啪啪AV导航| 久久国产逼| 噜噜噜噜天天狠狠| 欧美淫乱视频| 97精品久久久久中文字幕| 久久综合精品一区二区三区| 成人情色一区二区| 久久精品国产免费观看99| 人人人人插| 天天做日日做| 欧美后入| 国产狂喷潮在线精品| 97精品免费视频网站| 啊啊啊啊好爽好舒服一区二区易域| 啊嗯嗯啊好大好爽| 91N综合在线| 观看视频图片一区二区三区| 熟女精品一区二区三区| 久久久久国产精品片区无码直播| 黄片com.| 日韩亚洲Av人人夜夜澡人人爽| 国产aⅴ无码片毛片一级网站| 八戒午夜福利理论片| 无码动漫av中文字幕| jizz啪啪| 隔壁邻居波多野结衣中文字幕| 中文色综合| 色官网色综合| 永久免费发布性爱网| 大伊香蕉在线视频免费| 亚洲成?V人片在线观看福利| www.婷婷六月天| 超碰人人妻| 国产丝袜视频| 大奶尤物鲍汁淫荡欧美视频粉嫩夜夜骚 | 9 7超碰在线免费观看| 国产日韩人人| 东京热大香焦| 国产青青美女玩逼视频| 亚洲双插| 久久这里只有精品9| 12一15性XXXX粉嫩国产| 精品人妻1区| 亚洲一欧洲中文字幕在线| 99亚洲天堂| 色综合美国| 九九拍拍精品视频在线播放| 2017天天透天天通天天擦| 中文字幕在线观看网页| 97超碰人操| 久久久久国产| 99在线精品观看视频中文 | 欧美强奸一区二区诱惑| 亚洲激情在线| 红杏大香蕉| 麻豆一区在线| 欧美韩日精品99综合| 2018天天日天天日| 黄片无码在线制服| 久久a久久| 婷婷15月天青娱乐| 啊啊啊啊无码| 91九色蝌蚪在线观看| 动漫爆乳3D奶水一区在线观看| 超AV色女| 亚洲国产福利视频| 欧美亚洲情色| 成人日本视频人妻在线| 青娱乐亚洲热| 亚洲中文丝袜美腿诱惑字幕| 国产农村妇女精品| 26uuu欧美日韩| 欧美一级三级| 亚洲综合69| 夜夜草天天| 超碰九色| 久草线上视频免费看| 操碰97| 亚洲中文字母在线播放| 国产精品第二页| 亚洲熟女人妻中文字幕一区二区| 色色色色日本| 日韩国产品视频中文字| 精品无码久久| 无码av永久免费专区网站| 欧美日韩高潮喷水91| 精品免费成人久久| 国产一区二区三区视频在线看| 久悠悠av| 亚洲中文字幕av| www.色操逼| 天天内射| 亚洲av成人精品一区| 成人精品在线观看| 91超碰丝袜制服| 丰满少妇乱子伦精品无| 欧美 日韩 国产传媒| 在线亚洲欧美| 精品 码产区一区二-1080P高清在线www-B029AV| 色天堂综合| 粉嫩av平台| 色综合色| 夜夜高潮夜夜爽国产伦精品| 高清无码久操视频| 色综合美国| 精品91日日夜夜超清资源| 国产九九九九九九九九| 国产成人精品一区| 99在线无码精品秘 入口黑人| 99RE在线视频精品,这里只有精品| 91丝袜| 搡老女人老妇女老妇老熟女怎么读| 91精品国| 欧洲熟妇xxXx欧美老妇裸体| 熟妇无码视频三区| 8050午夜少妇无码| 日韩欧美中文字幕搭讪巨乳美人妻视频| 乱伦图av| 日韩毛片9| 亚洲色诱惑| 欧洲精品一级二级精品综合视频综合| 丁香五月久久| 人妻丝袜二区| 91丝袜美女| 精品久久久久久中文字幕视频免费| 高清不卡一二三区视频......| 999久久久九九九九| 小草精彩毛片| 天堂69亚洲精品中文字| 少妇无码太爽| 人人操人人爽人人操人人| 欧亚乱色熟一区二区三四区| A一区片| 97伪v| 91粉嫩萝控精品福利网站_精品影音先锋国 | 久艹99| 日本在线视频导航| 日韩少妇无码| 色老汉色| 秋霞曰韩R级| 麻豆AV一区二区天美传媒| 亚洲欧美在线观看2021 | 国产色呦呦| 少妇精品久久久| 人妻久久久久久| 欧美精品三区| 美女让帅哥通她小鸡鸡| 国产激情在线观看| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 欧美精品日韩久久久九| www久久精品| 亚洲婷婷五月天| 中文字幕乱妇免费视频| 久久精品天美| 国产精品久久成人免费| 天天做天天爱| 97色妞| 婷婷久草一区二区三区| 欧美中文字幕日韩在线| 亚洲精品蜜桃久久久| 91 亚洲 欧洲| 最新日韩黄片| 91综合网| 中文字幕一二三av| 亚洲综合有玛| 一区二区精品日韩欧美在线观看| 青青操日韩| 亚洲 图片 欧美 色图| 国产热RE99久久6国产精品首| 欧美极品| 欲综合网| 操一区| 香蕉99秘 精品一区丁香| 黄色在线网站| A级片日韩欧美国产欧美视频精选观看| 欧美精品久久| 一区中文字幕二区日韩| 色婷婷狠狠18禁| 无码最新| 操屄日韩| 国产精品99999| 一级免费精品| 91AV天美在线视频| 炮色五月| 多毛小伙内射老太婆| 无码一区免费在线不卡| 这里都是精品| 亚洲天天天| 亚洲日韩乱码中文无码蜜桃臀网站 | 日韩草久视频| 亚洲精品精品一区二区| 可能人人看人人摸| 中文字幕第9页萱萱影音先锋| 熟女91网站| 日本道日本道中文字幕日本道最新日本道在线观看 | 国内97干免费看| 久操B网| 人妻天天夜夜爽一区二区| 女人双腿搬开让男人桶| 国产高清MV操逼视频| 韩日色费| 中文字幕一区二区三区四区在线视频| 91精品人妻一品二品三品| 色香综合天天影视综合| 日日噜噜夜夜久久亚洲一区二区| 日本97久久久精品| 宅男91视频在线播放| 大鸡吧尹人在线| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 国产精品久久aV| 久久久四区| 国产激情在线| 东京热精品97综合网| 九九久久首页| 97国产色综合| 白丝1区2区3区| 伊人影院中文字幕| 操狠狠| 中文字幕av色| 亚洲情色一区综合| 天堂麻豆天美| 97人人爱人人做人人乐| 欧美日韩国产电影| 亚洲少妇在线影音| 国产免费一区| 中文熟女五十乱码在线| 青青草色AV| 久热这里只有精品9| 国产97在线 | 亚洲| 啊啊啊好想要| 91精品亚洲内射孕妇| 69av一区二区三区| 一起草日韩| 亚洲av影院在线观看| 五月激情啪啪| 一区二区三区精品黑丝白丝酒店对鸡| 97人妻色| 久久97资源 网| 肉丝中文无码高清| 国产美女高潮视频| 色吧5亚洲| 在线无码视频| 色五月大香蕉| 成人贴图日韩欧美| 中文字幕人乱码中文字的预防方法 | 成人八戒网站| 中文字幕 国产区| 麻豆 欧美 日韩| 四季AV综合网址| 久久久久久九九九九九九| 日日97| 蜜乳视频网站| 97任你吞精| 夜夜操老骚逼视频网站| 超碰97久久观看| 97免费视频在线| 国产精品麻豆免费视频| 操人91| 欧州色图区| 男人的天堂无码| 亚洲欧美日韩免费观看| 亚洲中文一区二区三区| 日韩精品一区二区三区四虎影视| 少妇被玩视频二三区| 天天在线91| AVE乱伦| 婷婷丁香五月激情啪啪| 九九玖玖精品| 91男人综合| 国产 日韩,欧美 自拍| 天堂8在线新版官网| 97操97色| 99少妇| 国产精品熟女九色九色蜜臀| 色妹子A V| 中国黄色特级精品一区二区三区片| 97资源免费视频| 日本女人久久久| 中文字幕aⅴ在线视频| 日本精品88888888| 999热日韩精品| 操逼逼中文字幕| 黄页大片在线观看| 97视频播放| av绯色| 97天天弄| 少妇久久久久久久| 综合熟女| 97国产天堂岛| 97欧美精品| www.99视频| 婷婷九月国产| 97人妻免费中文字幕| 九九九综合精品| 91天天| www.激情| 亚州欧美在线| 啊啊啊啊网站| 久久人爽| 欧美色97| 欧美操人| 国产91精品久久久久久久网曝门| 揉揉揉夜夜| 色网在线视频观看免费| 97色色国产视频| 91情色| 亚洲欧洲美腿丝袜| 中文字幕三四区| 久久久无码国精品无码三区三区| 青青草公开在线免费不卡视频| 亚洲蜜乳av| 婷婷九月国产| 久久直播国产| 偷拍片久久| 人妻 中文 日韩| 精品无码产区一区二| 国产精品久久久无码aV去| 国模限制级电影| 亚洲一区二区三区在线激情| 精品精品精品| 26uuu最新| 啊a一区在线| 日韩精品在线放| 91久久久视| 成人性爱视频在线看| 啊啊啊啊啊好舒服视频| 人人操人人插人www| 色哟哟AV| 热99这里只有精品| 欧美精品激情| 中文字幕人妻丝袜| 亚洲码在线中文在线观看| 日韩无码专区| 超碰91在线| 综合网欧| 国产黄片精品在线| 黄页网站成人免费| www.色综合| 男女无套 免费网站| 992这里有精品| 亚洲日韩在线a不卡99精品| 精品9区| 播播亚洲小说亚洲| 综合 亚洲 欧美| 久草久热| 日本欧美一区二区三区免费| 黄色不卡视频| 噜噜噜狠狠色综合| 国产精品人妻一区二区| 日韩电影天堂视频一区二区| 立川理惠无码一区二区| 欧美性91| 超碰97久久国| 91 手机在线播放 绯色| 日韩成人私密一级精品av| 美女让帅哥通她小鸡鸡| 九九成人视频| 无码外流操逼视频| 亚洲综合小视频小说在线观看 | 久久国产精品91| 国产成人99久久亚洲综合| 欧美爱国产综合、| 大香交伊人网| 老熟女乱子伦中文字幕一区二区| 亚洲第一男人天堂| 亚洲欧美九九九| 操一区| 亚欧毛片基地国产毛片基地| 一本色道久久综合亚洲二区三区| 青草青青久久久久久国产| 久久av成人无码免费| 日本在线观看网址| 国产AV线| 99青青草国产视频| www.激情| 国产精品色片一区二区| 国产精品不卡高清在线观看| 91丝袜美腿片| 超碰午夜在线| 三级三久久线久久99久目本WW| 色操逼网| 亚洲不卡三级手机播放| 亚欧美综合| 丝袜av一区二区三区| 欧美国产日韩清纯唯美| 被体育老师抱着c到高潮| 人妻无一区二区三区| 欧美人妖内射| 色哟哟av网址| 欧洲Au麻豆| 九九毛片这里只有精品| 亚洲综合婷婷| 国产精品网址| 襙一襙| 精品免费囯产一区二区三区 | 九久9精品| 国产精品熟女九色九色蜜臀| 国产免费黄色一级大片| 亚洲精品蜜桃久久久| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 另类专区加勒比| 少妇一区二区三区在线观看| 欧美性天天影视| 五月天丁香网| 国产高潮AA片免费看| 特级丰满少妇一级AAAA爱毛片| 国内精品嫩模A∨私拍小视频| 国产熟妇 码视频户外直播| 欧美综合777| 亚洲日韩乱码中文无码蜜桃臀网站| 青青青青草av在线观看| 欧美熟女少妇| 大香蕉97久久| av中文字幕在线熟女| 男人的天堂不卡一区二区| 亚洲激情综合| 色五月激情综合网| 开心五月深爱五月| 长长久久曰曰夜夜成人网| 亚洲最大无码中文字幕网站| 人妻丝袜无 码视频专区| 性爱1区| 欧美一级久久久久久久大片动画| 欧美黄色手机在线观看| 97超碰超碰| 九九九九国产| 日产操逼| 麻豆国产视频精品观看| 成人小说另类在线| 午夜福利av电影在线| 国产乱伦亚洲色图高清无码| 久久久久免费看少妇A片特黄| 凹凸久久人人|