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

ARTICLE DETAIL

資訊詳情

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

Flutter三方庫NDK鴻蒙化:從工具鏈遷移到dart:ffi調(diào)用實戰(zhàn)

Flutter三方庫NDK鴻蒙化:從工具鏈遷移到dart:ffi調(diào)用實戰(zhàn) 按理說把 Android 上驗證了很久的 Flutter 三方庫遷到鴻蒙絕大多數(shù)純 Dart 的模塊都能一路順風。真正的坎兒往往出現(xiàn)在那些“只要跑起來就必須碰底層”的庫上圖像壓縮、音視頻編解碼、加密、科學計算——這些庫在 Android 側(cè)幾乎清一色是靠 NDK 編譯出 .so再通過 JNI 和 Flutter 插件層打交道。一旦到了鴻蒙Java 代碼沒了JNI 環(huán)境換了Android 的 Bionic libc 變成了鴻蒙生態(tài)自己的系統(tǒng)庫原先的 .so 直接搬過去大概率連加載都加載不起來。這篇就來把 Flutter 三方庫的 NDK 部分真正“鴻蒙化”這件事整個捋一遍從鴻蒙 NDK 工具鏈的差異到 CMake 工程遷移再到 dart:ffi 調(diào)用鏈路的改造和運行時踩坑全是實際操作層面的東西。我會用一個“帶原生 FFT 計算能力的 Flutter 圖像處理庫”作為貫穿全文的例子它和社區(qū)里常見的flutter_image_compress、ffmpeg_kit_flutter、sqlite3_flutter_libs這類庫的適配路徑是一樣的。如果你手里的庫也是“純 Dart 殼 Android NDK 原生實現(xiàn)”的結(jié)構(gòu)按這篇的鏈路走下來應(yīng)該能少走不少彎路。1. 為什么 Flutter 三方庫一碰 NDK鴻蒙適配就成了硬骨頭1.1 理想很豐滿pure Dart 幾乎零成本先看清楚哪些部分根本不用折騰。Flutter 三方庫大體可以分成三類純 Dart 庫整個庫就是一個 pub 包內(nèi)部全部用 Dart 實現(xiàn)不依賴任何平臺原生代碼。遷到鴻蒙幾乎不需要付出任何成本因為 Flutter 的鴻蒙運行時本身已經(jīng)把 Dart VM、渲染引擎那套東西打通了Dart 代碼層面沒有任何感知。聲明式插件Android 端只是用 Kotlin/Java 寫了少量平臺通道代碼沒有 JNI、沒有 C/C 編譯產(chǎn)物。這時候鴻蒙化主要是把 Kotlin/Java 邏輯翻譯成 ArkTS工作量可控。帶 NDK 的三方庫Android 端有android/src/main/cpp或externalNativeBuild編譯出若干 .soJNI 層負責轉(zhuǎn)發(fā)。這類庫才是最難啃的骨頭因為牽涉到 ABI、系統(tǒng)庫、鏈接器、FFI 調(diào)用約定一整套底層鏈路。你在鴻蒙上大概率遇到的場景是第二種、第三種混合體。不少 flutter 插件在 Android 端又寫了 Kotlin 又寫了 CMake比如調(diào)用 OpenCV、FFmpeg、OpenSSL 的庫基本都是這樣。純 Dart 層可以“白嫖”原生層必須重來。1.2 現(xiàn)實很骨感NDK 產(chǎn)物的 ABI 差異與系統(tǒng)庫差異很多人一開始會覺得Android 的 .so 都是 ARM64 的鴻蒙手機也是 ARM64 的直接把libxxx.so拿過去不就行了實測下來的結(jié)論是不是所有 CPU 架構(gòu)一樣就能通用。這里面的差異主要集中在三塊。第一是系統(tǒng)庫符號集。Android 的 NDK 運行時用的是 Bionic libc鴻蒙 Native 側(cè)用的是自己的 libc 實現(xiàn)。Android 上的很多 helper API比如__android_log_print、android_dlopen_ext這類在鴻蒙上壓根沒有或者被替換成了OH_LOG_Print、dlopen這類不同入口。如果一個第三方庫在 C/C 代碼里直接寫了 Android 特有的系統(tǒng)調(diào)用鏈接到鴻蒙上就必然報 undefined symbol。第二是C 標準庫的鏈接方式。Android NDK 默認可以選c_static或c_shared鴻蒙 CMake 工具鏈也支持類似模式但兩者的 STL 頭文件版本、動態(tài)庫產(chǎn)物名libc_shared.so不完全一致。如果你在 Android 上把 STL 靜態(tài)編進 .so在鴻蒙上直接復用偶發(fā)崩潰往往就出在 libc 的 ABI 兼容性上。這種坑最惡心因為它不是一上來就崩而是跑到某個邊界條件突然 SIGSEGV。第三是構(gòu)建工具鏈本身。Android NDK 的 CMake toolchain 文件是android.toolchain.cmake鴻蒙的是ohos.toolchain.cmake。兩個工具鏈的 target triple、系統(tǒng)頭文件路徑、鏈接器參數(shù)全都不一樣。所以鴻蒙化不是什么“改個 ABI 參數(shù)重新編譯”而是要切一套完整的構(gòu)建工具鏈。還有一個容易忽略的點鴻蒙 Native 動態(tài)庫的符號可見性管理比 Android 更嚴格。很多庫在 Android 上能跑是因為 Bionic 對未導出符號的容忍度比較高鴻蒙 CMake 默認開啟CXX_VISIBILITY_PRESET hidden你沒有主動導出的函數(shù)外面就是看不見。適配的時候就別再指望“編譯過了就一定能動態(tài)加載”符號導出這一步要專門檢查。2. 鴻蒙的 Native 能力長什么樣NDK 機制對照拆解2.1 鴻蒙 NDK 的開發(fā)入口和承載形態(tài)鴻蒙的 NDK 不是和 Android NDK 平行的一套東西它更準確地說應(yīng)該叫“Native 開發(fā)套件”隨 DevEco Studio 的 SDK 一起分發(fā)。裝好 DevEco Studio 之后SDK 目錄下會有一個native文件夾里面能看到sysroot、toolchains、llvm、cmake、build-tools這些子目錄結(jié)構(gòu)上和 Android NDK 有很強的既視感但你要記住這套工具鏈編譯出來的 .so 只能跑在鴻蒙環(huán)境里。在工程層面DevEco Studio 創(chuàng)建 Module 時可以直接選“Native C” 模板生成的結(jié)構(gòu)一般長這樣entry/ ├── src/main/ │ ├── cpp/ │ │ ├── CMakeLists.txt │ │ └── native-lib.cpp │ ├── ets/ │ └── module.json5 └── oh-package.json5src/main/cpp底下就是 C/C 源碼和 CMakeLists這跟 Android Studio 的externalNativeBuild思路非常接近。但要注意一個關(guān)鍵差異Android 的構(gòu)建流程是 Gradle 去調(diào) CMake鴻蒙的構(gòu)建流程是 hvigor 去調(diào) CMake。這也意味著很多build.gradle里的 NDK 配置比如abiFilters、arguments、cFlags在鴻蒙工程里沒有對應(yīng)位置需要換到build-profile.json5和 CMakeLists 里來表達。另外鴻蒙 Native 層對外暴露的 API 入口主要有兩類Node-APIN-API為 ArkTS 與 C/C 之間的互操作設(shè)計頭文件是napi/napi.h。你可以把它理解成“鴻蒙生態(tài)里的 JNI”但它不依賴 Java VM走的是 Node.js 風格的napi_env。直接 C ABI如果你的 C/C 庫并沒有和 ArkTS 有太多交互只是想被某個運行時加載并調(diào)用純函數(shù)那就完全可以不碰 N-API直接暴露 C 風格的導出函數(shù)讓調(diào)用方用 dlopen/dlsym 或者 dart:ffi 去拿到函數(shù)指針。2.2 JNI、N-API、dart:ffi 的選型邏輯把三方庫的 native 部分鴻蒙化之前必須先想清楚你的 Flutter 代碼最終要通過什么方式調(diào)到底層 C/C 函數(shù)。常見的有三條路。第一條路JNI 思路平移成 N-API。如果你原來的 Android 插件里Kotlin 代碼通過System.loadLibraryexternal fun去調(diào) JNI那么在鴻蒙上最自然的對應(yīng)是把 Kotlin 換成 ArkTSJNI 換成 N-API。這種做法的好處是插件結(jié)構(gòu)不變ArkTS 側(cè)通過napi注冊的接口拿到 native 對象/函數(shù)壞處是你需要為所有函數(shù)都寫一層 N-API 封裝橋接代碼量不小。第二條路Flutter 側(cè)直接 dart:ffi。這是我認為在大多數(shù)場景下最值得優(yōu)先考慮的路線。dart:ffi是 Flutter/Dart 語言自帶的 C 互操作機制不依賴任何平臺通道直接在 Dart 側(cè)final dylib DynamicLibrary.open(libfastmath.so); final fftCompute dylib.lookupFunctionInt64 Function(Int64), int Function(int)(fastmath_fft);鴻蒙的 Flutter 運行時里DynamicLibrary.open對應(yīng)的是底層dlopen只要你把編譯好的 .so 正確打進了鴻蒙應(yīng)用包里dart:ffi 就能直接解析出函數(shù)指針。這條路的好處是繞過 N-API 這層中間翻譯Flutter 側(cè)代碼在 Android 和鴻蒙兩端幾乎可以復用同一套 FFI 綁定邏輯。第三條路純 N-API 平臺通道。在 ArkTS 層調(diào)用 N-API 函數(shù)再用 MethodChannel/EventChannel 把結(jié)果傳回 Flutter。這條路一般不推薦因為它等于在“Flutter → ArkTS → N-API → Native”之間加了兩層橋接序列化和跨線程調(diào)度的開銷會把原生性能優(yōu)勢吃掉大半。簡單總結(jié)一下能直連 C ABI 就優(yōu)先 dart:ffi必須和 ArkTS 界面交互才考慮 N-API絕對不要三層橋接疊著用。3. 實操把帶 CMake 的三方庫一步步拉進鴻蒙3.1 準備一個可復現(xiàn)的工程基線為了講得具體一點我假設(shè)你手里有個叫flutter_fastmath的三方庫。Android 端它的結(jié)構(gòu)大概是這樣的flutter_fastmath/ ├── android/ │ ├── build.gradle │ └── src/main/ │ ├── cpp/ │ │ ├── CMakeLists.txt │ │ ├── fastmath.cpp │ │ └── jni_bridge.cpp │ └── kotlin/com/example/fastmath/FastmathPlugin.kt ├── lib/ │ └── fastmath.dart └── pubspec.yamlfastmath.cpp里是真正干活的 FFT 計算代碼對外暴露一個純 C 接口// fastmath.h #ifdef __cplusplus extern C { #endif int64_t fastmath_fft(int64_t input_len, float* input, float* output); #ifdef __cplusplus } #endifjni_bridge.cpp里做的只是把 JNI 的jfloatArray轉(zhuǎn)成float*然后調(diào)用fastmath_fft。Kotlin 側(cè)再通過external fun暴露給 Dart 的平臺通道。這個結(jié)構(gòu)在 Android 上寫得沒毛病但到了鴻蒙化的時候你會發(fā)現(xiàn)最核心的有兩件事要改一是 CMake 構(gòu)建腳本要從 Android 工具鏈切到鴻蒙工具鏈二是 JNI 橋接層要么改成純 C ABI 讓 dart:ffi 直接調(diào)要么改成 N-API 讓 ArkTS 調(diào)。我下面給的方案是切掉 JNI走純 C ABI dart:ffi這也是我認為最干凈、性能最直接的方式。3.2 重寫 CMakeLists 并接入鴻蒙 SDK 工具鏈在鴻蒙 Module 的src/main/cpp里CMakeLists.txt 需要完全重寫。Android 版本里常見的寫法是這樣的cmake_minimum_required(VERSION 3.22.1) project(fastmath LANGUAGES C CXX) add_library(fastmath SHARED fastmath.cpp jni_bridge.cpp) find_library(log-lib log) target_link_libraries(fastmath ${log-lib}) set_target_properties(fastmath PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON)鴻蒙版本里我建議這樣寫cmake_minimum_required(VERSION 3.22.1) project(fastmath LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 在鴻蒙 toolchain 環(huán)境下默認符號隱藏我們需要顯式開啟對 Dart 可見的符號 set(CMAKE_CXX_VISIBILITY_PRESET default) set(CMAKE_VISIBILITY_INLINES_HIDDEN OFF) add_library(fastmath SHARED fastmath.cpp) # 鴻蒙的日志庫接入方式這里是 hilog 而非 Android 的 log find_library(hilog_ndk hilog_ndk) if(hilog_ndk) target_link_libraries(fastmath ${hilog_ndk}) endif() target_compile_definitions(fastmath PRIVATE OHOS_PLATFORM1)關(guān)鍵點有兩個我沒有再把jni_bridge.cpp編譯進去因為如果走 dart:ffi 直連JNI 橋接文件已經(jīng)沒有存在的意義。除非你還要保留一份 Android 端的舊實現(xiàn)那可以繼續(xù)編但這就需要在 CMake 里做平臺分支了。CMAKE_CXX_VISIBILITY_PRESET我特意設(shè)成了default。前面說過鴻蒙工具鏈默認隱藏符號如果某個三方庫的 C 函數(shù)沒有被__attribute__((visibility(default)))顯式標注那么 dart:ffi 的lookupFunction會直接找不到符號。與其去改一堆源碼不如直接在 CMake 層面放開默認可見性。如果你的三方庫還依賴了其他預(yù)編譯的 .a 或者源碼子模塊只要把對應(yīng)源碼目錄add_subdirectory或者target_link_libraries引進來就行。但一定要保證那些子模塊的 CMakeLists 里沒有硬編碼 Android 的ANDROID_ABI這類變量否則工具鏈一換就破裂。3.3 構(gòu)建 so 產(chǎn)物并處理包體路徑工程里光有 CMakeLists 還不夠還要確認 hvigor 在構(gòu)建的時候真的去編譯了 C/C 源碼并把這個 .so 打進了最終產(chǎn)物。換到鴻蒙工程之后原來 Android 的abiFilters配置要落到build-profile.json5里類似這樣{ app: { products: [ { name: default, signingConfig: default, targets: [ { name: default, runtimeOS: HarmonyOS } ], buildOption: { abiFilters: [arm64-v8a] } } ] } }abiFilters決定 hvigor 調(diào) CMake 時給工具鏈傳哪個架構(gòu)參數(shù)。如果你的三方庫只適配了 arm64 手機那先只編arm64-v8a就夠了。如果還要支持模擬器可以把x86_64也加進來但也要確保源碼能在 x86 上編譯通過。在 DevEco Studio 里直接點一下構(gòu)建稍等片刻就能在entry/build/default/intermediates/libs/default/arm64-v8a下看到libfastmath.so。這里有一個很多新手會掉進去的認知偏差如果發(fā)現(xiàn) .so 沒有生成優(yōu)先去看 hvigor 的構(gòu)建日志里有沒有觸發(fā) CMake 配置。有時候你在src/main/cpp放了 CMakeLists但 module 的build-profile.json5里沒有正確聲明nativeSource路徑hvigor 會完全跳過原生編譯這一步。3.4 Flutter 側(cè) dart:ffi 調(diào)用鏈路的改造編譯出 .so 之后接下來就是讓 Flutter 端的 Dart 代碼能加載它。如果你的 Flutter 插件原來是通過 MethodChannel 把數(shù)據(jù)送到 Kotlin 再進 JNI 的現(xiàn)在可以改成這樣import dart:ffi; import dart:typed_data; final DynamicLibrary _fastmathLib _openFastmathLib(); DynamicLibrary _openFastmathLib() { return DynamicLibrary.open(libfastmath.so); } final int Function(int) _fftEntry _fastmathLib .lookupFunctionInt64 Function(Int64), int Function(int)(fastmath_fft);函數(shù)調(diào)用的時候把Float32List的數(shù)據(jù)指針直接傳進去避免 Dart 和 C 之間的數(shù)組拷貝Float32List fft(Float32List input) { final output Float32List(input.length); final inputPtr input.buffer.asByteData().getUint64(0); // 實際會走 package:ffi 的 helper // 用 Pointer 的方式更規(guī)范使用 allocate 后拷貝數(shù)據(jù) // 這里給偽代碼示意“直接把指針交給 C” _fftEntry(input.length); return output; }你可能會注意到dart:ffi 的最高頻寫法是用PointerT和lookupFunction...這套 API 在 Flutter 的鴻蒙運行時上也是被支持的不需要額外引入平臺相關(guān)依賴。如果一個三方庫在 Android 端本身就已經(jīng)暴露了一套 C ABI很多庫如 sqlite3、libjpeg-turbo 都是這么設(shè)計的那鴻蒙端直接復用這套 ABI 是最省力的方案。真正需要補寫的是插件注冊邏輯鴻蒙 Flutter 插件和 Android Flutter 插件在工程組織上不是同一套目錄。社區(qū)里常見的做法是在 pub 包下增加ohos目錄編寫 ArkTS 插件入口然后在pubspec.yaml里聲明鴻蒙平臺的實現(xiàn)。不同插件模板的細節(jié)有差異但核心邏輯是一致的確保最終打進 HarmonyOS 安裝包的 .so 的 soName 和你 Dart 層DynamicLibrary.open的名字能對上。這里最常見的翻車點是 hvigor 把 so 打到了entry/libs路徑而 Flutter 引擎找不到導致運行時dlopen failed。4. 編譯、鏈接、運行三階段踩坑實錄4.1 編譯期坑工具鏈版本與標準庫鏈接我最早適配一個用到大量 C17 特性、還依賴 OpenMP 的庫時第一個攔路虎就是工具鏈版本不一致。DevEco Studio 自帶的 NDK 對應(yīng)的 clang 版本、sysroot、頭文件路徑和 Android NDK 完全不是一個系列。某些第三方庫的 build 腳本里寫死了-isystem ${ANDROID_NDK}/sources/cxx-stl/llvm-libc/include這種路徑一旦工具鏈換成鴻蒙腳本直接就廢了。解決辦法是用 CMake 的 toolchain file 去覆蓋而不是去改源碼里的路徑。在構(gòu)建時通過參數(shù)指定cmake -DCMAKE_TOOLCHAIN_FILE/path/to/ohos-sdk/native/build/cmake/ohos.toolchain.cmake在 DevEco Studio 里這個參數(shù)由 hvigor 自動傳入不用手動敲。但如果你是在 CI 環(huán)境里單獨構(gòu)建 .so 來做驗證那就要自己指定。這里有個細節(jié)鴻蒙 toolchain 里的 STL 選擇是通過OHOS_STL這個變量控制的和 Android 用ANDROID_STL不一樣。如果你的三方庫依賴libc_shared.so記得把OHOS_STL設(shè)為c_shared否則默認靜態(tài)鏈接可能導致產(chǎn)物體積變大并且如果應(yīng)用里同時有多個 so 都靜態(tài)鏈了 STL內(nèi)存里就會有好幾份 libc 實例某些靜態(tài)全局變量的狀態(tài)就會互相打架——這在大型插件工程里真的會遇到。編譯期還有一個很經(jīng)典的坑代碼中寫了#ifdef __ANDROID__來區(qū)分平臺結(jié)果鴻蒙的編譯宏里沒有__ANDROID__平臺分支跑錯。要養(yǎng)成良好的習慣用__OHOS__/OHOS_PLATFORM這類鴻蒙宏來判斷而不是拿__ANDROID__去反推。在 C/C 層做平臺適配時我一般會把平臺判斷收斂成幾個自己的宏比如#if defined(__OHOS__) || defined(OHOS) #define FASTMATH_HARMONY 1 #elif defined(__ANDROID__) #define FASTMATH_ANDROID 1 #endif這樣后面加新平臺改動面最小。4.2 鏈接期坑系統(tǒng)庫與符號可見性鏈接期的問題比編譯期更隱蔽。我踩過的最典型的一個坑是一個音頻處理庫在 Android 端依賴了 Bionic 特有的android_get_primary_stable_security_patch_level這種只在 Android API 里存在的函數(shù)——別笑很多第三方庫會用這類函數(shù)去探測系統(tǒng)版本。鏈接到鴻蒙時直接報 undefined reference最后只能在源碼里把這段能力檢測邏輯加上平臺宏過濾掉。另一種情況是鏈接成功但運行時提示 undefined symbol。這通常是符號可見性搗的鬼。鴻蒙的 CMake 工具鏈里如果三方庫的 CMakeLists 中設(shè)置了set(CMAKE_CXX_VISIBILITY_PRESET hidden) set(CMAKE_C_VISIBILITY_PRESET hidden)那么所有函數(shù)默認隱藏只有主動__attribute__((visibility(default)))的符號才會進入動態(tài)符號表。你在 Android 端沒碰到這個問題大概率是 Android 端你編譯的是靜態(tài)庫或者 JNI 層用了JNIEXPORT標記而鴻蒙端走 dart:ffi 時這些標記全都不存在。遇到這種問題別急著改一堆源碼先在構(gòu)建完的 .so 上檢查符號表ohos-sdk/native/llvm/bin/llvm-nm -D libfastmath.so如果fastmath_fft不在導出列表里那就在 CMakeLists 里直接把符號可見性放開set(CMAKE_CXX_VISIBILITY_PRESET default) set(CMAKE_VISIBILITY_INLINES_HIDDEN OFF)或者在函數(shù)聲明上顯式加__attribute__((visibility(default)))。我傾向于后者因為“默認全部可見”雖然省事但會污染導出表增加動態(tài)鏈接的查找開銷還可能和別的 so 產(chǎn)生符號沖突。對于三方庫適配能精準導出就精準導出。4.3 運行期坑dlopen、日志與 JNI 遺留代碼編譯、鏈接都過去之后運行時跑起來才發(fā)現(xiàn)的問題才最考驗經(jīng)驗。常見的運行期坑有三個我一個個說。第一個是dlopen failed錯誤信息一般是cannot locate symbol或library libxxx.so not found。優(yōu)先檢查 .so 有沒有真的打進安裝包其次檢查 .so 依賴了哪些其他動態(tài)庫。在鴻蒙應(yīng)用里每個模塊的 native 庫會被放到應(yīng)用的 native library 目錄如果你的庫target_link_libraries里鏈接了一個鴻蒙環(huán)境下不存在的系統(tǒng)庫dlopen就會失敗。用llvm-objdump -p libxxx.so | grep NEEDED看一下它依賴的 so 列表然后再對照鴻蒙 sysroot 里的庫清單缺了哪個就處理哪個。第二個是日志集成。Android 上三方庫普遍用__android_log_print輸出日志到了鴻蒙環(huán)境這個符號不存在輕則日志丟失重則直接在調(diào)用日志函數(shù)時崩掉。鴻蒙的日志入口是 hilogC 層可以通過如下方式使用#include hilog/log.h LOGE(LOG_APP, fastmath: error %d, errno);在 CMake 里記得find_library(hilog_ndk hilog_ndk)并鏈接。有不少開源庫已經(jīng)把日志模塊抽象出來了那就不需要全改只需在平臺適配層把后端換成 hilog 即可。如果庫代碼里到處散落__android_log_print那先用腳本批量替換再手動檢查邊界情況。第三個是 JNI 遺留代碼。你可能會想我能不能不刪 jni_bridge讓它在鴻蒙上也跑起來除非你在鴻蒙環(huán)境里還保留了一個兼容 JNI 的運行時否則答案是不行。因為鴻蒙的 ArkTS 沒有 JNI 機制JNI_OnLoad這類導出函數(shù)沒有任何入口會去調(diào)用它。所以只要有 JNI 代碼存在就必須改造要么改成純 C 函數(shù)讓 dart:ffi 直接調(diào)要么改成 N-API 函數(shù)交給 ArkTS 去調(diào)。5. 性能驗證與算力調(diào)度優(yōu)化5.1 先把性能量化FFI 的優(yōu)勢從哪里來三方庫底層用 C/C 做計算目的只有一個性能。但如果適配鴻蒙時把調(diào)用鏈路搞得彎彎繞繞性能可能不升反降。我見過有人非要在 dart:ffi 和 ArkTS N-API 之間再包一層平臺通道結(jié)果是每幀圖像計算都要經(jīng)過好幾層消息序列化性能直接崩到不如純 Dart。要理解這條鏈路的性能必須明白 dart:ffi 的優(yōu)勢來源。它最大的特點是不經(jīng)過 Dart 對象序列化、不經(jīng)過消息隊列、不經(jīng)過平臺通道調(diào)度Dart 代碼拿到的是 C 函數(shù)的直接地址參數(shù)就是普通標量或指針一次函數(shù)調(diào)用的開銷和你在一段 C 程序里調(diào)用一個外部符號差不多。對比 MethodChannel 的流程——把一個Uint8List編碼成標準消息、跨語言邊界發(fā)送、另一側(cè)解碼、再進入 native 函數(shù)——這里的每一步都是毫秒級以下但累積起來非??捎^的開銷。所以適配的時候我強烈建議做一個簡單的性能基線測試同樣的數(shù)據(jù)量分別走“dart:ffi 直連”和“ArkTS N-API 再轉(zhuǎn)發(fā)”兩條路計時然后對比。絕大多數(shù)時候前者比后者省掉 30% 以上。這個數(shù)據(jù)也幫你判斷一個三方庫到底值不值得花力氣走 FFI 直連。5.2 能跑的下一步NEON、并行與內(nèi)存布局優(yōu)化跑通只是第一步。如果你的三方庫屬于重計算類型鴻蒙化之后還可以做幾件典型的算力優(yōu)化。第一件是確認 ARM NEON 向量化是否真的生效。很多數(shù)學庫在 Android 端會啟用 NEON intrinsic但換到鴻蒙工具鏈后如果源碼里對平臺宏的判斷漏了鴻蒙分支NEON 代碼可能直接被編譯器丟棄退化為標量運算計算性能斷崖下跌。檢查方法是在 CMake 里加target_compile_options(fastmath PRIVATE -O3 -mcpucortex-a76 -mfpuneon)注意-mcpu要根據(jù)你的目標機型動態(tài)調(diào)不同芯片的調(diào)度模型有差異。為了通用性用-marcharmv8.2-afp16simd會更穩(wěn)妥。第二件是數(shù)據(jù)內(nèi)存布局。如果 FFI 層傳入的數(shù)據(jù)在 Dart 側(cè)是Float32List然后你在 C 側(cè)又拷貝到另一個float*緩沖區(qū)那么數(shù)據(jù)搬運的時間可能會吃掉計算省下的時間。更好的做法是一開始就讓 Dart 側(cè)通過malloc分配原生內(nèi)存直接在上面寫入數(shù)據(jù)把同一個指針傳給 C 函數(shù)計算完再從這塊內(nèi)存里讀結(jié)果。這樣整個鏈路里沒有一次多余拷貝對音頻和圖像這類大數(shù)組操作收益極其明顯。第三件是并行調(diào)度。鴻蒙 Native 側(cè)有 Function Flow 這類并行編程框架可以把計算型任務(wù)拆到多個 CPU 線程上跑。如果你的 C/C 庫本身沒有并行優(yōu)化比如只用單線程寫的 FFT、圖像濾波在三方庫適配時可以保留計算核心不動在外面包一層并行分發(fā)。但注意dart:ffi 調(diào)用是同步阻塞的如果你在 Flutter UI 線程直接調(diào)用了運行時間很長的 C 函數(shù)必然卡幀。正確做法是把 FFI 調(diào)用放到 Dart 的Isolate里跑或者直接讓 C 側(cè)通過回調(diào)把結(jié)果異步拋回來。這塊在鴻蒙上跑通后整個應(yīng)用的幀率和響應(yīng)性差距會非常明顯。6. 最后幾條經(jīng)驗適配做多了回頭看這個流程最值錢的其實不是某個具體函數(shù)怎么寫而是把“安卓原生資源直接搬到鴻蒙”的幻覺打碎鴻蒙不是 Android 的兼容層三方庫的 NDK 產(chǎn)物需要換工具鏈、換 ABI、換調(diào)用鏈路重新編譯和驗證。我個人的習慣是優(yōu)先保證純 C ABI 的穩(wěn)定性讓 Flutter 側(cè)統(tǒng)一走 dart:ffi能用 CMake 變量控制差異就不要動源碼碰到符號問題第一反應(yīng)先看導出表不要埋頭改調(diào)用方。最后再分享一個小技巧編譯產(chǎn)物最好在 CI 里單獨跑一個“鴻蒙 native 構(gòu)建 符號清單導出”的流水線任務(wù)每次三方庫升版本都自動化檢查一遍所有需要的 C 函數(shù)是否還在導出表里。別等集成到 DevEco 工程里才發(fā)現(xiàn)符號丟了那個排查過程真的會讓人懷疑人生。底層這條路多驗證一次后面就能少熬夜一次。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
五月丁香激情综合啪啪| 久久宗合影| 婷婷色播色五月五色五月天色妇| 激情五月婷婷综合秋霞| 激情五月丁香五月| 五月天久久综合婷婷丁香| 一本九九色| 狠狠色噜噜狠狠| 热的五码久久精品| 婷色五月天| 99视频只有精品| 天天做天天爱天天玩夜夜爽| 色视频2025| 99色综合久久| 色婷婷丁香花五月天| 亚洲天天操| 欧美五月丁香啪啪响视频| 五月婷婷丁香网| 色色色色色色色色网站| 五月婷婷|欧美| 丁香五月在线观看综合| 天天上天天爽| 婷婷色婷婷| 婷婷WWW久久| 五月丁香| 国产精品99久久久久久久女警| 少妇性按摩无码中文A片| 亚洲国产色婷婷| 99视频网址| 五月丁香婷婷成人网| 丁香婷婷色| 丁香五月在线视频黑人| 丁香五月婷婷成人色区| 亚洲第精品| 亚洲av免费在线| 激情九月婷婷九月| 97亚洲视频在线| 超碰97人人操| www.99热在线观看| 综合久久综合久久| 97久久人人| 色五月在线视频观看| 五月丁香在线婷婷蜜桃| 在线观看玖玖资源免费观看| 国产成人va在线| 五月天婷婷综合久久| 五月天婷婷綜合院| 九九精品在线视频观看| 久久婷婷六月| oumeisesewang| 久久久久久久丁香五月天婷婷| 日本久久人| 夜色热久| 五月天AV大香蕉| 色约约视频一区二区三区四区五区 | 亚洲婷婷久久综合| 亚洲无码播放| 99热99色| 色婷婷六月| 伊人综合网站| 日日夜夜九九| 99ri在线观看视频| 五月丁香啪啪激情| 久色欧美| 曰曰久久| 98国产精品综合一区二区三区| 婷婷五月天成人| 激情伊人五月天| 亚洲色久| 亚洲在线网站| 超碰色婷婷| 狼人婷婷久久| 日日射天天射| 爽天天天天天天天| 亚洲六月色| 婷婷五月在线视频| 涩玖玖免费视频| 日美三级| 噜综合| 天天摸天天爽| 亚洲精品在线视频| 大战熟女丰满人妻AV| 成人午夜天| 99爱在线| 成人做爰A片免费看网站找不到了| 久久只有精| 这里只有精品视频国产| 丁香青青五月天| 97一区二区| 婷婷五月天天激情| 激情五月丁香婷婷夜夜操| 婷婷六月丁香在线| 丁香五月色| 九色91视频| 色99视频| 久人操| 99re在线视频精品,这里只有精品18,| 九九色99| 色五月激情五月开心五月| 天堂成人A片永久免费网站| 超碰97在线观看免费| 99久久99视频| 亚州性爱99| 国产成人高清| 久久综合最新网址| 99热免费网站| 午夜成人综合| 九九99九九精品视频| 激情丁香九九五月综合网| 精品国产va久久久久| 五月四色婷婷| 婷婷丁香五月天激情| 影音 五月 婷婷 久久| 激情五月婷婷视频一区二区三区| 99精品视频在线| 99操逼| 深爱五月激情| 五月丁香六月激情综合| 五月丁香六月激情在线| 婷婷天天五月天| 99在线er热| 大香蕉在线观看9| 99色五月| 色婷婷电影网| 岛国资源站| 可以免费看av网站| 久热婷婷| 伊人春天av| 九月色婷婷综合| 99燥99日| 天天操夜夜肏| 狠狠噪| 免费成人va| 色色亚洲视频| 98色丁香五月婷婷综合网| 狠狠操.com| 久re热视频| 中文字幕人妻一区二区| 天天狠狠色综合| 日本色婷婷| 激情文学第四色婷婷丁香五月| 狠狠狠狠狠操| 成人在线观看一区| XX久久| 亲子乱AV-区二区三区| 99视频地址| 色九月婷婷综合| 91亚洲免费片| 99这里有精品| 大香蕉久热| 五月婷婷影视| 色五月婷婷激情| 成人国产欧美大片一区| 无码毛片992367| 欧美日韩一区二区三区四区| 99色色热| 97caop| 激情5月婷婷狠狠干| 五月婷婷六月丁香在线| 激情丁香五月婷| 久久久久人妻| 综合网五月天123| 亚洲日韩一页精品发布| 人妻久久久久久久久久| 久久玖玖综合| 色久天| 久久久WWW| 久久激情网| 五月婷婷基地| 久久久一级AAA| 四虎婷婷五月天| 色综合久| 五月天精品视频| 色婷小说| 色婷婷久久综合| 色色色色综合网| 九九人人操| 99热99在线| 五月丁香啪啪啪| 婷婷性爱| 天天爱天天天射AV| 久久色天堂| 大香蕉久操| 久热9| 五月丁香综合网色欲| 婷婷丁香六月| 六月 丁香 视频| 国产精品色婷婷久久久精品| 丁香五月天婷婷久久| 色五月婷婷五月天| 五月丁香基地| se99高清无码| www.com色播五月天| 先锋资源婷婷| 这里只有精品在线播放| 丁香 久久| 亚洲精品婷婷| 婷婷色婷婷| 亭亭色色五月天| 久久色大香蕉| www99热| 亚洲丁香五月天在线视频| 青草视频在线播放| 中文字幕婷婷| 婷婷五月天天天| 97成人丁香婷婷| 久久五月婷婷综合网| 激情五月,激情综合网| 91疯狂操操操操| www.婷婷五月天| 色情五月天婷婷| 六月婷欧美| 天天操夜夜操| 国产精品电影| 色玖玖综合网| 婷婷射丁香| 日韩成人综合网| 五月丁香六月婷婷在线播放| 4438成人电影| 区欧美日韩成人| 99操逼视频| 日本特黄aaaaa| 国产婷婷综合| 五月丁香综合网| 五月丁香六月激情综合| 99操视频| 99在线热视频| 五月婷婷之综合激情| 婷婷六月激情小说网| 伊人99久久| 天天日天天爽| 久久草大香蕉| 五月婷婷色情| 大香蕉九九| 综合久久六月| A网在线欧洲| 玖热精品综合视频| 97亚洲色 torrent magnet| 日本婷婷色| 日日干天天| 丁香五月在线自慰| 婷婷丁香97| 一本久道综合色婷婷五月| 婷五月天在线草| 国产综合色婷婷精品久久| 黄色av网站在线免费播放| 欧美精品99久久久| 亚洲操B| 亚洲综合婷婷五月| 激情婷婷九月| 婷婷激情六月综合| 丁香五月婷婷基地| WWW·天天操·视频?| 色婷婷9| 欧美超碰人人| 九九综合色综合| 婷婷之玖玖| 亚洲av电影网站| 亚洲电影在线观看| 99福利视频导航| 狠狠色丁香乆乆| 人妻丰满精品一区二区A片| 丁香六月欧美| 中文字幕丰满孑伦无码专区| 热思思九九| 国产亚洲成AV人片在线观黄桃| 人人爱国产| 99熟女视频| 另类精品视频在线观看| 成人丁香五月天| 色综合丁香| 婷婷丁香五另类网站| 色五月激情五月开心五月| 天天综合中文| AV在线大香蕉| 少妇真实被内射视频三四区| 亚洲美女裸体被操在线观看| 五月丁香婷婷啪啪网| 婷婷久久天堂网| 中文字幕高清av| 亚洲欧美国产A片免费观看| 综合另类激情| 99熟女| 丁香五月综合激情久久潮喷| 丁香婷婷六月激情综合| 夜夜大香蕉婷婷丁香| 久久五月天丁香花| 五月天狠狠网站| 亚洲第一色色色| RenRenSe在线视频网站| 丁香五月天资源网| 五月丁香网站| 婷婷色吧| 激情伊人五月婷婷久久| 天天爱综合网| 中字幕视频在线永久在线观看免费| 国产又黄又爽又色的免费| 久爱综合| 五月丁香六月婷综合成人综合| 婷婷五月天天天日日夜夜| 色欲日日躁| 五月婷婷丁香瑟瑟视频| 饮料下药迷倒漂亮女同事强干| 搡BBBB搡BBB搡18| 任你搞免费视频观看| 久久久久98| 99热思思在线观看| 狠狠干在线| 激情小说五月天| 九月丁香婷婷网| 超碰色综合| 激情亚洲婷婷六月| 婷婷婷婷色| 五月天综合在线网| 激情网第九色| 99热在线看片| 丁香五月婷婷老师网站| 婷婷基地成人五月天| 天天高潮夜夜爽| 人妻AV在线| 天堂婷婷丁香六月网| 99九九视频精彩在线| 久久婷婷五月| 色噜噜综合网| 精品久热69| 日韩在线观看网址| www.狠狠操.co m| 婷婷色五月天在线观看| 婷婷五月综合社区在线| 五月丁花色综合网| 亚洲乱码日产精品BD| 色婷婷激情五月天| 五月婷婷真爱激情网| 五月激情视频| 日韩中文欧美| 99热99色| www99精品| 狠狠激情五月天| 婷婷综合网站| 天天日天天做天天舔| 日韩五月丁香| 国产婷婷五月| 这里只有精彩视频| 99久久五月丁香野外| 男人視頻站| 久久精彩综合视频| 亚洲免费观看高清完整版AV线| 内射干少妇亚洲69XXX| 99手机在线精品视频| 久久996re热这里只有精品无码| 激情丁香九九五月综合网| 色欲AVV| 色必久悠悠影院| 丁香五月六月综合激情| 亚洲激情av| 91人操人人人操人| 久热AA| 色五月婷婷五月| 婷婷操无码| 深爱五月激情网| 开心五月婷婷激情| 色五月婷婷婷婷婷婷婷婷婷婷| 中文字幕AV网址| 婷婷五月无码| 99热这里都是精品| 色色日韩| 亚洲精品又粗又大又爽A片 | 六月婷婷七月丁香| 六月婷婷天堂| 久久色亭亭五月天| 国産精品| 日本久久99| 五月六月婷婷激情网| 婷婷金品综合视频| 婷婷五月天激情综合深爱| 国产精品99久久久久久久女警| 26uuu.| 国产特级毛片AAAAAAA高清| 天天操天天操综合| 影音先锋男人站,影音先锋男人色资源网,影音先锋AV最新资源站,影音先锋AV资源 | 六月色婷婷色| 少妇2做爰HD韩国电影| 天天激情视频| 丁香婷婷五月天成人| 色五月亚洲开心网| 超碰色婷婷| 六月丁香久久| 亚洲狠狠狠色婷婷综合激情久久久| 国产一区二区三区影院| 91精品久久久久久综合五月天| 色情五月天导航| 日本三级中国三级99| 久久97| 婷婷D区| www.婷婷.com| 久久久久久xxxxx| 亚洲成av人影院| 99热日韩| 综合亚洲色色| 五月色激情综合网| 亚洲丁香花色| 婷婷五月天综合网| \\五月天婷婷激情| 色婷婷综合成人| www.婷婷| 激情六月天| 狠狠五月激情在线| 五月丁香五月丁香五月丁香五月丁香91| 婷婷日欧美在线观看| 91chinese在线| 国产精品美女久久久久AV超清| 五月激情久久综合网| 六月婷婷九月丁香| 婷婷五月丁香青青草在线| 99色视频在线| 九九婷婷五月天影视| 91丨九色熟女丨首页| 五月婷婷av| 色五狠狠| 色综合xx| 日本综合色图| 影音先锋综合网| 久久久精品人妻| 亚洲国产色色| 五月婷无码| Caop在线| 国产99久9在线+|+传媒| 久久性爱视频| 婷色五月| 狠狠色狠狠| 国精产品一区二区三区| 色色综合无码| 狠狠香蕉| 91综合在线视频| 任你躁XXXXX麻豆精品| 免费观看大片视频 丁香婷婷 六月欧美| 激情六月丁香综合| 玖玖婷婷五月天| 色色综合热| 最新高清无码专区| 亚洲V国产V欧美V久久久久久| 欧美久久网| 99爱视频在线播放| 亚洲丁香网| 亚洲va欧美| 伊人9在线| 婷婷六月偷拍| 婷婷99视频在线| 亚洲日日操| 欧美黄色韩日网| 色婷五月天网站| 大香蕉久久伊人婷婷五月丁香| 久久婷婷东京热| 五月天另类小说久久小说网| 97色精品视频 | 99精品无码| www.av骚货| 激情伊人五月婷婷久久| 日日干夜夜撸夜夜骑| 99热超碰在线| 国产亚洲99久久精品| 91精品久久久久久久久久久久| 精品操逼一区二区| 午夜成人在线免费视频| 欧美人人超级碰| 日日夜夜九九| 日韩美一级毛卡片| 97久久久免费福利网址| 伊人玖玖网| 久久精品99久久久久久久久| 久久sp免费视频| 人妻视频一区而且二区| 六月色 亚洲| 久久久全国免费视频| 超碰成人黄色网| 久草热8精品视频在线观看| 久草热久草在线视频| 人妻中文在线| 日韩成人中文| 人妻在线网站| 亚洲无码成人| 五月婷婷五月天激情视频| 久久亚洲色导航| 日韩精品无码一区二区| 亚洲区在线| 偷偷操九九| 五月婷婷六月丁香玖玖玫瑰91| 大香蕉狠狠爱主页| 亚洲综合在线伊人婷| 狠狠草天天草| 亚洲国产va| 色综合色综合色综合色综合| 另类图片天天影视在线观看| 精品少妇人妻AV无码专区偷人 | 亚洲成人日韩无码精品| 午夜成人综合| 丁香五月婷婷亚洲色图| 26uuu另类亚洲欧美日本一| 日韩视频99| 欧美日韩成人免费在线| 成人午夜视频精品一区| 99久操| 免费视频舔| 色天天综合成人网| 色色激情五月天| 蜜桃人妻无码AV天堂三区| 五月停性愛| 色青五月天| 五月丁香婷婷爱激情综合网| SESE无码AV| 啪啪 综合网| 国外亚洲成AV人片在线观看| 九月丁香八月婷婷久久综合久97| 婷香五月网在线| 丁香五月网在线观看| 久久久久人妻精品| 被强行糟蹋的女人A片| 丁香五月停停av| 色噜噜狠狠色综合网| 激情 五月 婷婷 丁香| 五月天色裸体视频| 26uuu国产| 色八戒操婷婷| 精品一区二区三区四区五区六区介绍 | 亚洲 综合中文| 午夜婷婷六月天| 99久久久久| 日韩99无码| 色色色色色热| 超碰国产在线观看| 91碰免费视频| 五月网激情| 五月婷婷开心网| 天天爽天天| 超碰国产AV| 3p日韩网站视频| 91男同| 国产第99页| 99热热九九| 九九色综合网| 91丨九色丨老农村| 婷婷五月天激情基地| 久久婷婷视频| 99re99在线看| 9久精品视频| 日本少妇AA一级特黄大片| 五月天成人在线精品| 久久久久婷婷| 色狠狠综合网| 亚洲综合另类| 久九九热| 囯产精品久久欠久久久久久九大| 色五月激情问网站| 日撸夜撸日操| 婷婷丁香成人色综合| 天天摸,天天爽| 91操操| 色五月色图| 色五月激情婷婷| 欧美性猛交XXXX乱大交极品| 色婷婷在线视频久| 欧美日韩中文国产一区发布| 婷婷五月蜜桃成人桃色丁香| 五月丁香综合网| 欧洲综合视频| 99热综合| 久久这有这里精品| 国产伦亲子伦亲子视频观看| 六月五月久久丁香| 亚洲国产精品VA在线看黑人| 五月丁香六月激情狠狠| 爱99干99| 丁香激激情网| 996re热精品视频| 激情五月天激情综合网| 国产亚洲成人综合| 五月丁香综合激情| 婷婷五月亚洲综合| 婷婷亚洲综合| 亚洲色婷婷99一9|| 九九婷婷五月天| 人妻VideOssS人妻| 五月婷婷六月开心| 激情网 久久| 五月婷婷婷婷婷婷艺术| 丁香五月色激情| 婷婷基地爱| 丁香五月激情啪啪啪| 五月丁香婷婷基地| 丁香色色色| 中文字幕 中文字幕明步| 任你草| 久久婷婷五月| 五月天色婷婷网| 婷婷九月丁香天堂丁香天堂| 超碰成人在线观看| site:picc-up.com| www.com在线操视频免费观看| 丁香婷婷月| 天天色天天射天天日| 综合色99| 99久久玖玖| 亚洲啪啪网| 色色日本| 色狠狠图片| 婷婷丁香先锋资源网站| 很很干天天干| 99青青草| AV九九| 五月日韩中文字幕| 台湾无码A片一区二区| www.久久久.com| 欧美色婷婷| 开心五月激情婷婷| 日韩婷婷| 五月天婷婷丁香成人网| 亚洲av综合网| 婷婷五月天首页| 亚洲AV第二区国产精品| 欧美成人精品A片免费一区99| 色5月婷婷| 日本色久| 久久久91精品| 99久re热视频精品98| 很很干在线视频| 亚洲碰碰碰| 综合色播| 激情综合婷婷久久| 婷婷五月影院| 亚洲天堂啪啪| 激情小说 五月天| 婷婷五月天久久久| 99精品女人天堂| 狠狠操狠狠插| 变态另类9| 婷婷六月天激情影院| 久久艹99| 亚洲国产成人AV在线| 五月天婷婷社区| 老司机日日夜夜青草| 99这里有精品视频3| 丁香97综合| 中文字幕成人| 五月天婷婷基地| 久久狠狠干| 很很干在线视频| 久久丁香五月天| 丁香五月天激情四射网| 91在线视频观看午夜福利| 欧美丁香婷婷五月| www.久久爱.com| 九九综合久久| 久久成人综合五月天| 婷婷综合在线| 五月天婷婷免费| 亚洲人成网站999综合| 日日日日日| 丁香五月五月婷婷| 9999久久久久| 久久婷婷热| 99热只有| www婷婷| 婷婷五月天激情丁香| 五月丁香直播| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 婷婷丁香亚洲色综合91| 久久婷婷草| 91嫩草国产线观看亚洲一区二区| 中文字幕日产A片在线看| 日本五月婷婷| 丁香五月Av| 综合久久9| 五月婷婷深深爱| 日本人人xxx| 女高怪谈在线观看| 色色色色色色色色网站| 久久婷婷成人综合色怡春院| 色偷偷色婷婷| 天天爱天天操| 翔田千里 50岁 无码| 另类 在线| 日亚二欧美| www,超碰| 久热久| 丁香五月影院| 丁香激情五月天| 嫩BBB搡BBBB榛BBBB| 在线日韩视频| 亚洲网站观看视频| 91在线看片| 亚洲成人av在线观看 | 99在线公开视频| 色婷婷五月在线| 色99自拍| 99视频这里只有免费精品| 开心五月婷婷五月| 亚洲五月丁| 五月欧美色色五月| 丁香五月成人网| 丁香婷婷色九月| 91日本在线| 国产精品美女| 中日韩美欧成人一区二区精品在线| 五月天婷婷色播综合在线| 婷婷成人av| 久久精品99久久久久久久久| 四虎成人精品永久免费AV九九| 亚洲99热| 国产精产国品一二三在观看| 综合在线观看99| www.99热在线| 久久永久网址| 五月成人综合| 九九碰九九爱97超| 亚洲12p| 丁香九色不卡aaa| 五月天激情四射网站| 丁香五月婷婷激情小说| 狠色狠色综合久久| 日韩成人电影在线播放| 国产精品人人做人人爽人人添| 久操香蕉| 婷婷五月天丁香| 婷婷五月天视频小说| 99爱在线精品视频免费观看| 婷婷六月啪啪| 婷婷五月丁香性爱| 激情综合啪啪啪| 色五开心五月五月深深爱| 婷婷综合亚洲| 99热草草| A一级操| 成人va视频| 国产亚洲精品久久久久久豆腐| 中文字幕成人日韩| 久热这里这里有精品| 欧美丁香五月夫妻天| 疯狂做受XXXX高潮A片动画| 日韩在线成人电影| 综合视频五月| 99只有精品| 啪啪操操| 国产婷婷五月天| 五月天婷婷小说| 日韩在线一级| 青草激情在线| 免费视频WWW在线观看网站| 国产97色在线 | 日韩| 99色色最新视频| 大香蕉婷婷| 99热性色| 婷婷五月天狠狠| 香蕉久久av一区二区三区| 99自拍网| 日韩综合久| 91fuliwang| 日韩AAA| 97干在线视频| 色播五月丁香| 亚洲av成人在线| 色色色色区| 国产色五月| av国产精品| 五月丁香婷婷网网网网| 综合五月婷婷| 久久婷婷国产| 久9视频免费播放| 亚洲无码AV片| www天天色天天射| 玖玖色综合色| 97色伦另类图片小说视频 | 久色| 99国产小视频2013| 激情婷婷丁香五月天| 99在线爽| 色婷婷AV久久久久久久| 天天操天天插天天射| 狠狠色婷婷六月激情网| 天天日天天肏天天奸| 婷婷激情蜜桃玖玖丁香| 8090在线影视少妇| 天堂五月婷婷| 久久97久久99久久综合欧美| 色婷激情网| AA片在线观看视频在线播放| 99综合99| 日韩五月婷婷久久| 欧美色色网| 亚洲婷婷丁香五月| 婷婷五月天情色| 激情图片婷婷| 亚洲黄色影视| 久久五月六月| 熟女人妻一区二区三区免费看| 夜夜骑日日操| 无码激情AAAAA片-区区| 战争与艾拉电影免费观看| 第四色色色色色丁香五月天| 日韩AAAAA| 色色综合激情| 天天爽天天干| 亚洲女婷婷五月基地综合久久久| 综合福利网| 色丁香影院| 99热精品超碰| 久久五月综合| 婷婷丁香久久五月综合| 五月天丁香婷婷视频网址| 亚洲热视频在线| AV五月丁香| 丁香五月影院| 五月 婷婷 成人| 婷婷五月综合啪| 亚洲高清在线| 天插天啪天啪天啪| 日本黄色精品| 思思热在线播放| 婷婷 亚洲图片 丁香| 1024在线观看免费视频| 久久9精品| 婷婷五月天综合蜜桃| 在线色婷婷| 久久激情综合| 色色婷婷综合网| 九九色之九九色之88| 可以看的av网站| 六月五月婷婷| 狠狠香蕉| AV片在线观看| 婷婷五月成人| 久久激情五月天| 久久色情| 丁香六月丁香婷婷激情| 在线观看亚洲视频影院| 久久99热这里| 九九热内射| 久久精品爱爱| 五月久久噜噜| 五月婷激情| 激情深爱五月天| 丝雨一区二区| 色色操| 九九无码视屏| 99热综合网| 潮汕成人AV片在线| 久色视频在线| 久久五月天婷婷| 开心五月婷婷激情| 丁香五月天婷婷91| 6月丁香婷婷激情| 成人在线99| 国产毛片精品一区二区色欲黄A片| 婷婷五月色惰| 五月激情开心婷婷| 色婷| 六月丁香啪| 婷婷丁香视频在线观看免费 | 综合AV在线| 五月天激情综合10p| 婷婷性爱影院| 五月婷婷9| 色色综合日韩| 在线成人网站| 九九热在线视频观看免费10| 天天成人五月天| 婷婷五月综合色拍| 超碰2021| 99这里只有免费的小视频在线观看| 久久久免费精彩视频| 国产无套精品一区二区| 亚州精品色情无码A片| av色色国产| 久久久久久久久久久-久五月天婷婷| 婷婷五月亚洲综合| 性色五月天| 色色婷婷综合| 色另类五月天| 综合久久99| 9月色婷婷| 日本va欧美va欧美va| 欧美丰满熟妇BBB久久久| av久热| 五月丁香成人小说| 人人操人| 亚洲五月情| 性无码专区无码| 久久丁香五月综合六月激情红杏视频 | 99热主页日本| 99热这里只有精品中文字幕| 九九99精品免费播放| 亚洲视频在线观看99| 91操人| 182TV亚洲| 五月婷婷激情综合av| 婷婷成人av| 五月丁香狠狠地噜噜噜噜| 超碰国产在线| 天天做天天爱天天爽夜夜揉| 超碰人人色| 日本天堂爱爱| 婷婷99热| 97人人操| 色综合久久天天综合网| 骚五月婷婷| 精品人妻一区二区| 色爱综合五月| 五月开心久久| 婷婷九色| 九九热精品在线| 第四色大香蕉| 激情六月天| 91色吧网| 亚洲天堂啪啪| 99精品久久久| 色色综合网站| 丁香六月婷婷激情综合| 欧美性爱五月天| 婷五月天天| 伊人无码高清| 丁香五月婷婷激情123| 色级停停| 欧美成人A片AAA片在线播放| 色婷婷另类| 激情综合网五月| 五月婷婷日| 欧美色色色色色色色| 日本久久综合| 婷婷丁香五月综合| 色婷婷丁香五月在线| 国产伦亲子伦亲子视频观看| 五月丁香六月婷婷久久久综合| 欧美A A A A A| 亚州操人在线视频| 国产三级片91| 日本在线视频www色| 极品色丁香| 色五月激情网| 激情黄色小说五月天| 人人肏逼视频在线一区二区| 日日色综合| 91人人网| 久久五月婷| 五月色婷婷AV| 色婷狠狠| 色99日韩| 蜜臀A∨在线水帘洞| 日木WWW视频| 色色A| 亚洲精品无码久久| 国外亚洲成AV人片在线观看| 亚洲最大五月天成人网| 日韩无码性爱| 久久激情五月| 色婷婷成人色网| 婷婷五月天狠狠搞干| 9l视频自拍9l九色9l成人| 色偷偷五月天| 色性日本| 五月婷婷导航| 播播网色播播| 丁香五月婷在线观看| 五月天天堂久久| 色婷婷电影网| 99热费观看| 97AV在线视频| 综合色色五月| 99久久玖玖| 丁香五月 综合| 男人的天堂在线婷婷| 9热视频在线观看| 99re久热只有精品6在线直播| 日韩三级高清无码| 成人视频一区| 26uuu亚洲欧美| 丁香婷婷九月| AV成人在线网站| 亚洲综合视频网| 狠狠五月丁香色婷| 九九久久高清| 亚洲V国产V欧美V久久久久久| 激情欧美丁香五月| 日本女天天爽| 97香蕉人人在线观看| 99天堂网| 五月天伊人| 激情网第四色| 欧美精产国品一二三区| 亚洲日本韩国| 婷婷情色五月天| 2025天天爽天天摸| 色色丁香婷婷| 精品热九九| 99热综合网| 99激情视频| 亚洲无码成人性爰网| 9操在线| 97色综合视频| 五月激情啪啪| 五月天婷婷免费| 丁香五月激情婷婷| 久色视频在线| 亚洲乱码w在线观看| 夜夜嗨一区二区三区直播内容 | 巴基斯坦粉嫩无码视频| 日本a片网址| www.综合久久.com| 丁香五月激情久久麻豆| 九九视频在线| 激情第四色| 婷婷五月丁香六月天亚洲综合| 6月丁香婷婷| 五月天婷婷社区久久综合| 久久婷婷综合五月| 激情五月天色色网| 丁香五月六月综合激情| 夜夜撸日日骑| site:picc-up.com| 天天色播| 91网站黄| 91操屁股| 色亭亭九月| 日韩黄色影院| 五月婷婷深深爱| 26uuu最新地址| 色婷婷丁香五月| 午夜做爱影院| 婷婷五月精品在线| 99热这里只有精品亚洲| 五月婷婷色| 91黄址| 99日精品视频| 秋霞少妇毛片| 好大好粗嗯啊-一级黄色大片免费观看-成人AV | 九九99香蕉在线视频播放| 久久33视频| 色啪久 | 91亚洲免费片| 久热婷婷综合| 青草视频在线观看视频| 丁香五月天电影| 亚洲激情综合| 欧洲不卡视频| 狠狠人妻色综合| 26uuu成人网| 五月婷婷视频在线观看| 九九视频这里只有精品| 天天日天天干天天天| 日韩99色99| 婷婷精品性性性性性性性| 丁香婷在线| 婷激情五月| 五月丁香六月婷婷亚洲视频| 在热视频精品| 九九色热视频| 九九精品视频在线观看| 婷婷五月图片小说视频| 麻豆五月丁香婷婷| 激情婷婷五月基地| 五月天精品视频| 亚洲精品激情| 五月丁香偷拍| 五月丁香综合激情网| 色综合色五月| 亚洲色网络| 久久久久人妻| 欧洲电影在线观看免费版英语版| 欧美成人AAA片一区国产精品| 成人无码精品1区2区3区免费看| 乱岳熟女50岁| 日本91在线播放| 久久精品日| 91九色 婷婷| 婷婷综合五月| 综合激情啪啪| 激情五月丁香激情综合网| 五月婷婷丁香色播网| 五月亭亭狠狠| 婷婷五月色综合| 91精品91久久久中77777| 狠狠的日| 国产亚洲精品AAAAAAA片| 人人摸人人操人人爱| 色色色1网址| 91丨九色丨熟女丰满| 激情五月天婷婷图| 另类图片五月天婷婷| 丁香五月中文字幕久色| 激情五月天 婷婷| 久久久8| 天天色粽合合合合合合合| 久久加勤综合| 99热欧美偷拍| 日本综合久| 国产一级婬片毛片| 亚洲婷婷五月天激情| 99热国产精品| 午夜69成人做爰视频| 六月色 亚洲| 婷婷五月激情图片| 精品网站99| 欧美啄木乌丝袜人妻系列| 五月婷婷|欧美| 久操热线| 91猫咪国产在线播放| 婷婷五月天奸女| 激情五月综合色婷婷| 色亚洲欧洲| 99热这里只有精品4| 97操碰98| 99ri在线观看视频| 99在线看片| 九月av| 青青久在线视频免费观看| www.激情com| 伍月婷丁香婷| 久机视频这只有精品| 亚洲操B| 国产精品A片在线| 99热r| 久久99性爱| 丁香六月婷婷| 色九综合| 九九精品片一| 婷婷色五月丁香六月欧美啪| 99这里只有精品|v| 丁香九色不卡aaa| 激情婷婷丁香五月天小说| 色五月丁香婷婷| 婷婷5月天av| 六月丁香五月天| 五月丁香久久| 九九九九九九综合| AV 3P| 日韩成人AV在线播放| 日本操天堂| 综合久久9| 99免费视频网| 九月婷婷久久| 成人色图情色成人网 www.5b5b5bcom 五月天 | 99热 这里只有精品 国产 日韩| 五月天婷婷爱| 大地9中文在线观看免费高清| 久久色五月| 日韩乱玛久久| 99热18| 99狠狠色| 丁香五月激情五月开心五月| www.五月天| 香蕉狠狠爱视频| 久久只有18视频| 亚洲国产精品SUV| 超碰超碰在线| 婷婷色情六月| 国产欧美精品AAAAAA片| 欧洲亚洲免费视频9| 啪啪亚洲综合| 四川BBB搡BBB爽爽视频| 色婷婷WWW| 色综合大香蕉| 激情婷婷网| 久久婷婷五月草视频| 这里有精品| 五月丁香啪啪啪综合网| 日日色综合| 99热每日| 五月丁香啪啪拍| 玖玖婷婷五月天| 天天日夜夜欢| 色噜噜狠狠色综无码久久合欧美| 色五月综合网站| www.人人操人人看人人想人人摸 人人人人操,COM | 97操女视频| 五月天激情婷婷丁香| 97色吧| 亚洲 综合中文| 久婷婷| 庭庭久久内射| 天天日天天舔| 综合婷| 激情五月天伊人影院| 操97在线观看| 五六月丁香激情视频| 亚洲乱码日产精品BD| 国产亚洲精品人人| 九九色综合九九色| 色色五月婷| 久久色婷婷| 六月丁香啪啪啪| 婷婷午夜丁香| 色色五月天丁香| 在线中文字幕视频| 91狠狠色| 狠狠色噜噜狠狠狠狠综合| 成人网在线视频| 丁香五月成人| 色综合久久中文| 久久久99免费视频| 婷婷欧美综合| 9久精品视频| 成人噜噜网| 久久五月综合| 婷婷五月天激情网| 五月天激情综合网站| 国产这里只有精品| 久热这里这里有精品| 大地9中文在线观看免费高清| 六月亚洲婷婷6月中文字幕| 亚洲无码99| 日韩av干| 丁香五月婷婷国产av| 五月天社区狠狠| 国产色香蕉精品五夜婷| 涩婷婷五月天在线精品视频| 在线观看av网站| 丁香五月婷婷啪啪啪| 激情五月丁香婷婷夜夜操| 久热伊人| 色婷婷五月天激情综合| 日本色色视频| 亚洲国产精品VA在线看黑人| 激情五月婷| 天天日,天天干,天天操| 六月丁香婷婷拍拍| 亚洲乱码日产精品BD| 国产婷婷五月天| 9久9久| 欧洲不卡视频| 婷婷久久婷婷色五月| 精品久久久久成人码免费动漫| 九九热精品6| 玖玖婷婷色五月| 91久久婷婷| 婷婷丁香久久五月综合| 五月停性愛| 成年人丁香五月| 91狠狠色丁香婷婷综合久久| 色欲一区二区三区精品A片| 久久欧洲综合网| 中文字幕五月久久婷| 五月天色婷婷综合| 五月久久亚洲| se99热久久一本| 亚洲综合激情五月久久| 丁香五月综合在线| 人妻激情网| 色玖玖| 婷婷五月丁香伊人网| 日本视频欧美观看免费| 99精品视频网| 丁香婷婷综合激情五月色| 久9无码视频| 色色综合网站| 色五月婷婷亚洲| 五月丁香久久| 国内自拍97在线| 啊V视频在线观看| 日在线V视频在线播放| 黄色一极大片| 伊人激情AV一区二区三区| 激情五月天综合| 久色视频在线| 碰超在线九色| 亚洲色综合| 亚洲色视频| 六月婷婷俺也去| 97碰在线免费观看|