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

ARTICLE DETAIL

資訊詳情

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

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

Flutter三方庫NDK鴻蒙化:從工具鏈遷移到dart:ffi調(diào)用實(shí)戰(zhàn) 按理說把 Android 上驗(yàn)證了很久的 Flutter 三方庫遷到鴻蒙絕大多數(shù)純 Dart 的模塊都能一路順風(fēng)。真正的坎兒往往出現(xiàn)在那些“只要跑起來就必須碰底層”的庫上圖像壓縮、音視頻編解碼、加密、科學(xué)計算——這些庫在 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)用鏈路的改造和運(yùn)行時踩坑全是實(shí)際操作層面的東西。我會用一個“帶原生 FFT 計算能力的 Flutter 圖像處理庫”作為貫穿全文的例子它和社區(qū)里常見的flutter_image_compress、ffmpeg_kit_flutter、sqlite3_flutter_libs這類庫的適配路徑是一樣的。如果你手里的庫也是“純 Dart 殼 Android NDK 原生實(shí)現(xiàn)”的結(jié)構(gòu)按這篇的鏈路走下來應(yīng)該能少走不少彎路。1. 為什么 Flutter 三方庫一碰 NDK鴻蒙適配就成了硬骨頭1.1 理想很豐滿pure Dart 幾乎零成本先看清楚哪些部分根本不用折騰。Flutter 三方庫大體可以分成三類純 Dart 庫整個庫就是一個 pub 包內(nèi)部全部用 Dart 實(shí)現(xiàn)不依賴任何平臺原生代碼。遷到鴻蒙幾乎不需要付出任何成本因?yàn)?Flutter 的鴻蒙運(yùn)行時本身已經(jīng)把 Dart VM、渲染引擎那套東西打通了Dart 代碼層面沒有任何感知。聲明式插件Android 端只是用 Kotlin/Java 寫了少量平臺通道代碼沒有 JNI、沒有 C/C 編譯產(chǎn)物。這時候鴻蒙化主要是把 Kotlin/Java 邏輯翻譯成 ArkTS工作量可控。帶 NDK 的三方庫Android 端有android/src/main/cpp或externalNativeBuild編譯出若干 .soJNI 層負(fù)責(zé)轉(zhuǎn)發(fā)。這類庫才是最難啃的骨頭因?yàn)闋可娴?ABI、系統(tǒng)庫、鏈接器、FFI 調(diào)用約定一整套底層鏈路。你在鴻蒙上大概率遇到的場景是第二種、第三種混合體。不少 flutter 插件在 Android 端又寫了 Kotlin 又寫了 CMake比如調(diào)用 OpenCV、FFmpeg、OpenSSL 的庫基本都是這樣。純 Dart 層可以“白嫖”原生層必須重來。1.2 現(xiàn)實(shí)很骨感NDK 產(chǎn)物的 ABI 差異與系統(tǒng)庫差異很多人一開始會覺得Android 的 .so 都是 ARM64 的鴻蒙手機(jī)也是 ARM64 的直接把libxxx.so拿過去不就行了實(shí)測下來的結(jié)論是不是所有 CPU 架構(gòu)一樣就能通用。這里面的差異主要集中在三塊。第一是系統(tǒng)庫符號集。Android 的 NDK 運(yùn)行時用的是 Bionic libc鴻蒙 Native 側(cè)用的是自己的 libc 實(shí)現(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 標(biāo)準(zhǔn)庫的鏈接方式。Android NDK 默認(rèn)可以選c_static或c_shared鴻蒙 CMake 工具鏈也支持類似模式但兩者的 STL 頭文件版本、動態(tài)庫產(chǎn)物名libc_shared.so不完全一致。如果你在 Android 上把 STL 靜態(tài)編進(jìn) .so在鴻蒙上直接復(fù)用偶發(fā)崩潰往往就出在 libc 的 ABI 兼容性上。這種坑最惡心因?yàn)樗皇且簧蟻砭捅蓝桥艿侥硞€邊界條件突然 SIGSEGV。第三是構(gòu)建工具鏈本身。Android NDK 的 CMake toolchain 文件是android.toolchain.cmake鴻蒙的是ohos.toolchain.cmake。兩個工具鏈的 target triple、系統(tǒng)頭文件路徑、鏈接器參數(shù)全都不一樣。所以鴻蒙化不是什么“改個 ABI 參數(shù)重新編譯”而是要切一套完整的構(gòu)建工具鏈。還有一個容易忽略的點(diǎn)鴻蒙 Native 動態(tài)庫的符號可見性管理比 Android 更嚴(yán)格。很多庫在 Android 上能跑是因?yàn)?Bionic 對未導(dǎo)出符號的容忍度比較高鴻蒙 CMake 默認(rèn)開啟CXX_VISIBILITY_PRESET hidden你沒有主動導(dǎo)出的函數(shù)外面就是看不見。適配的時候就別再指望“編譯過了就一定能動態(tài)加載”符號導(dǎo)出這一步要專門檢查。2. 鴻蒙的 Native 能力長什么樣NDK 機(jī)制對照拆解2.1 鴻蒙 NDK 的開發(fā)入口和承載形態(tài)鴻蒙的 NDK 不是和 Android NDK 平行的一套東西它更準(zhǔn)確地說應(yīng)該叫“Native 開發(fā)套件”隨 DevEco Studio 的 SDK 一起分發(fā)。裝好 DevEco Studio 之后SDK 目錄下會有一個native文件夾里面能看到sysroot、toolchains、llvm、cmake、build-tools這些子目錄結(jié)構(gòu)上和 Android NDK 有很強(qiáng)的既視感但你要記住這套工具鏈編譯出來的 .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 里來表達(dá)。另外鴻蒙 Native 層對外暴露的 API 入口主要有兩類Node-APIN-API為 ArkTS 與 C/C 之間的互操作設(shè)計頭文件是napi/napi.h。你可以把它理解成“鴻蒙生態(tài)里的 JNI”但它不依賴 Java VM走的是 Node.js 風(fēng)格的napi_env。直接 C ABI如果你的 C/C 庫并沒有和 ArkTS 有太多交互只是想被某個運(yùn)行時加載并調(diào)用純函數(shù)那就完全可以不碰 N-API直接暴露 C 風(fēng)格的導(dǎo)出函數(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。這是我認(rèn)為在大多數(shù)場景下最值得優(yōu)先考慮的路線。dart:ffi是 Flutter/Dart 語言自帶的 C 互操作機(jī)制不依賴任何平臺通道直接在 Dart 側(cè)final dylib DynamicLibrary.open(libfastmath.so); final fftCompute dylib.lookupFunctionInt64 Function(Int64), int Function(int)(fastmath_fft);鴻蒙的 Flutter 運(yùn)行時里DynamicLibrary.open對應(yīng)的是底層dlopen只要你把編譯好的 .so 正確打進(jìn)了鴻蒙應(yīng)用包里dart:ffi 就能直接解析出函數(shù)指針。這條路的好處是繞過 N-API 這層中間翻譯Flutter 側(cè)代碼在 Android 和鴻蒙兩端幾乎可以復(fù)用同一套 FFI 綁定邏輯。第三條路純 N-API 平臺通道。在 ArkTS 層調(diào)用 N-API 函數(shù)再用 MethodChannel/EventChannel 把結(jié)果傳回 Flutter。這條路一般不推薦因?yàn)樗扔谠凇癋lutter → ArkTS → N-API → Native”之間加了兩層橋接序列化和跨線程調(diào)度的開銷會把原生性能優(yōu)勢吃掉大半。簡單總結(jié)一下能直連 C ABI 就優(yōu)先 dart:ffi必須和 ArkTS 界面交互才考慮 N-API絕對不要三層橋接疊著用。3. 實(shí)操把帶 CMake 的三方庫一步步拉進(jìn)鴻蒙3.1 準(zhǔn)備一個可復(fù)現(xiàn)的工程基線為了講得具體一點(diǎ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這也是我認(rèn)為最干凈、性能最直接的方式。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)境下默認(rè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)鍵點(diǎn)有兩個我沒有再把jni_bridge.cpp編譯進(jìn)去因?yàn)槿绻?dart:ffi 直連JNI 橋接文件已經(jīng)沒有存在的意義。除非你還要保留一份 Android 端的舊實(shí)現(xiàn)那可以繼續(xù)編但這就需要在 CMake 里做平臺分支了。CMAKE_CXX_VISIBILITY_PRESET我特意設(shè)成了default。前面說過鴻蒙工具鏈默認(rèn)隱藏符號如果某個三方庫的 C 函數(shù)沒有被__attribute__((visibility(default)))顯式標(biāo)注那么 dart:ffi 的lookupFunction會直接找不到符號。與其去改一堆源碼不如直接在 CMake 層面放開默認(rèn)可見性。如果你的三方庫還依賴了其他預(yù)編譯的 .a 或者源碼子模塊只要把對應(yīng)源碼目錄add_subdirectory或者target_link_libraries引進(jìn)來就行。但一定要保證那些子模塊的 CMakeLists 里沒有硬編碼 Android 的ANDROID_ABI這類變量否則工具鏈一換就破裂。3.3 構(gòu)建 so 產(chǎn)物并處理包體路徑工程里光有 CMakeLists 還不夠還要確認(rèn) hvigor 在構(gòu)建的時候真的去編譯了 C/C 源碼并把這個 .so 打進(jìn)了最終產(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 手機(jī)那先只編arm64-v8a就夠了。如果還要支持模擬器可以把x86_64也加進(jìn)來但也要確保源碼能在 x86 上編譯通過。在 DevEco Studio 里直接點(diǎn)一下構(gòu)建稍等片刻就能在entry/build/default/intermediates/libs/default/arm64-v8a下看到libfastmath.so。這里有一個很多新手會掉進(jìn)去的認(rèn)知偏差如果發(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 再進(jìn) 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ù)指針直接傳進(jìn)去避免 Dart 和 C 之間的數(shù)組拷貝Float32List fft(Float32List input) { final output Float32List(input.length); final inputPtr input.buffer.asByteData().getUint64(0); // 實(shí)際會走 package:ffi 的 helper // 用 Pointer 的方式更規(guī)范使用 allocate 后拷貝數(shù)據(jù) // 這里給偽代碼示意“直接把指針交給 C” _fftEntry(input.length); return output; }你可能會注意到dart:ffi 的最高頻寫法是用PointerT和lookupFunction...這套 API 在 Flutter 的鴻蒙運(yùn)行時上也是被支持的不需要額外引入平臺相關(guān)依賴。如果一個三方庫在 Android 端本身就已經(jīng)暴露了一套 C ABI很多庫如 sqlite3、libjpeg-turbo 都是這么設(shè)計的那鴻蒙端直接復(fù)用這套 ABI 是最省力的方案。真正需要補(bǔ)寫的是插件注冊邏輯鴻蒙 Flutter 插件和 Android Flutter 插件在工程組織上不是同一套目錄。社區(qū)里常見的做法是在 pub 包下增加ohos目錄編寫 ArkTS 插件入口然后在pubspec.yaml里聲明鴻蒙平臺的實(shí)現(xiàn)。不同插件模板的細(xì)節(jié)有差異但核心邏輯是一致的確保最終打進(jìn) HarmonyOS 安裝包的 .so 的 soName 和你 Dart 層DynamicLibrary.open的名字能對上。這里最常見的翻車點(diǎn)是 hvigor 把 so 打到了entry/libs路徑而 Flutter 引擎找不到導(dǎo)致運(yùn)行時dlopen failed。4. 編譯、鏈接、運(yùn)行三階段踩坑實(shí)錄4.1 編譯期坑工具鏈版本與標(biāo)準(zhǔn)庫鏈接我最早適配一個用到大量 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)境里單獨(dú)構(gòu)建 .so 來做驗(yàn)證那就要自己指定。這里有個細(xì)節(jié)鴻蒙 toolchain 里的 STL 選擇是通過OHOS_STL這個變量控制的和 Android 用ANDROID_STL不一樣。如果你的三方庫依賴libc_shared.so記得把OHOS_STL設(shè)為c_shared否則默認(rèn)靜態(tài)鏈接可能導(dǎo)致產(chǎn)物體積變大并且如果應(yīng)用里同時有多個 so 都靜態(tài)鏈了 STL內(nèi)存里就會有好幾份 libc 實(shí)例某些靜態(tài)全局變量的狀態(tài)就會互相打架——這在大型插件工程里真的會遇到。編譯期還有一個很經(jīng)典的坑代碼中寫了#ifdef __ANDROID__來區(qū)分平臺結(jié)果鴻蒙的編譯宏里沒有__ANDROID__平臺分支跑錯。要養(yǎng)成良好的習(xí)慣用__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最后只能在源碼里把這段能力檢測邏輯加上平臺宏過濾掉。另一種情況是鏈接成功但運(yùn)行時提示 undefined symbol。這通常是符號可見性搗的鬼。鴻蒙的 CMake 工具鏈里如果三方庫的 CMakeLists 中設(shè)置了set(CMAKE_CXX_VISIBILITY_PRESET hidden) set(CMAKE_C_VISIBILITY_PRESET hidden)那么所有函數(shù)默認(rèn)隱藏只有主動__attribute__((visibility(default)))的符號才會進(jìn)入動態(tài)符號表。你在 Android 端沒碰到這個問題大概率是 Android 端你編譯的是靜態(tài)庫或者 JNI 層用了JNIEXPORT標(biāo)記而鴻蒙端走 dart:ffi 時這些標(biāo)記全都不存在。遇到這種問題別急著改一堆源碼先在構(gòu)建完的 .so 上檢查符號表ohos-sdk/native/llvm/bin/llvm-nm -D libfastmath.so如果fastmath_fft不在導(dǎo)出列表里那就在 CMakeLists 里直接把符號可見性放開set(CMAKE_CXX_VISIBILITY_PRESET default) set(CMAKE_VISIBILITY_INLINES_HIDDEN OFF)或者在函數(shù)聲明上顯式加__attribute__((visibility(default)))。我傾向于后者因?yàn)椤澳J(rèn)全部可見”雖然省事但會污染導(dǎo)出表增加動態(tài)鏈接的查找開銷還可能和別的 so 產(chǎn)生符號沖突。對于三方庫適配能精準(zhǔn)導(dǎo)出就精準(zhǔn)導(dǎo)出。4.3 運(yùn)行期坑dlopen、日志與 JNI 遺留代碼編譯、鏈接都過去之后運(yùn)行時跑起來才發(fā)現(xiàn)的問題才最考驗(yàn)經(jīng)驗(yàn)。常見的運(yùn)行期坑有三個我一個個說。第一個是dlopen failed錯誤信息一般是cannot locate symbol或library libxxx.so not found。優(yōu)先檢查 .so 有沒有真的打進(jìn)安裝包其次檢查 .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 的運(yùn)行時否則答案是不行。因?yàn)轼櫭傻?ArkTS 沒有 JNI 機(jī)制JNI_OnLoad這類導(dǎo)出函數(shù)沒有任何入口會去調(diào)用它。所以只要有 JNI 代碼存在就必須改造要么改成純 C 函數(shù)讓 dart:ffi 直接調(diào)要么改成 N-API 函數(shù)交給 ArkTS 去調(diào)。5. 性能驗(yàn)證與算力調(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)勢來源。它最大的特點(diǎn)是不經(jīng)過 Dart 對象序列化、不經(jīng)過消息隊(duì)列、不經(jīng)過平臺通道調(diào)度Dart 代碼拿到的是 C 函數(shù)的直接地址參數(shù)就是普通標(biāo)量或指針一次函數(shù)調(diào)用的開銷和你在一段 C 程序里調(diào)用一個外部符號差不多。對比 MethodChannel 的流程——把一個Uint8List編碼成標(biāo)準(zhǔn)消息、跨語言邊界發(fā)送、另一側(cè)解碼、再進(jìn)入 native 函數(shù)——這里的每一步都是毫秒級以下但累積起來非??捎^的開銷。所以適配的時候我強(qiáng)烈建議做一個簡單的性能基線測試同樣的數(shù)據(jù)量分別走“dart:ffi 直連”和“ArkTS N-API 再轉(zhuǎn)發(fā)”兩條路計時然后對比。絕大多數(shù)時候前者比后者省掉 30% 以上。這個數(shù)據(jù)也幫你判斷一個三方庫到底值不值得花力氣走 FFI 直連。5.2 能跑的下一步NEON、并行與內(nèi)存布局優(yōu)化跑通只是第一步。如果你的三方庫屬于重計算類型鴻蒙化之后還可以做幾件典型的算力優(yōu)化。第一件是確認(rèn) ARM NEON 向量化是否真的生效。很多數(shù)學(xué)庫在 Android 端會啟用 NEON intrinsic但換到鴻蒙工具鏈后如果源碼里對平臺宏的判斷漏了鴻蒙分支NEON 代碼可能直接被編譯器丟棄退化為標(biāo)量運(yùn)算計算性能斷崖下跌。檢查方法是在 CMake 里加target_compile_options(fastmath PRIVATE -O3 -mcpucortex-a76 -mfpuneon)注意-mcpu要根據(jù)你的目標(biāo)機(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ù)搬運(yùn)的時間可能會吃掉計算省下的時間。更好的做法是一開始就讓 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)用了運(yùn)行時間很長的 C 函數(shù)必然卡幀。正確做法是把 FFI 調(diào)用放到 Dart 的Isolate里跑或者直接讓 C 側(cè)通過回調(diào)把結(jié)果異步拋回來。這塊在鴻蒙上跑通后整個應(yīng)用的幀率和響應(yīng)性差距會非常明顯。6. 最后幾條經(jīng)驗(yàn)適配做多了回頭看這個流程最值錢的其實(shí)不是某個具體函數(shù)怎么寫而是把“安卓原生資源直接搬到鴻蒙”的幻覺打碎鴻蒙不是 Android 的兼容層三方庫的 NDK 產(chǎn)物需要換工具鏈、換 ABI、換調(diào)用鏈路重新編譯和驗(yàn)證。我個人的習(xí)慣是優(yōu)先保證純 C ABI 的穩(wěn)定性讓 Flutter 側(cè)統(tǒng)一走 dart:ffi能用 CMake 變量控制差異就不要動源碼碰到符號問題第一反應(yīng)先看導(dǎo)出表不要埋頭改調(diào)用方。最后再分享一個小技巧編譯產(chǎn)物最好在 CI 里單獨(dú)跑一個“鴻蒙 native 構(gòu)建 符號清單導(dǎo)出”的流水線任務(wù)每次三方庫升版本都自動化檢查一遍所有需要的 C 函數(shù)是否還在導(dǎo)出表里。別等集成到 DevEco 工程里才發(fā)現(xiàn)符號丟了那個排查過程真的會讓人懷疑人生。底層這條路多驗(yàn)證一次后面就能少熬夜一次。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
日韩黄片影院| 欧美夜夜骑视频| 91成人在线免费视频| 欧美日韩系列| 任我爽在线视频免费观看| 欧美视频在线第3页| 午夜男人av| 一区二区影视| 天天操狠狠日夜夜干超大胆开放com大香蕉视频在线观看 | 日韩人妻无码精品系列| 熟妇在线视频一区二区| 日欧操屄视频| 伊人激情五月天一区二区| 国产精品高潮久久久无码| 啊啊啊啊啊啊啊在线| 怡红院视频在线| 狠狠中文字幕| 日韩 欧美 视频 在线 一区| 1769国内精品视频| 青娱乐淫乱1314| 亚洲熟女人妻中文字幕一区二区| 91丝袜人妻| 99re在线视频国产| 啊啊啊水好多| www.91视频网| 人妻熟女一区二区三区视频| 青青草在线视频美女| 亚热日本熟女| 亚洲999综合| 十八禁黄色成人网站观看| 97在线欧洲| 成人女人国产| 超碰这里只有精品| 婷婷五月天无码 | 久九干| 黑丝制服中文字幕 | 97精品熟女少妇一区| 在线观看不卡一区二区三区| 操婢日韩| 日本三级R| 日韩欧美俄罗斯A片| 欧美日日操| 中文字幕在线观看永久| 欧美日本中字另类在线| 欧美综合区| 午夜大香蕉| 日本三级韩国三级99| 久久性爱视频| 国产传媒一区日韩| 91中出在线| 色色九区| 亚洲成人精品在线一区| 国产高清成人mv在线观看| 亚洲成人无码影院| 操操啪| 色爽爽文学| 人妻夜夜爽天天爽麻豆三区网站 | 欧美性爱一内片一区二区三区| 花野真衣| 人妻丝袜肏逼| 精品一级毛片在线观看| 欧美一级黄片视频在线| 人妻熟女字幕一区二区| 成人热久久精品| 欧美一级久久久久久久大片动画| 欧亚在线视频| 打av高清| 97亚洲自在精品在线观看| 91视频在线观看18| 亚洲一区二区三区中文字幕| 成人五月香网在线| 性性欧美| 国产精品国产精品国产| 久草免费在线一区二区| 亚洲第一页欧美| 97操综合| 6080YYY午夜理论片在线观看| 日欧操屄视频| 超碰综合97在线| 97在线观看| 久草视频在线视频在线视频在线观看 | 97 亚洲 日韩 欧美 在线| 亚洲男人的天堂网| 97超碰欧美| 少妇高潮对白在线观看| 欧美精品第四五页中文字幕在线观看| 黑人综合网| 91人妻尻屄视频| 六六久久日韩不卡| 夜夜操一区二区| 亚洲成人贴图| 在线观看国产黄色| 色哟哟1区2区| 91操熟女视频| 国产女人操逼视频| 久男人久久| 97日韩欧美| 密乳AV免费观看| 婷婷91| 嫩草 人人网精品| 亚洲一区二区三区婷婷| 国产激情在线| 后入式五六区| 国产中文精品一区二区在线观看| 一牛影视久久久一区二区三区| 人妻少妇久久中文| 国产aⅴ无码片毛片一级网站| 午夜天天碰综合视频| 蜜臀久久在线视频| 精品人妻av在线播放| 欧美日韩理论一区| 91夜色| 69精品人人人人| 麻豆国产成人精品| 91精品亚洲内射孕妇| 亚洲 欧美 中文 日韩超碰| 国产精品对白自产拍| 国产精品人妻熟女aⅴ| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 精品人妻一区二区免费蜜桃视频| 国产99 中文字幕日韩小视频| 免费9 1久久| 亚洲成人ab| 操逼逼福利视频| 国产肏屁眼视频| 天天噜| 开心激情站| 久久久久深夜无码| 国产91久久九九免费精品无码| 69精品人人人人| 沈阳熟女高潮对白视频| 性色一线| 精品蜜乳AV免费观看| 亚洲色偷偷色噜噜狠狠99网| 青青草国产欧美非洲黑人| 精品午夜福利国产一区二区在线观看| 大香蕉青青9| 欧 美 自 拍 偷 拍| 国产精品久久久视频| 一区二区三区国产在线播放| 日本三级小说中文字幕| 亚洲无无码αⅴ每日更新| 国产欧美第五页| 三级色影综合网| 能看的AV| 国产精品永久免费10000| 成人片视频| 精品一二三区久久AAA片| 国产精品第一页国产大屁股视频免费区i| 成人性爱av.com| 日本美女性生活久久久久久久| 日本天天干天天操一区| 久久久久密臀一区二区| 亚洲暴力强奸AV| 蜜臀无码一区二区| 91色综| 立川理惠被中出无码| 天天看高清麻豆| 亚洲欧美中文一区二区三| 亚洲欧美日韩中文久久自慰| 婷婷五月天av| 99re免费视频精品全部| 呻吟 欧美 日本 中出| 亚洲激情久久| 日韩综合无码色欲vv| 校园激情狠狠四射| 神马影院午夜福利久久久| 熟女色综合久久| 亚洲色婷婷综合久久一区二区三区| 开心五月婷婷激情| 91精品微拍福利| 少妇熟女视频一二三区| 欧美成人亚洲精品| 狠狠爱综合| 国产精品com| 97精品视频网站| 国产精品亚洲一区二区三区四区| 99久久99久久免费精品蜜臀| 大香蕉日亚洲日本亚大| www鬼畜国产男人的天堂| 久久这里是精品| 精品国产乱码久久久A| 青青草国产亚洲精品久久| 国产区性爱在线视频秋霞豆| 一起草高清无码| 青青久久久| 大香伊人在线一区| www.狠狠干.coom | 久久精品店| 中文字幕熟女人妻丝袜| 777超碰| 综合久久中文字幕综合日韩精品| 免费一级黄色录像影片| 高清在线偷拍自拍视频| 久操网视频| 久久久不卡| 日韩精品9999| ai欧美亚洲小说| 啊啊啊操一区| 久久99网站| 强奸乱伦中文字幕AV| 婷婷激情丁香| 91狠狠狠| 91操熟女视频| 俞拍自拍| 久久国语| Aa东京男人的天堂| 91精品久久久久久77777| 亚熟在线| 诱惑人妻欧美一区在线播放| 久久一二三四五六七八九区区| 男人的天堂啪啪啪啪啪蜜桃不卡| 东北丰满熟女国产一区| 青草av在线| 色牛牛AV| 国产AV超爽| 欧美亚洲中文字幕| 青青草五月份天| 欧美成人综合| 天美精品一区二区三区四区在线观看| 久久天天躁日日躁狠狠躁| 狠狠狠一区二区三区| 国产精品老师| 大香樵伊人网| 99ri在线视频| 三级片大波波| 91美女在线视频| 午夜性| 欧美在线55555| 中文字幕精品久久久久人妻红杏ⅰ| 欧美大香蕉97| 欧美亚洲涩涩| 亚欧操逼片在线观看| 亚洲 无码 有码 中文字幕| 久久夜精品一区二区三区| 好看的久久不射无码影视影院| 操人妻少妇中文 | 97香蕉人人乳| 亚洲色图自拍| 美女t无毒不卡不卡| 国产又粗又长的视频| 这里只有精品97| 99re这里| 亚洲色图综合网| chaopen97久久| 蜜臀99久久国产| 日韩射精| 一级性爱啪啪视频| 20cm女自慰在线日韩欧美| 国产51色综合久久免费| 亚洲av淫乱| 竹菊一区二区三区AV线| 成人国产视频在线观看| 亚洲 自拍偷拍 欧美| 欧美日韩国内不卡| 亚洲天堂另类小说男人| 99re6国产精品99re| 99re黄| 无码一区免费在线不卡| 免费的黄片wwwwww| 91精产一区二区三区| 超碰碰97资源站| 91亚洲色人| 激情九月婷婷| 91综合国产精品| 久操国产在线| 亚洲精品日日夜夜52| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 老司机射| 欧美日韩免费专区在线| 欧美劲爆第一页| 人人妻人射| 偷拍欧美激情| 绯色一区二区三区不卡少妇| www.超碰| 亚洲AV在线资源| 一二三区操逼国产91| 亚洲欧美精品国产一区二区| 亚洲 图片 综合91| 97鸡把在线视频| 成人av福利在线观看| 激情综合五月| 日本黄色天堂| 欧美gv在线观看| 天天干,天天日| 国产三级中文字幕粉嫩| 天天干天天操天天干天天操| 久久超碰大香蕉| 97天天日| 91久久久久久| 9久9久| 26uuu性物| 亚洲18禁| 大奶的诱惑| 美日韩成人| 欧美草草| 亚洲综合一区二区| 91精品少妇搡搡搡| 色乱二区| 欧美色视| 亚洲天堂,男人| 精品人妻高清麻豆av| 天天视频综合在线观看视频| 小骚逼被操的爽不爽| 自拍偷拍亚洲熟女妇人精品 | 2021国产成人精品久久| 亚洲日本韩国极品一区二区| 男女无套 免费网站| 97久久精品亚洲| 精品久久97观看在线视频| 一块操欧美| 欧美三级偷拍| 一区二区 韩日AV| 欧美操逼录像国产黄色国产| 日韩成人综合网| 91高清欧美| 五月丁香久久| 中文字幕日韩电影人妻| 福利一级版子| 美国aaaaa一级黄片| 97在线日韩中文字幕| 国产福利av精彩对白| 91天堂丝袜美腿| 2019久久久久久久久福利| 欧美日韩97在线| 99热综合| 国产精品高清2021在线| 成人精品水蜜桃久久久久久久| 国产一区二区视频在线播放| 亚洲欧美清纯| 无码视频一区二区| 国产日韩欧美三级片| 奶水 人妻 哺乳 在线| 亚洲图片欧美91N| 中文字幕一区二区免费在线| 人妻少妇精品久久久久久| 国产超碰国产97| 国产精品露脸在线观看| 国产九九九九九九| 久久9精品视频| 欧美黄色大片在线观看 | 91久久国产综合久久| 翔田千里爆乳巨臀无码| 国产超碰欧美| 精品射1999| 亚洲古典另类欧美在线| 久久久久九九九| 加勒比av中文| 中文字幕一区 二区三四五 区日 日骚| 黑人免费福利视频| 欧美碰碰综合色| 大香蕉 222| 爽 好舒服 无码刺激久久| www.色吧5.com| 性欧美第一页| 精品然女一区二区| 综合久欧洲| 国产67194| 性videos欧美熟妇hdx| 97操97干| 制服诱惑亚洲一区二区三区在线观看| 日韩精品区二区三区不卡| 日韩性爱1级片视频| 国产欧美在线观看免费观看| 亚洲黄色电影| 在线五区| 国产欧美后入| 78p欧美| 久久精品国产精品亚洲艾通辽熟妇| 亚洲国产精品无码AV在线| 久久午夜色播影院免费高清| 欧美色91| 91久久精品美女高潮喷水| 欧美狠狠操| 志村玲子视频一区二区| 超碰碰碰碰| 午夜理论片在线观看免费| 亚洲欧美一区二区网址| 欧美大片91| 久久黄人人爽视频| 熟女91网站| 女人天堂网| 中文字幕超碰CAO| 性生活久久久久久久久久| 六九九九| 无码99| 五月天伊人| 亚洲操人| 国产亚洲禁久一区二区| 五月色网| 激情网五月天| 97精品国产97久久久| 亚洲超碰AV| 国产三区免费在线观看| 久久久久国产无av| 婷婷伊人| 亚洲美乱| 中文字幕日产av人| 91久久久视| 欧美72网页| 欧洲精品一区二区三区| 欧美 亚洲 另类 综合| 色哟哟av网址| 欧美精品不卡一二三四在线91| 日韩人妻精品| 乱人乱色一区二区三区免费| 亚洲久久久| 日本不卡二区| 免费av高清无码| 亚洲h片在线免费观看| 成人免费看吃奶视频网站| 囯产精品久久久久久久久久二区三区| 中文字幕高清精品一区| 激情抓乳插进去啪啪啪日韩| 在线观看日韩av不卡| 中文字幕在线观看视频www| 色婷婷狠狠| 超碰超碰欧美| 婷婷九月国产| 黑人性欧美| 欧美色亚洲| 国语精品内射在线观看| 偷拍欧美综合| 亚洲欧美精品久| 99视频自拍区| 黄片免费日韩| 凹凸视频在线观看伊人| 日韩精品人妻中文字幕有码午| 久草资源欧美在线视频| 亚洲欲| 91九色丨风韵犹存| 国产 日韩 欧美高清 | 日韩精品中文字幕一| 午夜欧美女人操逼| 久久久久久久少妇| 四季av一区二区凹凸精品小说| 熟妇视频一区二区三区在线| 久草视频在线视频在线视频在线观看| 亚洲一区二区麻豆影院| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 夜色AV无码手机在线影院| 日韩成人网址| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 伊人网青青| 欧美精品1区2区3区| 好湿好紧好爽 视频| 久久人妻无码毛片A片麻豆| 超碰色大香蕉| 国产AV激情无码久久无码 | 99精品久久久久久| 色激情综合网站| 久久久久久AV无码免费网站| 目产99999久久999| 92一区二区| 中国探花熟女| 91无码人妻| 精品日韩人妻精品一二三区| 精品精品精品| 美女网站91| 久久九九网| 欧美精品三区| 操www| 性色乱AV一区二区| 日本加勒比无码专区| 日本熟妇色熟妇在线视频播放| 青草成人免费视频一com| 九月丁香综合网| 97视频620| 久久九色| 国产精品女同| 国产精品欧美在线观看 | 婷婷色网| 国产一级内射高清视频| 色综合一区二区三巨| 清纯唯美第一页| 操逼逼无码| 97国产精品久久久久 | 日本午夜福利影院| 国产av色网| 熟女人妇一区二区三区| 久久风骚城市| 亚洲欧美精品91| 人妻丝袜二区| 人妻啊啊人妻啊| 欧美色图第一页| 色婷婷丁香五月| 亚洲欧美97| 中文字幕在线观看丝袜| 国产99999| 久操婷婷| 精品人妻免费观看| 亚洲欧美国产中文字幕| 日韩探花精品在线视频| 四虎免费视频| 深夜操逼网| 大象AV在线| 久久久av爱| 日少妇视频| 97超碰逼| 首页中文字幕中文字幕免费| 天堂亚洲欧美| 大香蕉AV丝袜| 国产第25页在线观看| 东京热AV男人的天堂| 激情综合五| 99热销国产这里有精品| 高清在线不卡一区二区 视频| 蜜臀久久在线视频| 国产在线视视频有精品| 少妇久久久久久| 欧美激情片一区二区| 国产福利在线视频网站| 黄色成年| 欧美精品 - 91爱爱| 五月婷婷色色| 久久丁香久草综合网| 91欧美性| 久久久久精| 欧美日本中字另类在线| 日韩欧美传媒一区国产| 鸥美插入视频| 亚洲色图超碰在线| 丁香色五月 97干| 中文字幕欧美日韩三级| 欧美性五月| 精品91摸| 黄色av一区二区在线| 最新国产精品| 97操综合| 97色涩| 亚洲天堂女优在线| 丁香九月激情啪| 中文字幕人妻资源在线| 99999久久精| 今日头条成人一区二区三区四虎精品| 狠狠操狠狠| 伊人久久综合精品欧美| 又粗又长又大国产不卡| 另类欧美色| 爱丝福利| 亚洲天堂日本| 性色中出| 蜜臀av在线播放一区二区三区| 天天综合网日韩7799| av网站免费看| 97色网| 亚洲欧洲综合| 麻豆a'v电影| 国产精品亚洲四五区在线观看| 97免费在线视频在线观看| 九九无码视频| 国产精品极品美女视频| 久久久亚洲Av| 青娱乐福利99| 香港澳门日本三级网站| 麻豆久久精品亚洲精品88| 国产第11页| 大香蕉综合在线| 裸模AV女优| 精品国产污一区二区三区| 国产亚洲一黄| 超碰79人人乐| 亚洲色图激情小说| 操少妇很爽av| 91殴美大片| 人妻熟女午夜精品在线| 久热这里| 最新AVzaixian| 夜夜爽77777| 亚洲情色电影网| 欧亚综合一卡二卡中文字幕| 久久一区无码| 91美女看B| 欧美在线色| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 91视频国品一二三区| 91久久久久久久| 丁香九月激情| 久久婷婷一区二| 男人的天堂2010| 少妇高潮99p| 久久久久久久 九九九九九九九 | 偷拍 欧美 日韩| 国产精品久久久久久高清无码免费看| 欧美性爱无码一区二区三区| 欧美性爱视频免费一区一A | 亚洲日韩天堂| 大香蕉乱级| 日本一级婬片试看三分钟| 岛国毛片手机在线观看| 淫荡少妇免费| 色五月婷婷麻豆在| 亚洲男人天堂网久久| 啊啊啊97视频| 女人天堂网| 日韩超碰97| 91伊人久| 一本色道无码DVD中文字幕| 少妇高潮对白在线观看| 丁香五月偷拍| 亚洲色9| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 亚乱色| 99久视频| 亚洲综合码| 婷婷性网| 丰满翘臀美女影院视频| www.亚洲成人一区| 台湾佬中文娱乐网久久久久久久久久com | 无码人妻丰满热妇又大又粗| 国产中午字一暮区| 婷婷五月天av| 91欧美色| 麻豆国产原创AV色哟哟| 黄片视频,下载| 超碰色中文| 探花在线免费观看视频国产一区| 久久久久深夜无码| 日产狠狠干| 日韩一级欧美一级国产一级台湾| 黄网站黄视频网站进入口| 亚洲va有码在线天堂| 久久一二三四不卡 | 七月婷婷综合| 中文字幕精品乱码| 人人扣人人操| 国产后入| 91熟女.com| 国产怡红院| 久久亚洲欧美中文字幕国语| 岛国天天午夜影院传媒网| 好吊色在线观看| 99re热有精品视频国产| 久9爱精品| 福利偷拍视频-中文字幕2019国语完整视频大全-S91AV | 狠狠久久亚洲欧美专区| 男人女人18禁片免费看网站| 少妇丝袜在线观看AV| 婷色五月天| 国产JDAV无码视频在线观看| 精品少妇高潮久久| 欧美三级免费伊人| 亚洲丝袜二区| 日本熟女中文字幕一区| 97干在线视频| 裸体1区| 日韩国语字幕| 首页中文字幕中文字幕免费| 免费视频观看60秒| 欧美第二页午夜| 夜夜夜久久| 播播亚洲小说亚洲| 美女天天干| 九九九九一区| 色哟哟av网址| 91美女丝袜诱惑视频| 国产亚洲禁久一区二区| 素人一区二区三区日韩| 欧美天天干| 青青草女人天天干| 91麻豆天美传媒HD| 亚码激情| 天美麻花大全视频| 不卡一区二区日本视频 | 日韩精品9999| 91色女| 99自拍视频在线| 欧美精品成人在线播放| 12一15性XXXX粉嫩国产| 日韩图色| 久久久久成人网| 中文字幕少妇色 | 超碰人人在线| 伊人久操| 99热99在线播放激情| 日本三级一区二区 在线| 日韩免费a级毛片无码a∨| 好爽视频在线观看视频| 亚洲资源一区| 不卡在线观看视频| 欧美激情内射| 99久久99久久免费精品蜜臀| 另类欧美色| 大香蕉久久| 后入国产| 欧美美女视频| 欧美色图综合网| juliaann丝袜| 欧美亚洲中文| 亚洲激情片| 亚州91| 3PAV乱伦视频| jazzjazz国产精品麻豆| av三级电影在线播放| 免费观看网黄| 粉嫩av久久一区二区三区| 先锋影音av先锋一区| 91看黄片| 国产精品久久久久久久毛片1| 国产精品999zyz| 日本激情免费大片| 亚洲操逼视频网站| 婷婷丁香久久| 日韩女优在线| 97se综合网| 91美女色视频亚洲| 夜色97| 亚洲欧美校园| 国产精品第一页国产大屁股视频免费区| 精品一级毛片在线观看| 婷婷av在线中文字幕| 黄色电影在线播放综合网站| 国产高清MV操逼视频| 国产精品香蕉热久久新品| 色香色欲天天综合网天天来吧| 志村玲子视频一区二区| 久久色激情一区二区三区| 91九九九小逼| 四虎免费视频| 欧美色院| 三级AV入口| 日本三级大片| 欧美综合加勒比在线| 99色婷婷中文字幕乱色| 亚洲影视第一页| 操人妻视频| 影音先锋乱伦资源| 国产激情视频在线观看| 91九久| 国产夫妻一区二区| 另类专区加勒比| 爱逼综合| 欧美性后入| 91精品少妇搡搡搡| 9国产超碰| 国产树林里野战在线看| 欧美精品在线观看| 91女优在线观看| 欧美热图99| 一级性爱视频免费在线| 国内外色色色色色成人视频| 人妻大相焦在线| AV天堂因数| 亚洲国产91精品一区二区久久| 手机看av网站在线看| 操穴国产| 色婷婷日韩精品一区二区三区 | 国产精品动态一区二区三区四四| 一起草在线视频| 人人插人人摸人人| 精品一区96| 在线天堂资源亚洲| 国产精品免费日韩| 久久国色天香香蕉| 日韩BBN| 久久精品国产99精品亚洲蜜...| 超碰 97国产熟女| 久久久96精品| 欧美一区二区福利在线| 丁香六月激情综合| 啊啊啊啊在线播放| www亚洲欧美| 午夜男女爽爽爽在线视频 | 国语对白露脸XXXXXX| 91一区二区| 免看60秒涩涩视频| 日本熟女免费視颖| 亚洲s在线观看| 中文区中文字幕免费看| 操逼啊啊啊91| 天天综合欧美综合| 欧美组图日韩亚洲中文字幕| 久久综合婷婷| 久久精品国产97欧美精品亚洲 | 999999精品| 我要看免费韩日黄片| 成人一区二区三区四区| 日韩精品字幕| 美中韩AV综合网| 国产乱子伦久久精品综合一区二区三| 国产懂色精品国产av| 伊人久久大香线综合无码| 91亚洲网| 天美传媒国产原创中文字幕亚洲欧美另类 | 黄久久| 国产精品制服丝袜清纯唯美| 蜜桃色院一区久久| 欧美亚洲国产91在线| 成人AV素股で擦久久| 亚洲成人贴图| 大香蕉综合| 亚洲中文字幕在线视频一区二区| 天综合网| 九九九热| 久久久久久久久久久人妻| 天天草天天日| 欧洲Au麻豆| 亚洲人成网站7777| 精品乱子一区二区三区99| 午夜视频黄| 爱爱动态120秒| 日日摸天天爽夜夜欢| 国产人妻精品久久久一区二区三区 | 青操影院| 国产伦乱91| 欧美日韩国产精品久久色婷婷| 操逼网免费无码视频| 欧成人在线| 日本在线一二| {男男暴菊gay无套网站| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 欧美日韩国产高清在线一二三区 | 国产精品人妻无码久久久老鸭窝| 人妻一区久久二区三区色播| AV和黑人在线播放| 成人精品水蜜桃久久久久久久| 亚洲砖码砖专无区2023| 欧美色图另类图片| 中文乱码99| 国产网红精品| 五月天婷婷社区| 91校园春色长篇| 国产亚洲深夜激情| 久久久久久无码人妻中文字幕| 国内外色色色色色成人视频| 精品欧美不卡在线播放| 亚洲欧美精品久| 亚洲国产一区二区三区四区国产| 亚洲欧美情色| 国产精品密臀网在线观看| 干婷婷综合网| 91天天综合网| 一区二区国产视频在线观看| 五月综合色| 国产一区二区三区白丝| 乱色老一区二区三区的观看方式| 国产精品交换一区二区| 91麻豆天美| 久久久久久裸体| 日韩精品 资源| 亚洲图片婷婷五月天| 蜜臀99久久精品久久久久久| 日日夜夜青青草母狗| 国产伦精品一区二区三区在线观 | 99精品网站| 中文字幕亚洲在线一区| 国产又色又粗又黄又爽| 亚洲丝袜二区在线| 在线观看视频91| 五月丁香综合| 强奸乱伦大香蕉| 亚洲日韩天堂| 不卡六六在线91| 九九九九九用不成了| 婷婷综合五月天| 天天操夜夜嗨| 国产精品福利视频| 天天躁狠狠躁av| 精品免费1| 亚洲欧洲网站免费观看| Av手机版天堂网| 97超碰日韩| 亚91网| 学生妹天天看| 超碰97资源中文字幕| 免费看一级a性色生活片久久无| 欧洲精品一级二级精品综合视频综合| 密臀国产在线| 91在线/欧洲| 国产熟女一区二区丰满| 天天色粽合合合合合合合| 亚洲中文字幕精品久久久久久直播| 精品久久久久久无码| 九九热九九| 欧美成人贴图| 国产精品九九| 91AV天美在线视频| 2019天天操天天爽天天拍| 熟女丰满人妻一区| 91蜜桃婷婷狠狠久久综合9色| 日韩精品碰碰| 欧美日韩另类在线播放| 最新国产精品| 97视频在线播放| 91网站在线播放| 一区二区三区在线日韩影院观看| 91丝袜激情在线| 欧美日韩理论一区| 99久久久无码| 伊人大香蕉在线| 亚洲色图一区二区三区| 青青草原伊人网| 国产视频97| 精品国产乱码久久久| 91久热| 国产九九九九九九| 亚洲国产中文字幕| 亚洲五区熟女| 亚洲在高跟鞋自慰久久在色线| 尤物av网站| 麻豆国产av网| 第二页中文字幕| 国产成人主播| 亚熟hd视频在线| 久久久久78| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 青青国产在线拍揄自揄拍| 男人的天堂在线2| 天天综合网久久ww| 欧美日韩国产电影| 四虎AV无码| 国产白丝在线| 日韩97视频| 久久精品人妻一区二区三区| 欧美线天码中字| 久久加勒比| 亚洲阿v天堂在线| 五月天我淫我色av| 日韩性爱视频在线免费观看| 久久精品国产亚洲AV无码电影| 国产视频一区二区免费| 色色色热| 亚洲国产综合久久天堂| 欧洲自拍色图gif在线| 中文熟女五十乱码在线| 99热在线只有精品| 欧美色院| 亚洲高清国产理伦片| 90后性网国产欧美| 裸体美女国产免费久久久网站| 中文字幕91综合| 色婷婷一区二区三区久久午夜| 精品免费成人久久| 91精品老女人| 国产高清精品一区二区三区毛片 | 性天堂| 在线无码视频| WWW黄片COM| 欧美 亚洲 大香| 在线97在线| 激情文学小说一区二区 | 国产精品一级片在线看| 99色综合| 日本人妻天堂网站在线播放| 夜夜欧美| 狠狠色噜噜狠狠狠狠2018| JIZZJIZZ国产精品喷水| 国产精品一二三免费网站| 欧美色色人| 91 丝袜在线播放| 最新国内自拍av免费| 欧美黄色大香蕉一区二区| 天天舔九色婷婷| 91精品操美女| 亚洲熟伦熟妇AV无码春色| 亚洲一区二区精品福利| 日韩97视频!在线| 国内成人圈中文字幕无码视频| 久久久久久久久久久久97| 91在线视频观看国产| 搡老女人老妇女老妇老熟女怎么读| 丝袜色综合| 精品无码久久久久久久杏吧| 综合激情五月丁香| 9长久久精品| 欧美综合自拍| 91free福利| 综合天天网| 夜夜欢天天干| 日韩欧美一级特黄大片| 91l欧美在线| 超碰色97| 国产中文字幕曰本毛片| 99自拍B亚洲 | 国产人伦精品一区二区三区| 婷婷探花久久精品一区| 无码不卡八戒| 久久性爱视频| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | www狠狠| 成人日本精品九区| 91久久青青草原精品| 欧美一区二区亚洲天堂| 欧美青青视频| 狠狠操官网| 啊嗯好大视频在线观看| 老妇女91| 亚洲九月丁香| 99re这里| 精品丝袜无码一区二区三APP| 98一区二区精品| 欧洲精品一级二级精品综合视频综合| 久久久夜夜嗨免费视频| 中文字幕人乱码中文字的预防方法 | 精品久久視頻在线| 91少妇高潮| 国产av美女被艹的乱叫| 伊人在线大香蕉二。| av天堂精品久久| 久久偷拍人| 手机看片91人妻| 伊人97超碰| 99热伊人| 精品色色| 欧美亚洲91| 久久黄色网址| 97欧美| 熟女天天干| 欧美五十路熟| 亚洲永久AV无码精品秋霞| 美女裸体无遮挡永久免费观看网站| 日韩在线视频1234| 蜜臀中文字幕| 国产馆极品诱惑| 超碰精品国产无码| 青青操少妇| 成人av在线播放| 91人妻人人妻| 草草草视频在线免费看| 中出789在线视频| 影音先锋视频在线| 五月开心久久AV官网| 日韩熟女操逼| 久久精品视| 日韩人妻一区二区精品| 夜夜夜夜久久久久| 国产视频一区二区三区久久亚洲天堂 | 日韩有码一区三区| 色综合国产在线观看| 欧美午夜色妇色鬼| 午夜一级免费毛片| 超碰538| 亚洲一卡2卡3卡4卡乱码网站 | 国产AV无码AV| 国产一区二区在线看| 国产原创自拍| 吖在线不卡一区二区国产剧情| 天天综合网~91综合网| 99精品网| 日本Suv精品一区二区| 91天堂视频| 91成人久久| 好爽视频在线观看视频 | 黑操B| 九九精品无码专区免费| 亚洲欧美激情小说| 久久综合久久综合人久久夜精品| 久久青青草原免费视频| AV女资源| 99.色网| 精品中文字幕一区二区l - 百度| 2017天天插| 久久久久久91香蕉国产| 日韩AV一起草| 狠狠爱综合| 日韩性爱视频在线免费观看| 亚洲成人帖图| 激情五月天色播| 天天操夜夜嗨| 大香蕉日韩| 亚洲有码 视频一区| 日本一区二区成人在线| 97极品无码| 日韩美女,国产传媒,视频一区| 亚洲,欧美,春色,另类| 岛国免费黄色网址| 日韩欧视频| 四虎在线观看网站| 91男女啊啊啊| 久久激情亚洲精品无码?V | 国产免费久久精品99re韩国| 亚洲精品色| 久久精品国产亚洲AV无码电影| 久久六六| 亚洲丰满很很操| 夜夜騷av、一區二區| 婷婷丁香五月综合| 在线观看成人性爱免费小视频| 久久狠狠色噜噜狠狠狠狠97| av草草在线电影| 欧美一二三区四五区| 男人的天堂2019AV| 思思性爱| 中文字幕丰满子伦无码专区在线视频最新 | 91天天看| 欧洲一区二区三区四区在线观看| 欧美在线色图| 久久本道| 激情开心五月天| 久久欧美性爱视频| 中文字幕乱在线伦视频中文字幕乱码在线 | 亚洲aw毛茸茸在线| 日韩乱码Av| www.色综合| 国产AV激情无码久久无码 | 欧美第一页| 综合色图区| 日韩人妻少妇 一区二区三区| 自拍偷拍 日韩无码| 妇女性内射冈站HDWWWCOM| 999精品乱码| 亚洲做性| 亚洲丝袜二区在线| 九九九九免费视频| 综合网久久| 黄色不卡视频| 91新在线欧美| 亚洲天天艹| 亚洲精品97在线| 免费观看欧美日韩操逼视频| 老熟女乱子伦中文字幕一区二区| 久久首页| 天天射天天| 欧美激情区| 午夜男人的天堂| 精品人妻久久久| 9久久久久久| 熟妇人妻精品一区二区| 欧美色交| 麻豆成人影音在线| 久久精品超碰| 精品国产a∨一区天美传媒| 色婷久久| 综合熟妇一区二区三区| 日韩久草| 欧美96交| 日韩欧美中文字幕搭讪巨乳美人妻视频| 国产第11页| 亚洲凸凹超碰成人| 久久精品视频一区三区小泽玛利亚| 欧美成人国产精品| 久久机热| 综合熟妇一区二区三区| 9丨久久九九九| 久操精品| 精品无码一区二区三区| 欧美日韩亚洲一区二区在线观看 | 免看60秒涩涩视频| 欧美亚洲丝袜人妻制服中文99| 久草这里只有精品| 97免费在线观看| 国产自产91区13区| 欧美aⅴ99久久黑人专区| 一二三啪啪专区| 国产视频小说| 一级免费精品| 九九九九精品| 天天做天天爱夜夜爽毛片试看| 日韩黄色av中文字幕| 26uuu国产免费观看| 婷婷丁香在线| 欧美综合骚| 欧美国产操逼| 成人一二三区| 日本高清免费一本视频在线观看| 天天色黄色影院天天操| 韩国一级婬片A片AAAAA| 天美精品av| 欧亚日韩三区| 插插综合网天天影视网|