99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

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

基于Kernel IR的字節(jié)碼中間件:鴻蒙Flutter適配與高性能加載實(shí)踐

基于Kernel IR的字節(jié)碼中間件:鴻蒙Flutter適配與高性能加載實(shí)踐 1. 先說項(xiàng)目的定位為什么有人要用“字節(jié)碼中間件”做鴻蒙適配如果你所在團(tuán)隊(duì)正在把 Flutter 應(yīng)用往開源鴻蒙OH系統(tǒng)上遷移大概率會(huì)遇到一個(gè)非常尷尬的處境Flutter 引擎本身沒有對(duì) OH 的官方支持社區(qū)移植版本能不能跟上框架版本更新是個(gè)問題而你手里的業(yè)務(wù)代碼又極度依賴若干底層插件。我們最初就卡在這里——某個(gè)原生插件在 Android 上一切正常到 OH 系統(tǒng)上表現(xiàn)就不對(duì)為了排查問題不得不翻引擎源碼改配置改完還得重新編整個(gè) engine一次全量構(gòu)建小半天就沒了。后來我們把目光轉(zhuǎn)到了 Dart 的“中間表示”上也就是內(nèi)核系統(tǒng)中的 Kernel IR。Flutter 應(yīng)用在開發(fā)模式、部分動(dòng)態(tài)特性場(chǎng)景下運(yùn)行時(shí)加載的其實(shí)不是最終機(jī)器碼而是一個(gè)名為 dill 的 kernel 產(chǎn)物引擎拿到這個(gè)產(chǎn)物之后按需解析類、方法、語句。換句話說這一層是天然的“可介入層”。我們?cè)谶@一層寫了一個(gè) kernel 中間件不碰引擎源碼而是在 dill 產(chǎn)物被加載之前做代碼變換最終實(shí)現(xiàn)了平臺(tái)差異規(guī)避、性能插樁和運(yùn)行時(shí)補(bǔ)丁。這篇內(nèi)容適合兩類讀者一類是正在做 OH 平臺(tái) Flutter 適配、遇到插件或渲染兼容性問題、想找一個(gè)相對(duì)低侵入方案的開發(fā)者另一類是對(duì) Flutter/Dart 底層機(jī)制好奇想了解 kernel 如何能做到“在編譯后改程序行為”的人。我會(huì)把中間件的架構(gòu)、核心代碼、踩坑記錄按實(shí)操路徑寫清楚涉及的代碼片段可以直接拿來改一改跑起來。1.1 為什么不直接在引擎層改代碼直接修改 engine 源碼是最直覺的方案。比如某個(gè)平臺(tái)通道的實(shí)現(xiàn)不符合 OH 的線程模型你在引擎的 platform channel 代碼里改就行。但問題是Flutter 引擎的構(gòu)建鏈路非常重而且官方代碼迭代很快基于舊版本打出的補(bǔ)丁幾乎不可能平滑合并到新版本。更麻煩的是OH 的適配往往涉及多個(gè)底層模塊——圖形、字體、輸入、平臺(tái)視圖每處改動(dòng)都要跑全量回歸一次版本升級(jí)就能把團(tuán)隊(duì)拖垮。另外還要考慮團(tuán)隊(duì)定位如果你不是引擎維護(hù)方而是某個(gè)業(yè)務(wù)線的應(yīng)用團(tuán)隊(duì)長期維護(hù)一個(gè)私有引擎分支根本不現(xiàn)實(shí)。我們當(dāng)時(shí)的硬性約束是盡量不動(dòng)引擎源碼、不動(dòng) Dart SDK只動(dòng)最終產(chǎn)物。kernel 中間件剛好滿足這些約束。它允許你在 Flutter 官方引擎和業(yè)務(wù)代碼之間插入一層“私人訂制”隨構(gòu)建走、隨產(chǎn)物走不用改任何 C 代碼。1.2 中間件到底解決哪幾個(gè)問題歸納下來我們的 kernel 中間件核心解決四類問題平臺(tái)差異OH 系統(tǒng)對(duì)部分 API 的行為與 Android/iOS 不同很多暴露給 Dart 層的接口沒有對(duì)應(yīng)實(shí)現(xiàn)需要在加載時(shí)替換方法體或修改變量。插件橋接業(yè)務(wù)插件大多通過 MethodChannel 與原生通信通道名、參數(shù)格式需要按 OH 的規(guī)范調(diào)整。性能觀測(cè)想在關(guān)鍵渲染路徑、平臺(tái)消息回執(zhí)上埋點(diǎn)但不能污染業(yè)務(wù)源碼。版本升級(jí)Flutter 引擎升級(jí)后適配規(guī)則盡量不重寫規(guī)則與引擎解耦。一句話總結(jié)中間件就是“編譯后的最后一道適配閘門”。它讓業(yè)務(wù)代碼保持平臺(tái)無關(guān)把所有平臺(tái)相關(guān)的臟活、累活都集中在產(chǎn)物層解決。2. 底層機(jī)制Kernel IR 在 Flutter 體系里到底是什么角色2.1 從 Dart 源碼到 dill 的這一路先看一條完整的編譯鏈路Dart 源碼 - 分析器Analyzer- 前端編譯器CFE- Kernel IR - 二進(jìn)制 dill 文件 - VMJIT/AOT在 Flutter 的日常構(gòu)建里這條鏈路是這樣落地的Debug 模式構(gòu)建產(chǎn)物中帶kernel_blob.bin引擎啟動(dòng)即加載它用 JIT 方式執(zhí)行熱重載依賴的就是這個(gè)產(chǎn)物。Profile/Release 模式通常走 AOT產(chǎn)物是 ELF 快照。但部分工具鏈、增量構(gòu)建流程里kernel 變換仍然會(huì)一閃而過Dart DevTools 的許多動(dòng)態(tài)特性也依賴 kernel 相關(guān)的表達(dá)式求值。Kernel IR 本身是一種帶完整類型信息的 AST。它和 Java 字節(jié)碼不完全一樣但承擔(dān)的職責(zé)類似介于高級(jí)語言和目標(biāo)機(jī)器之間的、可分析和可變換的中間產(chǎn)物。把 dill 當(dāng)作“字節(jié)碼文件”來理解沒有大問題。這也是為什么項(xiàng)目標(biāo)題敢叫“字節(jié)碼中間件技術(shù)”——對(duì) JIT 場(chǎng)景來說這層就是真正被虛擬機(jī)消費(fèi)的代碼形態(tài)。對(duì)搞過 Java 字節(jié)碼的同學(xué)可以再給一個(gè)直觀類比dill 相當(dāng)于 .class 文件Kernel AST 相當(dāng)于字節(jié)碼指令序列而 VM 就是那個(gè)逐條執(zhí)行的解釋器。區(qū)別在于 Dart 的 AOT 會(huì)在部署前把這一切變成機(jī)器碼所以中間件的介入窗口主要在 debug 和 profile 階段以及部分要求“源碼級(jí)動(dòng)態(tài)修復(fù)”的線上場(chǎng)景。2.2 讀 dill一個(gè)最小可運(yùn)行的例子要把中間件跑起來核心就是圍繞 package:kernel 做讀、改、寫。下面是最簡(jiǎn)代碼先把整個(gè) dill 讀進(jìn)內(nèi)存再遍歷庫名最后原樣寫回一個(gè)新文件。// 需要依賴 package:kernel import dart:io; import package:kernel/binary/ast_from_binary.dart; import package:kernel/kernel.dart; Futurevoid main() async { final bytes File(kernel_blob.bin).readAsBytesSync(); final component Component(); final builder BinaryBuilder(bytes, uriToSource: (uri) null); builder.buildComponent(component); // 遍歷一下所有庫名 for (final library in component.libraries) { print(library.importUri); } // 寫回 final outFile File(kernel_blob_patched.bin); final sink outFile.openWrite(); final printer BinaryPrinter(sink); printer.writeComponentFile(component); await sink.close(); }注意BinaryBuilder / BinaryPrinter 并不是穩(wěn)定的公開 API不同 Dart SDK 版本接口名都可能變。別把它當(dāng)公共庫用要把它當(dāng)作隨 SDK 版本綁定的內(nèi)部工具。我在實(shí)際處理時(shí)直接使用對(duì)應(yīng) Flutter SDK 里緩存的那份 kernel 源碼編譯這樣版本一致性最有保障。2.3 kernel 版本兼容性最容易踩的深坑dill 文件本身有版本號(hào)對(duì)應(yīng)前端編譯器與 VM 的版本。如果你拿高版本的 package:kernel 去讀低版本 VM 生成的 dill輕則解析失敗重則出現(xiàn)字段錯(cuò)亂。我們最初就踩了一次用舊 Dart SDK 的 kernel 包去處理新 Flutter 引擎產(chǎn)出的 dill構(gòu)建直接掛掉報(bào)錯(cuò)信息還特別迷惑只說“Unsupported version”。結(jié)論很簡(jiǎn)單處理哪個(gè) Flutter 版本的產(chǎn)物就從哪個(gè) Flutter SDK 的 bin/cache/pkg 里拿 kernel 包不要圖省事全局依賴一份。這個(gè)“版本一致性檢查”應(yīng)當(dāng)做成中間件啟動(dòng)時(shí)的第一步構(gòu)建環(huán)境變量里強(qiáng)制記錄 SDK 版本不一致直接報(bào)錯(cuò)而不是帶著錯(cuò)誤往下跑浪費(fèi)半小時(shí)。3. 鴻蒙適配下的運(yùn)行時(shí)加載離線變換與在線補(bǔ)丁的管線設(shè)計(jì)3.1 先理清 OH 平臺(tái)上的加載鏈路在 OH 的 Flutter 移植版上應(yīng)用啟動(dòng)流程大致是這樣的宿主工程把 Flutter 模塊的產(chǎn)物打包到 assets。引擎初始化時(shí)在 assets 目錄里找kernel_blob.bindebug/profile 場(chǎng)景或找 AOT 快照release 場(chǎng)景。Dart isolate 啟動(dòng)后加載 kernel 產(chǎn)物按需解析類、編譯函數(shù)。引擎把平臺(tái)消息、渲染指令調(diào)度到平臺(tái)側(cè)。中間件的切入點(diǎn)就卡在第 1 步和第 3 步之間。我們用了兩種方式離線變換構(gòu)建腳本在產(chǎn)物生成后、打包前執(zhí)行一次 kernel 變換替換原 dill。生產(chǎn)環(huán)境用這個(gè)。在線補(bǔ)丁開發(fā)期不改打包流程通過引擎的熱重載機(jī)制把變換后的差量下發(fā)給運(yùn)行中的 isolate。這個(gè)體驗(yàn)非常接近原生熱重載。兩者共用同一套規(guī)則引擎所以離線能跑通的規(guī)則在線補(bǔ)丁也一樣能跑通只是處理時(shí)機(jī)不同。3.2 離線變換流水線離線變換這條流水線按順序一共六步獲取構(gòu)建產(chǎn)物kernel_blob.bin。中間件讀取并解析為Component。規(guī)則引擎加載配置YAML/JSON。對(duì)匹配到的庫、類、函數(shù)執(zhí)行變換。序列化寫出新的kernel_blob.bin。替換原產(chǎn)物并打包進(jìn)應(yīng)用。這六步里最容易被低估的是第 2 步的耗時(shí)。一個(gè)真實(shí)應(yīng)用的 dill 包含幾百個(gè)庫全量反序列化非常慢動(dòng)輒幾十秒。我們的做法是先解析出一個(gè)輕量的“庫索引”通過library.importUri判斷是否命中規(guī)則沒有命中的庫保持二進(jìn)制原文不動(dòng)等真正需要時(shí)再按需展開。這一層懶加載優(yōu)化把變換耗時(shí)從幾十秒壓到了幾秒。3.3 在線補(bǔ)丁把熱重載擴(kuò)展到“平臺(tái)適配”場(chǎng)景Flutter 熱重載的原理是把新的 kernel 增量下發(fā)給引擎引擎執(zhí)行reloadSources對(duì)比新舊 AST 圖然后原地更新。中間件可以利用這個(gè)機(jī)制先對(duì)舊 dill 和新 dill 分別做變換再計(jì)算差量變更集生成 hot reload 補(bǔ)丁下發(fā)到運(yùn)行中的 OH 設(shè)備。我們?cè)陂_發(fā)期拿到的好處是發(fā)現(xiàn)某插件在 OH 上有兼容問題時(shí)只需要修改規(guī)則文件、重新生成補(bǔ)丁、點(diǎn)一下熱重載整個(gè)修復(fù)從“修改源碼 重新編譯 重啟應(yīng)用”的分鐘級(jí)變成了秒級(jí)。排查問題的體驗(yàn)完全不像是跑在一個(gè)尚未被官方支持的平臺(tái)上。3.4 關(guān)鍵參數(shù)與緩存策略中間件里我最常調(diào)的幾個(gè)參數(shù)參數(shù)默認(rèn)值說明規(guī)則匹配優(yōu)先級(jí)精確 URI 通配符 包名前綴避免誤傷同類庫最小插樁語句閾值5 個(gè)表達(dá)式過小的方法不插樁避免噪音全局插樁采樣率0.01控制插樁引入的開銷緩存有效期輸入哈希一致即生效保證可重復(fù)構(gòu)建變換深度只允許在庫邊界操作禁止跨庫新增引用這里特別說一下緩存策略。每次構(gòu)建出的 kernel_blob.bin 內(nèi)容可能完全沒變但構(gòu)建流程還是會(huì)觸發(fā)我們的中間件。我們用輸入 dill 的 sha256 作為緩存 key如果 key 命中且規(guī)則配置沒變直接復(fù)用上次的輸出文件跳過整個(gè)變換過程。這個(gè)優(yōu)化在 CI 上尤其值錢能省掉大量重復(fù)計(jì)算。4. 代碼變換實(shí)戰(zhàn)三個(gè)高頻場(chǎng)景的拆解4.1 場(chǎng)景一給所有平臺(tái)通道名稱統(tǒng)一打標(biāo)在 OH 和 Android 雙端共存的環(huán)境里原生側(cè)經(jīng)常收錯(cuò)通道消息。我們希望把所有MethodChannel(xxx)的通道名自動(dòng)加上oh_v1_前綴這樣 OH 原生側(cè)只需監(jiān)聽?zhēng)熬Y的通道就不會(huì)和 Android 端的消息串?dāng)_。用 visitor 遍歷 AST找到構(gòu)造調(diào)用并修改字符串字面量class ChannelNameVisitor extends Visitorvoid { override void visitConstructorInvocation(ConstructorInvocation node) { if (node.target.name.text MethodChannel node.arguments.positional.isNotEmpty) { final arg node.arguments.positional.first; if (arg is StringLiteral) { arg.value oh_v1_${arg.value}; } } super.visitConstructorInvocation(node); } }這段代碼的關(guān)鍵在于只修改位置參數(shù)里的第一個(gè)字符串也就是通道名。如果業(yè)務(wù)代碼把通道名定義成了常量比如static const kChannel xxx這種直接改字面量的方式就失效了。我當(dāng)時(shí)的處理是增加了一個(gè)“常量傳播”模式先掃描庫內(nèi)的常量定義建立“名字 - 值”的映射然后在所有引用點(diǎn)按映射替換。但要注意這會(huì)把復(fù)雜度提高一個(gè)等級(jí)建議第一版只在字面量場(chǎng)景跑通確認(rèn)整個(gè)管線沒問題后再擴(kuò)展。4.2 場(chǎng)景二無侵入的性能插樁想在關(guān)鍵渲染和消息處理函數(shù)上自動(dòng)加耗時(shí)統(tǒng)計(jì)又不改業(yè)務(wù)源碼。傳統(tǒng)做法是在每個(gè)頁面里手動(dòng)埋點(diǎn)侵入性強(qiáng)且容易忘。用 kernel 中間件可以在產(chǎn)物層自動(dòng)完成。我的實(shí)現(xiàn)思路比較取巧先在項(xiàng)目里寫一個(gè)獨(dú)立的插樁輔助庫probe.dart它提供兩個(gè)最簡(jiǎn)函數(shù)// probe.dart void markStart(String key) { // 記錄開始時(shí)間 } void markEnd(String key) { // 記錄結(jié)束時(shí)間并上報(bào) }然后把這個(gè)probe.dart編譯成一個(gè)小型 dill作為模板 component。變換時(shí)把模板里markStart/markEnd的方法調(diào)用節(jié)點(diǎn)復(fù)制到目標(biāo) Procedure 的開頭和結(jié)尾。核心代碼示意如下override void visitProcedure(Procedure node) { if (!_isInterested(node)) return; final body node.function.body; final bodyBlock body is Block ? body : Block()..statements.add(body); final startStmt _buildMarkStart(node.name.text); final endStmt _buildMarkEnd(node.name.text); final tryBlock Block()..statements.addAll(bodyBlock.statements); // 用 try/finally 包一層避免插樁破壞原有控制流 final tryStmt TryCatch() ..body tryBlock ..finallyBlock Block()..statements.add(endStmt); node.function.body Block()..statements.add(startStmt) ..statements.add(tryStmt); super.visitProcedure(node); }這段代碼只是思路示意真正落地時(shí)有一個(gè)關(guān)鍵坑從模板庫復(fù)制節(jié)點(diǎn)會(huì)引入對(duì)probe.dart庫的依賴。如果目標(biāo) dill 里沒有這個(gè)庫的注冊(cè)信息運(yùn)行時(shí)會(huì)報(bào)函數(shù)未定義。所以每完成一次變換我都會(huì)跑一遍“未解析引用檢查”把所有引用節(jié)點(diǎn)、庫依賴完整做好 link。4.3 場(chǎng)景三用自定義 Dart 實(shí)現(xiàn)替換引擎默認(rèn)行為OH 系統(tǒng)觸摸事件的坐標(biāo)縮放邏輯與 Android 不同業(yè)務(wù)層又不想在每個(gè)頁面適配。最直接的辦法是找到GestureBinding._handlePointerEventImmediately在 dill 里對(duì)應(yīng)的 Procedure然后把方法體換成我們自己寫的oh_pointer_adapter。實(shí)際操作分四步先寫一個(gè)新實(shí)現(xiàn)源文件oh_pointer_adapter.dart。在變換階段讀取該源文件或加載它編譯出的 dill 模板。找到目標(biāo) Procedure替換function.body為新實(shí)現(xiàn)的方法體。保留原方法的參數(shù)列表和返回值類型必要時(shí)把新實(shí)現(xiàn)里的入?yún)⒆鲆淮晤愋娃D(zhuǎn)換。這個(gè)操作看似簡(jiǎn)單卻是最容易翻車的地方。一個(gè)方法體的引用關(guān)系、泛型參數(shù)、局部作用域都與原庫的其他代碼綁定直接整體替換成另一個(gè)庫的 AST 節(jié)點(diǎn)類型簽名很容易出錯(cuò)。我的經(jīng)驗(yàn)是新實(shí)現(xiàn)的方法體獨(dú)立成函數(shù)在目標(biāo)方法體內(nèi)只插入一行“調(diào)用新函數(shù)”的代碼而不是整段替換。這樣既能改變行為又最大限度保留了原方法的局部上下文。5. 性能收益與取舍這件事到底劃不劃算5.1 為什么這比運(yùn)行時(shí)動(dòng)態(tài)代理更劃算有人會(huì)問既然只是平臺(tái)兼容那我在每個(gè)調(diào)用點(diǎn)包一層動(dòng)態(tài)代理不也一樣嗎確實(shí)能解決一部分問題但代價(jià)完全不同動(dòng)態(tài)代理每次調(diào)用都多一層函數(shù)跳轉(zhuǎn)熱點(diǎn)路徑上直接吃掉幀預(yù)算。動(dòng)態(tài)代理難以應(yīng)對(duì) AOT 編譯部分反射特性在 release 構(gòu)建下會(huì)被 tree shaking 直接清掉。代理邏輯必須常駐業(yè)務(wù)源碼侵入性強(qiáng)業(yè)務(wù)方會(huì)有很大阻力。kernel 中間件則完全不同變換發(fā)生在編譯期運(yùn)行時(shí)的調(diào)用路徑上沒有任何額外跳轉(zhuǎn)。插樁邏輯雖然會(huì)有開銷但它只出現(xiàn)在被插樁的特定方法里而且可以通過采樣率控制不會(huì)全鏈路無差別加成本。這就是標(biāo)題里“高性能運(yùn)行時(shí)加載”的核心原因——中間件不參與運(yùn)行時(shí)運(yùn)行時(shí)自然沒有中間件帶來的負(fù)擔(dān)。5.2 一組實(shí)測(cè)數(shù)據(jù)參考下面是我們?cè)跍y(cè)試設(shè)備上拿到的對(duì)比數(shù)據(jù)需要說明的是這只是模擬項(xiàng)目 X 的相對(duì)值不同設(shè)備、不同引擎版本差異會(huì)比較大主要看趨勢(shì)。指標(biāo)未接入中間件接入中間件無插樁接入中間件含插樁冷啟動(dòng)到首頁可交互2100 ms1520 ms1680 mskernel_blob.bin 大小38.5 MB39.1 MB41.6 MB平均幀耗時(shí)17.2 ms16.8 ms17.5 ms構(gòu)建增量耗時(shí)-4.5 s12 s冷啟動(dòng)的改善主要來自對(duì)啟動(dòng)路徑上平臺(tái)判斷分支的“瘦身”把原來一串 Android/iOS/Web 判斷直接改成了 OH 優(yōu)先的直通邏輯。插樁帶來的體積和構(gòu)建時(shí)間增長是可控的因?yàn)椴蓸勇屎妥钚≌Z句閾值卡得比較穩(wěn)。5.3 還能怎么進(jìn)一步優(yōu)化產(chǎn)物層變換后的 dill 里存在大量未被引用的舊模板節(jié)點(diǎn)跑一輪不可達(dá)節(jié)點(diǎn)刪除體積能再降 5% 左右。加載層把插樁標(biāo)記點(diǎn)預(yù)編譯成索引方法名 - 偏移量運(yùn)行時(shí)第一時(shí)間定位避免字符串比較。構(gòu)建層讓多條變換規(guī)則并行執(zhí)行或者只對(duì)變更過的庫重跑中間件能進(jìn)一步壓縮構(gòu)建時(shí)間。6. 常見問題與排查實(shí)錄6.1 版本不匹配導(dǎo)致解析直接崩潰現(xiàn)象BinaryBuilder 在讀取 dill 時(shí)拋異常提示 kernel binary format version 不對(duì)。排查思路先確認(rèn)這份產(chǎn)物由哪個(gè) Dart 版本的前端編譯器生成在 Flutter 構(gòu)建日志里找 CFE 版本號(hào)。用對(duì)應(yīng) SDK 下的 pkg/kernel 編譯中間件。還不行就用 hexdump 查看 dill 文件頭部的版本號(hào)和工具期望的版本比對(duì)。這個(gè)問題的根因就是版本不一致。后來我們把版本一致性檢查做成了中間件啟動(dòng)邏輯的一部分凡是工具版本和產(chǎn)物版本不匹配的直接停掉并打出清晰錯(cuò)誤不再帶到后續(xù)流程里。6.2 變換后 dill 體積膨脹嚴(yán)重原因通常是兩條一是每次變換都向 AST 里插入模板節(jié)點(diǎn)舊的不可達(dá)節(jié)點(diǎn)沒有被清理掉二是修改字符串字面量后原字符串仍被常量池或其他節(jié)點(diǎn)引用沒被回收。我們做的優(yōu)化變換結(jié)束后統(tǒng)一跑一輪 constant collector 和死代碼清理。對(duì)純前綴打標(biāo)場(chǎng)景使用原地更新而不是新建節(jié)點(diǎn)減少 AST 對(duì)象數(shù)量。最后序列化時(shí)開啟壓縮選項(xiàng)或者外部再套一層 gzip。6.3 熱重載后界面行為不一致現(xiàn)象執(zhí)行 hot reload 后舊變換狀態(tài)部分殘留新規(guī)則沒有全部生效。原因是 hot reload 默認(rèn)比較前后兩個(gè) kernel 的 diff如果中間件修改后的 dill 與原工程編譯出的 dill 不在同一棵 AST 上diff 結(jié)果就可能只包含部分變更。解決方案有兩個(gè)確保熱重載時(shí)也走同一套變換管線把新產(chǎn)物先變換完再參與比較。在入口處放一個(gè)版本號(hào)常量每次變換都把版本號(hào)遞增。熱重載時(shí)檢測(cè)到版本號(hào)變化直接走全量更新而不是差量 diff。6.4 調(diào)試小技巧把 AST 打出來肉眼對(duì)比我強(qiáng)烈建議做一個(gè) dump AST 的小工具把變換前后的結(jié)果導(dǎo)成文本再 diff比用 debugger 單步走快得多dart run tool/dump_ast.dart before.dill before.txt dart run tool/dump_ast.dart after.dill after.txt diff before.txt after.txt打印 AST 時(shí)優(yōu)先輸出庫名、類名、方法名、語句數(shù)量、字符串字面量不要直接全量打印整棵樹否則輸出量大到根本看不過來。6.5 規(guī)則匹配久了會(huì)失效Flutter 升級(jí)一次內(nèi)部包路徑和類結(jié)構(gòu)經(jīng)常變導(dǎo)致匹配規(guī)則失效。我們的經(jīng)驗(yàn)是把匹配規(guī)則設(shè)計(jì)成“基于 URI 節(jié)點(diǎn)特征”的雙因子模式。即使某個(gè)庫因?yàn)橐嫔?jí)改了內(nèi)部包路徑只要節(jié)點(diǎn)特征還吻合——比如構(gòu)造調(diào)用的參數(shù)個(gè)數(shù)、方法名前綴、字符串參數(shù)的值——規(guī)則就能繼續(xù)命中。這一招幫我們扛過了好幾次 Flutter 小版本升級(jí)。7. 工程化落地從個(gè)人腳本變成團(tuán)隊(duì)基礎(chǔ)設(shè)施7.1 建議的接入方式別讓每個(gè)開發(fā)者手動(dòng)跑中間件直接做成構(gòu)建插件更現(xiàn)實(shí)在 Flutter 構(gòu)建輸出后注冊(cè)一個(gè) hook自動(dòng)觸發(fā)變換。在 CI 流水線中加入“產(chǎn)物校驗(yàn)與報(bào)告”步驟變換前后 AST 差異、插樁覆蓋率、產(chǎn)物大小變化。生成人可讀的 patch report出問題時(shí)可快速回溯是哪條規(guī)則導(dǎo)致的。這套流程跑起來之后團(tuán)隊(duì)里不懂 kernel 的同事也能正常接入只需要看報(bào)告不需要碰 AST。7.2 后續(xù)擴(kuò)展方向規(guī)則可視化把配置中心做成云端下發(fā)客戶端拉取后執(zhí)行對(duì)應(yīng)變換邏輯比如灰度插樁、線上問題定位。與監(jiān)控平臺(tái)打通插樁數(shù)據(jù)統(tǒng)一走結(jié)構(gòu)化日志自動(dòng)上報(bào)。從 kernel 變換擴(kuò)展到 AOT 快照階段通過 VM snapshot 機(jī)制做類似的事情進(jìn)一步覆蓋 release 場(chǎng)景。7.3 一點(diǎn)個(gè)人體會(huì)我在實(shí)際做這個(gè)項(xiàng)目的過程中感受最深的是kernel 中間件最大的價(jià)值不在于“能改代碼”而在于它提供了一條低風(fēng)險(xiǎn)的適配通道。只要把它約束在構(gòu)建產(chǎn)物層理論上可以對(duì)任何歷史版本的 Flutter 應(yīng)用做定向修復(fù)完全不用等引擎升級(jí)。如果你也在做跨平臺(tái)系統(tǒng)適配建議先畫清楚加載鏈路再?zèng)Q定到底要在哪一層介入而不是一頭扎進(jìn)引擎源碼里。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
97久操| 成人午夜无码视频| 久re热视频| 久久性爱视频这里只有精品| 亚洲激情| 99热自拍| 五月天激情网图片 - 百度| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 亚洲 在线 性爱 | 亚洲精品无码一区二区| 开心五月丁香啪| 色五月情| av在线免费播放| 337p大胆噜噜噜噜噜91Av| 91色五月| 久草热8精品视频在线观看| 五月天激情网址| 天天草天天爽| 色综合久久久久久久久五月| 婷婷综合日本| 91欧美| 99久热这里有精品| 潮汕成人AV片在线| 丁香五月久久| 丁香五月色情| 亚洲av网站| 久久久久人妻| 《蜘蛛女》梁铮1995| 婷婷五月丁香花综合| 99在线69| 丁香婷婷五色月| 婷婷五月丁香综合桃花色网| 伊人激情影院| 六月婷婷影院| 伊人婷婷大香蕉| 伊人五月天| 天天干天天操天天干天天操天天干天天操 | 久久99热在线观看| 亚洲午夜精品久久久久久人妖| 无码人妻精品一区二区蜜桃色欲| 色色色色网站| 免费99情趣网视频| 五月天AV大香蕉| 美日韩成人| 丁香色啪综合| 26UUU欧美激情一区二区| 99网| 五月婷婷在线视频观看| 婷婷六月色丁香视频在线观看| 成人无码精品1区2区3区免费看| 啪啪六月婷婷| 快乐激情五月色婷婷| 亚洲乱码日产精品BD| 五月婷婷激情五月| site:xmssd.com| 色综合99无码 | 久久思思热视频| www999日韩精品| 丰满人妻一区二区三区| 久久东京热婷婷五月| 五月停停直播| 丁香五月婷婷色情综合| 久久日本wwww色| 激情五月婷婷丁香| av人人干| 激情久久综合网| 欧美三级欧美一级| 婷婷五月丁香综合桃花色网| 99国产在线精品视频| 五月精品| 思思热99在线视频| 99热国产国产| 婷婷99中文字幕| 久久九九激情五月天| 97操碰| 成人国产欧美大片一区| 色婷婷小说网| 久久久999精品| 色婷婷五月婷婷五月婷婷五月| 超碰在线观看成人视| 婷色五月天| 99热国产免费| 国产日韩精品SUV| 99热国内精品| 久七香蕉| 丁香五夜激情四射夜夜夜| 婷婷五月天色播| 婷婷五月天视频| 啄木鸟黑丝一区二区| 97久久精品| 日本三级日本黄色| 婷婷狠狠干| 丁香六月综合| 一本色道久久综合狠狠躁小说| 无码操B| 五月婷婷天天色| 成人五月天丁香婷| 国产av影片| 视频一区二区在线| 天天色中文字幕女优AV| 黄色片久久| 夜夜操天天干| 99色在线| 亚洲色综久久五月| 五月天婷婷青青草| 九九热视频免费的| 丁香五月人妻熟女| 五月婷婷在线观看| 婷婷五月AV| 夜夜涩涩涩| 9999三级片| 97爱综合| 日韩在线观看亚洲| 五月丁香六月激情综合 | 丁香六月婷婷色播| 1024操逼视频| 外国碰视频网站97| 六月婷婷激情| 97色碰| 生活片五区| 亚洲操B| 久久免费婷婷视频| 色五月综合在线| 午夜婷婷六月天| 五月色丁香国产在线视频| 91精品熟女| 五月天亚洲图片婷婷| 婷婷久久五月丁香| 天天综合五月| 久久久91| Av性爱网| 五月天黄色激情小说| 韩日在线熟女| 狠狠999| 五月激情视频网| 激情综合综合综合| 五月四色婷婷| 婷婷五月天在线观看免费| AV79| 婷婷五月天小说| 草综合14| 综合色99| 内射在线CHINESE| 嫩BBB槡BBBB搡BBBB| 色婷视频| 丁香五月天成人| 六月综合婷婷开心伊人| 成人国产欧美大片一区| 色色97丁香婷婷五月天| WWW·色色色·COM| 久久五月婷婷电影| 人妻尝试久久久久久久久久久久| 色导航色婷婷五月天在线观看| 色婷婷亚洲六月婷婷中文字幕| 99热只有这里有精品| 色婷婷狠狠18| 亚洲愉拍99热成人精品| 成人看片网站| 婷婷性爱五月天丁香网| 丁香综合网| 五月伊人综合| 婷婷色丁香六月| 久久丁香五月婷| 五月婷婷啪啪| 99热精品在线| 欧美碰碰| 麻豆科斗777| 久热最新视频| 99超级碰碰| 精品激情| 天堂美国久久| 久9久9热久热| 激情文学天天| 亚洲色五月婷婷| 色情五月天丁香社区| 色五月婷婷老师| www.婷婷com| 九九九九九九九九九九九九九国产精品| 亚卅毛片| 九九婷婷热| Av在线不卡一区| 久综合| 婷婷六月丁香久| 天天爽综合网| 天天日天天插| 久久一级免费黄色片| 大天天伊人| 久久网站免费亚洲| 五月天丁香| 日韩一级片| 婷婷五月综合基地| 天天插天天插天天日| 综合深爱五月| 另类视频五月天| www.久久99精品| 中文字幕网站在线观看| 五月色欧美| 婷婷 色 丁香 夜| 天天日天天色| 99五月婷| 午夜 外网 精品 在线| 婷婷六月五月| 白人荫道BBWBBB大荫道| 九九热自拍| 色五月婷婷视频| 九色91视频| 99re热视频这里只精品| 97久久久| 在线观看婷婷5月| 538在线精品| 天天操加勒比| 国产婷婷五月色情综合| 99热国品| 深爱五月激情网| 综合婷婷五月天| 色伦专区97中文字幕| 91人人澡人人爽人人看| www激情com| 婷婷视频网| 天色综合网| 五月丁香五月激情综合色综合| 婷婷综合视频| 伊人久久大香天蕉亚洲特级| 五月婷婷网站| 亚洲字幕AV一区二区三区四区 | 午夜不卡久久精品无码免费| 久久精品色| 天天干天天日天天操| 大伊香蕉精品视频在线| 激情小说婷婷小说| 99热18| 国产亚洲成AV人片在线| 97色色色视屏| 久久久久久久人妻| 91综合在线| 五月天.com| 免费无码毛片一区二区A片| 综合色播| 五月丁香色色网| 九伊人网| 天天影院色| 五月天婷a在线| 狠狠香婷婷五月| 91狠狠色| 婷婷久久五月| 五月婷婷影| 中文在线成人| 婷婷五月丁香六月| 激情婷婷九月| 99re热在线视频观看| 婷婷黄色网| 这里只有精品99www| 色婷婷六月天| 六月婷婷狠狠| 麻豆WWWCOM内射软件| 色婷婷免费视频| 秋霞AV美国| 美女久久婷婷| 岛国资源网| 激情五月色婷婷| 99人碰碰碰| 婷婷五月色| 丁香五月婷婷高清| 五月丁香六月婷婷色日| 三级三久久线久久99久目本WW| 色婷婷成人做爰A片免费看网站| 日韩无码色色| 超碰99久久| 日韩成人综合| 99视频激情四射| 91久草五月天婷婷| 99乱视频| 五月香蕉综合| 久操乱| 伍月婷丁香花全集| 中文在线成人| 日本三级大片| 五月丁香六月激情网| 成熟妇人A片免费看网站| 亚州激情网站无码| 国产99久久久国产精品免费看| 久久这里只有精彩| 亚洲亚洲人成综合网络| 成人精品99| 丁香亚洲色综合| 深爱五月网| 日韩五月婷婷| 成人片在线播放| 另类图片天天影视在线观看| 日产精品一线二线三线芒果| 五月天六月婷婷电影| avh片在线观看| 天天综合中文| 丁香婷婷六月天| 五月天开心网| 久久机热这里只有精品| 天堂成人久久| 91丨九色丨大屁股| 五月天激情视频网站| 久久ri精品视频| 激情五月婷婷开心网| 久久亚洲无码| 91碰碰| 亚洲亚洲激情| 丁香9月婷婷| 国产在线黄色| 五月天五月婷五月激情网| 91精品综合久久久五月天| 91se在线视频| 校园激情 亚洲| 丁香花婷婷五月天| 东京热免费视频| 丁香六月视频免费观看| 久久婷综合| 国产精品第一国产精品| 婷婷久久免费| xxx日本东京热| 久久精品系列| 超碰只有精品在线| 99色色网| 五月婷天天搞视频| 深爱五月综合网| 97亚洲精品| 99re8这里只有精品99re8热视频| 五月婷六月丁| 五月天婷婷xxx| 亚洲区在线| 久久九区| 五月花综合视频| 九月色婷婷| 五月天社区婷婷| 久久9视频| 天天做天天爱天天做| 欧美色五月| 日噜噜色| 亚洲最大成人综合网720P| 午夜婷婷久久| 天天橾夜夜爽| Va另类视频| 玖玖色综合网| 久草丁香婷婷五月天婷| 91精品刘玥| 人人播| 天天日天天草| 丁香5月婷婷| 热中文字幕| 激情婷婷网| 少妇熟女视频一区二区三区| 久久九九免费视频| 97色97干| 噜噜国产| 亚洲综合激情五月| 夜夜夜叫天天天做| 激情精品久久| 99免费热在线精品| AV在线免费网站| 情色五月天 网站| 99操碰| 五月天成人免费视频| 五月天综合区| 五月丁香婷婷五月色| 丁香婷婷五月激情| 啪色综合| 亚洲成人九九九| 激情色五月天| 激情都市另类| 精品国产乱码久久久久夜深人妻| 夜夜操狠狠操| 丁香五月六月综合激情| www.超碰在线| 午夜激情综合| 亚洲AV人人操| 综合视频久久| 久久久久亚洲AV成人无码电影| 日本VA视频| 日日操日日射| 色婷婷九月综合| 99在线观看这里都是精品| 亚洲激情综合| 91久操| 色婷婷av在线| 黄网在线播放| 新97人人上人人| 天堂中文国产| 99ri在线观看视频| 91色久| 五月丁香六月婷婷啪啪| 亚洲超碰在线| 久久只有精| 国产伦理精品高清在线观看网站一区二区| 激情色色| 99这里是99在线视频| 性日本激情| 超碰99在线观看| 久久精品99| 五月天激情图片| 99自拍视频网站| 五月婷婷人人人操| 狠狠综合| 综合狠狠干| 丁香五月AV综合激情| 综合狠狠五月婷婷| 开心五月色婷婷综合开心网| 色婷视频| 国产精品爽爽久久久久久| 可以看的av| 精品色色| 亚洲AV网站| 思思热在线播放| 色色色色色色网站| 欧美黑人巨大性生话| 亚洲国产精品二二三三区| 国自产拍偷拍精品啪啪一区二区| 99国产99| av无码电影| 久久久久久9| 婷婷视频网| 涩综合在线| 婷婷五月天xxx| 五月丁香婷庭在线| 天天干一干| 任我肏| 人人草人人舔| 99久久97| 色婷婷婷婷| www.99久久久| 国产AV国片偷人妻麻豆| 在线观看欧美3区| 丁香婷婷五月综合| av中文在线| 狠狠色激情在线| 伊人综合网4| 色色哒五月婷婷六月丁香| 成人免费高清在线播放| 丁香婷婷啪啪| 久久综合综合综合| 五月丁香免费视频| 综合色五月天| 天天射影院| 亚洲情欲| 精品五月花| 99热狠狠操| 婷婷精品视频| 亚洲性爱区无码区| 五月婷婷丁香| 激情综合丁香六| 人妻激情视频| 人人人人人人人人人草| 久久久久久人妻| 99这里只有精品|v| 五月色亭丁香| 99热最新地址在线| 色五月婷婷丁香五月| 色九区| 成人免费黄色短视频| www激情网站| 蜜臀av无码久久久久久久久| 色婷婷视频在线| 色婷婷小说| 五月丁香综合色婷婷| 操碰久| 秋霞午夜理论| 99热日| 丁香激情网| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 丁香婷婷成人网| 九九色逼| 偷偷操九九| 性韩日色婷婷五月天激情啪啪XXX| 青青草视频福利| 久久综合五月天| 99婷五月| 激情com| 丁香五月社区| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 色99久草在线| 男人天堂亚洲综合| 五月婷婷丁香大陆免费| 91a片爽| 激情五月天久久丁香| 色五月婷婷影院| wwwss在线观看| 国产免费av在线| 襙逼网| 91爱啪啪| www.com色播五月天| 五月天婷婷在线观看精品男人| 六月丁香网| 91狠狠色丁香婷婷综合久久狠丁香综合久久精品 | www综合久久| 五月激情综合婷婷| 999热这里只有精品| 亚洲精品网址| 婷婷综合爱| 无码免费人妻A片AAA毛片西瓜| 69久久99精品久久久久婷婷| 婷婷色五月在线视频| 白人荫道BBWBBB大荫道| 色色色色欧洲| 久久婷婷成人| 综合性爱网| 丁香成人视频| 在线播放 精品| 久久久久综合激动五月天| 五月丁香六月香香蕉| 日日操夜夜操中国无码| 国产精品久久久久久五月天加勒比| 99性视频| 99视频久久| 蜜臀99精品| 久久久久久久久久久jjjj| 怡红院99| 婷婷五月天激情四射| 亚洲不卡| 五月丁香久久综合| 婷婷五月综合网| 99热思思| 亚洲国产成人AV在线 | 最近中文字幕在线中文视频| 五月网激情| 爱操人妻| www.久久爱.com| 日本颜色视频人人爱| 激情综合色五月丁香| 大香蕉五月丁香| 丁香五月久久综合| 色婷婷基地 | 亚洲一个色| 啪啪激情网| 色娸娸综合网| 4399在线日本A片| 碰人人操| 婷婷色片| 婷婷九九| 丁香五月婷婷啪啪| 婷婷久久在线| 日亚二欧美| 伊人大香蕉在线视频| 99热精品在线免费观看| 久久久色情| 26uuu另类亚洲欧美日本一| 播丁香五月婷婷欧美| 婷婷五月免费观看| 欧美性猛交AAAA片黑人 | 青青草a在线| 免费AV播放| 天天狠狠婷婷在线| 九九视频在线观看视频6 | 婷婷五月中文在线| 成人做爰A片免费看视频| 思思视频这里是精品| 日本婷婷| 插插网爽妇五月丁香| 婷婷在线网| 婷婷激情五月综合丁| 天天干天天做| Va另类视频| 九九综合影音先锋| 欧美xx激情视频在线观看| 欧美久久久久久久久中文字幕| 婷婷六月丁| 五月天天综合| 五月婷婷色| 99热大全在线观看| 日本操B视频在线观看| 这里只有精品久| 九色成人AV在线| 色色色色色网| 亚洲激情视频在线观看| 国产人妻777人伦精品HD| 精品综合久久久久久五月天| 67久久| 色综合五月天| 69精品人人人人| 婷婷五月成人| 天天做天天爱天天做| 青青999| 色婷婷五月天视频在线| 精品99视频| 九九av| 色五月婷婷啪啪五月| 五月丁香六月停停停| 久久看婷婷| 再綫Av免费視品| 男人先锋久久| 99亚洲视频| 广东99色在线| 六月丁香开心婷婷欧美| 99热手机在线精品| 色偷偷狠狠| 日韩色五月| 五月丁香啪啪啪| 成人精品99| 久久人人添人人爽添人人片αV| 激情六月婷婷| 丁香五月天在线直播观看| 婷婷六月偷拍| 婷婷六月丁香五月| 日日.c| 人妻综合网| 五月丁香六月激情| 久久综合中文| 天天日天天做天天操| 久久久久8888| 亚洲情综合五月天| 中文字幕婷婷| 亚洲激情.com| 亚洲视频a| 五月天丁香花婷婷| www久| 五月天婷婷爱| 五月婷婷六月丁香综合视频在线| 五月丁香激情综合六月涩涩爱| 婷婷丁香六月| 色五月大| 五月丁香狠狠| 97色色色色色色色| 99视频网址| AA片在线观看视频在线播放 | 色色热日| 五月丁香啪| 91人操人人人操人| 久久aaaa片一区二区| 五月丁香六月婷| 无码人妻一区二区一牛影视| 精品久热| 91九色在线| 99热在线观看这里只有精品| 五月天婷婷综合久久| 欧美婷婷九月| .青娱乐天天操B| 日日色综合| 欧美黄色韩日网| 深爱五月天 开心网| 五月丁香操婷逼| 色99欧洲色19| 欧美情色电影一区二区| 六月婷婷开心| 久9久9热久热| 精品久久久人妻| 丁香五月婷婷动漫| 天天爽爽日日做做| 色婷久九| 香蕉中文在线| yjzz亚洲国产| 99∨VTV| 欧美成人A片AAA片在线播放 | 91丨九色丨东北熟女| 久久午夜丁香| 色吧网综合| 免费看欧美成人A片无码| 色婷婷综合网| 六月久久婷婷| 色九九九九| 日日夜夜爽| 午夜爱爱爱成人| 婷婷欧美色| 91色在线/日韩| 亚洲色图五月丁香| www.com.色色| 五月丁香综合久久夜夜| 草榴视频黄色网| 国产欧美精品AAAAAA片| 日本人妻伦在线中文字幕| 操91| 久9热| 午夜免费试看| 99在线观看视频| 综合啪啪| 久久999久久999久久999久久| www.五月天。com| 婷婷五月天激情在线观看 | 色亚洲婷婷| 丁香五月视频在线观看| 思思视频精品| 伊人综合网4| 国产欧美婷婷五月| 丁香五月成人论坛| 99色丁香婷婷综合网| 亚洲第一色色色色| 五月青青草综合| 99久久国产宗和精品1上映| 五月天婷婷一起草| 成人婷婷桔色| 情情五月天色| 操熟女成人网| 可以观看的AV| 婷婷五月天影院| 国产精品国产| 婷婷久草| 色婷婷五月天| 中文字幕无码人妻少妇免费视频| 91919191919久久成人视频| 91精品久久久久久久久久| 婷婷五月丁香基| 久久综合站| 婷色天堂| 99综合成人视频在线观看| 99人人干人人操| 在线视频99| www.五月婷婷久久.com| 激情五月深爱五月| 五月婷成人网| 五月综合精品| 五月丁香婷婷视频| 久久HD| www.婷婷| 曰韩五月丁香色婷婷无码| 96精品国产综合久久久久久| 99人人操人人操人人精| 久久女婷| 色六月天| 久久538| 日本一级一级一级一级| 色色99| 丁香五月色情av| 丁香婷婷午夜| 五月天婷婷色色| yazhouzonghesese| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 丁香啪啪中文字幕| 日本久久人| 日日夜夜狠狠婷婷色| 九九久久五月天综合伊人| 久久人妻视步| 在线另类| 超碰在线免费观看日韩| 天天综合色丁香| 26UUU一区二区| 1010日日无码| 婷婷色色丁香五月天| 97精品自拍| 97夫妻超碰| 涩 五月 婷婷 狠狠| 婷婷丁香五月天哟啪| 91婷婷五月天综合视频| 五月丁香六月激情| 五月色综合| 免费成人中文字幕| 成久综合视频| 国产偷人妻精品一区| 天天插天天射| 亚洲视频在线网| 日本99视频| 狠狠色婷婷六月激情网| 中文字幕在线观看视频www| 成人做爰高潮A片免费视频| 97色五月丁香婷婷| 大香蕉婷婷| wwwwww.色| 四色99久久| 182tv992tv人之初午夜免费观看| 影音先锋色婷婷| 五月天婷婷乱| 婷婷中文字幕| 日逼影音先锋AV男人资源站| 婷婷色五月婷婷姐妹| 色 色 色综合com| 色婷婷亚洲婷婷| 婷婷综合一二三| 色婷婷五月天激情久久| 97人人搞| 99热亚洲只有色| 激情综合5月| 这里只有精彩视频| 婷婷色色综合| 激情网站五月| www久久艹| 操碰色一区就去操| 国产99美少妇| 丁香五月色五月| 色婷网站| 99热国内| 成人短视频在线| 另类图片五月天婷婷| 欧美日韓成人亚洲精品另类| 996热re视频精品视频| 男女av免费看| 五月丁香啪啪激情| 天天婷婷操| 婷婷伊人久久| 9999综合99综合人| 成人欧美Va| 久久婷婷五月| 91色逼| 五月婷婷综合丁香视频| 婷婷五月在线影院| 亚洲在线激情婷婷五月| 五月丁香啪啪啪啪| 国产性爱一级| av中文网站| av中文网| 精品综合久久久久久五月天| 精品久久人妻| 91婷婷搞| 日日夜夜天天| www.一起草av| 五月停停丁香| 97精品人人A片免费看| 日本怕怕视频| 日韩成人av在线| 九九热这里只有精品9| 激情婷婷丁香色五月综合| 欧美色色色色色| 99热99在线| 久久狼人天堂| 久热黄色| 中文字幕激情综合| 五月婷婷丁香六月| 五月丁香六月婷婷网| 日韩精品呦呦va| 五月天婷婷黄色| 丁香色婷婷色手机免费在线| 婷婷永久在线| 国产精品美女久久久久AV超清| 色五月激情问网站| 色区久久| 开心 五月 综合| 色色综合网站| 五月天激情小说婷婷| 人妻内射视频| 丁香久久| www.久久久久| 亚洲激情网站无码| 四川BBB搡BBB搡多人乱亂| 成人视频九九| 国产又色又爽又黄又免费| 人人色性网| 欧美成人一区二区三区在线视频| 五月熟妇婷婷久久| 亚洲精品无码99热| 激情综合网亚洲色图| 亚洲无AV在线中文字幕| 五月丁香六月欧美综合| 可以看的av| oumeisesewang| 五月天色丁香| 日本精品。999| 亚洲无AV在线中文字幕| 99视频这里只有久久精品 | 五月天激情久久| www.综合久久.com| 五月婷婷熟女| 精品婷婷五| 伊人综合网站| 99热视精品| 狠狠色丁香久久综合婷婷亚洲成人福利| 五月天另类小说| 69精品无码一区二区三区| 超碰人人91| 五月丁香999| 五月丁香色色| 99色区| 久草热在线视频| 婷婷五月丁香基| 婷婷婷婷午夜| 人人摸人人澡人人| 91久久1118| 97色在线| 婷婷六月激情啪啪| 精品婷婷丁香五| 99精品免费欧美小视频| 91精品婷婷国产综合| 成人视频在线免费播放| 超碰av在线| 婷婷丁香六月| 操逼在线视频| 97婷婷狠狠久久综合9色| 玖玖综合色| 丁香五月婷婷姐| 久久免费少妇高潮99精品| 婷婷综合在线| 久久精品99| 春色激情| 色欲久久久久久综合网综合网| 天天摸天天舔在线视频| 婷婷.com| 99精品视频偷拍| 99热20| 欧洲区自拍| 色婷婷操逼| 九九九成人在线视频| 伊人五月天久久| 九九热精品| 射久久丁香五月| www,色婷婷| 免费视频WWW在线观看网站| 婷婷激情五月天激情| 色婷婷综合久久久久| 国产69久久久欧美黑人A片| 26uuu欧美日本| 99综合色色色| 五月婷婷激情在线| 色噜噜婷婷| 五月丁香婷婷啪啪综合网| 欧日韩成人| 久久97久久99久久综合欧美| 91黄操| 五月丁花色综合网| 秋霞A V毛片| 婷色天堂| 色五月婷婷综合| 天天插夜夜爽| 99re视频在线播放| 亚洲成人丁香花| 天天干天天干天天干天天干天| 色婷婷狠狠干芒果TV| 婷婷久久五月| 精品导航在线x不卡| www.色99| 欧美超级视频97| 五月的丁香六月的婷婷| 婷婷五月综合社区| 天天综合久久| 日本综合久久| 欧美在线视频99| 性爱视频久久| 久久五月天丁香| 五月丁香青草综合啪啪| 极品人妻VIDEOSSS人妻| 久久天天天| 精品人妻伦一二三区久久| 先锋男人91资源| 五月丁香激情婷婷综合| 狠狠做深爱婷婷久久综合一区| 婷婷五月激情四月综合 | 色99网| 欧美日韩AAA| 欧洲亚洲免费视频区| 九九99热| 丁香五月玖玖| 五月天啪啪| 超碰chaompinm| 婷婷六月啪啪| 丁香五月23111| 五月色视频| 五月婷婷啪啪网| 操操熟女| 五月婷婷综合在线视频| 91操人| 五月天婷婷免费| 思思热在线精品视频| 涩五月丁香| 26uuu国产色| 五月丁香激情四射综合| www.久久爱.c n| 超级碰碰99| 69超碰在线| 嫩草AV久久伊人妇女超级A| 99热这里只有精品2| 五月婷婷天堂| 日日干天天| 色五月丁香伊人五月| 五月天色婷婷基地| 99久久成人| 袁子仪视频观看| 激情五月黄色小说| 狠狠综合| 色色色综合网| 激情99热| 丁香五月在线自慰| 8区视频在线| 色婷婷激情| a在线免费v| 伊人三级激情| 婷婷五月中文字幕| 丁香狠狠操| 密视AV综合在线| 91人人看| 久久99免费视频网站| 操日本99| 情色五月天 网站| 91人在线观看| 亚洲精品久久久久久久久久飞鱼| 亚洲欧洲中文日韩久久AV乱码| 大香蕉人妻| 丝袜大香蕉| 五月婷婷色色| 国产做A爰片毛片A片美国| 五月激情啪啪| 乱精品一区字幕二区| 丰满人妻妇伦又伦精品国产| 99精品在线观看| 国产精品99久久久久久久女警| 超碰av在线| 三男玩一女三A片| 国产毛多水多女人A片| 少妇人妻丰满做爰XXX| 九九色综合九九色| 久久婷婷亚洲| 五月综合激情| 香蕉久久国产AV一区二区| 久久无码成人| 99色在线观看视频者| www.久久色.com| 人妻在线观看视频| 色综合久久88色综合天天| 免费AV在线网址| 91好好热日本在线| 丁香五月婷婷啪啪| 亚洲国产精品五月天| 五月深爱婷婷| 99青青草| 99乱视频| 中文AV在线观看| 99无码视频| 中文字幕日产A片在线看| 婷婷香草网| 一起草日本| 国产亚洲网站在线| 99久久久久| 丁香婷婷丁香五月欧美人| 天天拍夜夜爽日日| 婷婷五月天成人小说| 超碰不卡在线| 色五月在线播放| 中文字幕 中文字幕明步| 色欲AVV| 五月婷婷色播| 婷婷色五月噜噜| 99精品在| 9九色首页| 婷婷丁香十月| 婷婷久综合| 色综合偷拍| 久久婷婷五月综合97色一本| 丁香婷婷啪啪啪| 26uuu| 五月婷婷综合在线| 操操综合网婷婷| 亚洲综合999| 婷婷丁香色五月天久久88| 婷婷五月天激情亚洲小说| 色偷偷五月天| 久久 婷婷 五月天| 99国产精品白浆在线观看免费| 亚洲国产黄色电影| 亚韩在线视频| 婷婷五月丁香伊人网| 99热99热99热99热| 亚洲精品国产成人AV在线| 亚洲视频一区| 2016日日夜夜操| 激情com| 色欲AV导航| 九九热中文| 乱精品一区字幕二区| 色青五月天| 国产婷婷色五月| 婷婷在线操| 五月婷婷自拍| 亚洲午夜电影| 婷婷五月天成人| 日韩综合成人| 91久久免费| 97碰碰视频在线观看| 色色永久| 黄色AAAAA| 成年人丁香五月| 欧美A片在线视频免费观看| 五月丁香六月婷| 亚洲激情精品| 120分钟婬片免费看| 一区操| 婷婷五月天 偷拍| www.色婷婷.com| 少妇出轨做爰高潮A片| 九月激情综合| 婷婷五月天日日日干干干| 99久久久免费| 久草x色在线观看99| 色色综合无码| 精品人妻一区二区| 国产肥白大熟妇BBBB视频| 91ncm视频| 婷婷五月噜噜| 99精品综合| 婷婷六月综合基地| 九九九午夜影院成人| 99久在线精品99re8热| 99色在线视频观看| 99热20| 五月婷在线观看| 丁香五月婷婷激情中文| 99热这里只有精品在线免费| 另类精品视频在线观看| 久久精彩视频18| 亚洲丁香五月综合| 五月婷六月| 教师性爱毛片| 色婷婷欧美在线| 99综合免费视频| se婷97| 综合综合网| 天堂成人A片永久免费网站| 97在线/亚洲| 嫩草乱码一区三区四区| 天堂无码人妻精品AV一区| 色五月婷婷色| 国产成人高清| 综合久久五月| 久久婷婷操| 99成人| 久久女婷| A片一曲| 99热天堂| 日韩五月丁香| 亚洲AV久久久久久久久久久久久久久久| 99在线免费视| 久久人妻久久| 99日本黄站| www.狠狠| 夫妻超碰在线| 天天日,天天干,天天操| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 91久久久久久| 91日视频| 五月天婷婷综合免费| AⅤ在线播放网| 丁香五月综合在线播放| 99精品国产乱码久久久人妻| 婷婷丁香77777| 色久天| 丁香五月色| 91精产品自偷自偷综合| 激情五月天伊人影院| 在线免费观看激情视频| 天天色综合网1| 日韩青青| 婷婷五月天首页| 99欧美热| 五月婷婷丁香av| 婷婷五月天桃花网| 丁香五月亭亭六月综合激情网| 激情五月天网| 99热免费精品热久久66| 激情av在线| 97婷婷狠狠| 大香蕉综合| 激情性爱网站| 丁香五月中文字幕色播| 国产肏屄大片| 九九热精品视频在线观看| 狠狠色色综合| 成人av在线电影| 丁香伊人网| 这里只有精品免费| 99re热精品视频国| 色五月av| 5月丁香综合网| 丁香久久在线| 天天综合永久| 天天婬色综合| 99无码精品| 亚州第一A片| 另类图片激情五月| 成人短视频在线观看| 香蕉综合在线| 五月色情婷婷开心五月天| 97色婷婷| 久久五月丁香综合17C| 色色婷婷综合| 婷婷五月天欧美| 丝袜激情网| 日韩操人| 2025最新亚洲激情在线| 玖玖婷婷色欲| 亚洲99热| 国产免费AV在线| 成人精品在线| 色婷綜合网| 婷婷久久色| 丁香五月婷婷啪| 热中文字幕| 一本色道久久88综合日韩精品| 丁香成人色情五月天| 色99婷婷五月天| 五月婷婷综合激情| 丁香伊人激情| 免费一区二区三区| 成人网在线视频| 五月丁香美女| 91男人操女人视频| 色色色成人网| 久久人人九九| 99久久网站| 天天成人五月天| 丁香狠狠操| 五月亭亭六月天| 五月天婷婷色播| 99精品国产在热久久婷婷| 超碰a女人的天堂| 99热最新地址在线| 超碰只有精品在线| 99热这里只有精品22| 人人人操| 男同91 | 字幕网AV中文字幕| 日日操夜夜撸| 九九热只有这里精品| 在线观看免费观看在线9久| 久久激情五月| 天天看片日日夜夜| 中文字幕人妻一区二区| 亚洲第一黄网| 天天草天天日| 99久热精品在线| 色婷婷丁香五月| 熟女激情五月天| 色综合区| 丁香五月花| 五月婷婷丁香在线| 五月婷六月| 农村熟妇高潮精品A片| 婷婷成人视频| 亚州激情在线视频| 97性高潮久久久| 操逼六区| 丁香五月综合在线播放| 91久久色| 五月天色小说| 大香蕉婷婷五月天| 丁香五月婷婷激情123| 国产婷婷综合在线免费视频| 婷婷99狠狠躁天天久久久九九九| 久热中文字幕| 亚洲十月婷婷综合| 影音先锋一区二区三区| 色天使久久综合| 能看的AV| 涩综合婷婷| 99无码免费视频| 色婷婷888| 久久九九激情五月天 | 五月婷俺去也| 色色婷婷婷丁香五月天| 开心五月婷婷| 色爱亚洲| 开心五月色婷| 五月激情啪啪| 97丁香视频| 久热99| 天天色图| 天天插插天天| 激情精品久久| 丁香九月久久| 久久ri精品视频| 9色在线| aa久久| 99这里只有精品视频| 精品国产人人爱人人| 久久多色| 久99精品视频| 超碰9799| 欧美一级色| 亭亭色网| 亚洲色99| 丁香五月天啪啪激情综和网| 玖玖国产视频一区| 婷婷午夜综合| 天天色中文字幕女优AV| 欧美色五月| 丁香婷婷六月天| 色无码| 五月天激情小说欧美激情| www天天干|