精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

由一個編譯參數(shù)引發(fā)的Gn構(gòu)建依賴圖譜查詢

系統(tǒng) OpenHarmony
本篇真實(shí)記錄了一次出現(xiàn)問題,排查問題,解決問題并進(jìn)行深層次思考的過程,最后通過不斷的查找資料,找到了一個可以瞬間生成依賴樹的強(qiáng)大工具,為以后解決問題提供了一種思路。

??想了解更多關(guān)于開源的內(nèi)容,請?jiān)L問:??

??51CTO 開源基礎(chǔ)軟件社區(qū)??

??https://ost.51cto.com??

起因

事情的起因是這樣子的,在給學(xué)生上課的時候,想演示一下kv存儲(小熊派nano開發(fā)板),代碼版本??master??,結(jié)果發(fā)現(xiàn)編譯竟然出錯了,錯誤提示如下:

#創(chuàng)作者激勵#由一個編譯參數(shù)引發(fā)的gn構(gòu)建依賴圖譜查詢-開源基礎(chǔ)軟件社區(qū)

顯示的是在鏈接階段沒有找到如opendir,closedir等符號,這顯然就是kv_store庫編譯有問題。

原因及措施

經(jīng)過幾分鐘的查找,最后發(fā)現(xiàn)是kv_store庫的gn文件里面默認(rèn)給了這個參數(shù):

#創(chuàng)作者激勵#由一個編譯參數(shù)引發(fā)的gn構(gòu)建依賴圖譜查詢-開源基礎(chǔ)軟件社區(qū)

這個參數(shù)一加,我們kv的編譯就會使用posix相關(guān)的接口去實(shí)現(xiàn),而在3861里面應(yīng)該是沒有實(shí)現(xiàn)posix相關(guān)的文件接口,所以導(dǎo)致鏈接的時候出現(xiàn)opendir等等通不過,那么將這個參數(shù)置false再編譯試試看:

#創(chuàng)作者激勵#由一個編譯參數(shù)引發(fā)的gn構(gòu)建依賴圖譜查詢-開源基礎(chǔ)軟件社區(qū)

不出意外的編譯成功了,說明問題出在這里。

隱患

你以為問題到這里就完了嗎,當(dāng)然,如果只是以解決問題作為目的,我們當(dāng)前確實(shí)已經(jīng)達(dá)到目的了。
作為一個自律的工程師,我們知道:我們在做應(yīng)用的時候不應(yīng)該做侵入式修改,什么是侵入式修改呢:

一句話概括就是,你的代碼需要依賴框架的代碼,如果把框架拿掉或者換一個框架,就需要重新修改代碼。

也就是說:kv是openharmony里面的一個組件,我們使用openharmony的代碼框架的時候如果碰到問題,是不能通過侵入式修改達(dá)到目的的,因?yàn)檫@樣會破壞原有的代碼邏輯,假如后面如果有其他項(xiàng)目要使用這個代碼的話,就可能會出現(xiàn)問題,有時候甚至?xí)菫?zāi)難性的后果.
而且,侵入式修改有一個問題是:如果sdk或框架升級,往往意味著要在新的sdk或者框架上進(jìn)行修改,當(dāng)這種修改多起來的話工作量也是非常大的,如果沒有準(zhǔn)確的文檔進(jìn)行check,往往不能修改成功。

非侵入修改

那么不能用侵入式修改,又想達(dá)到正確編譯kv庫的目的,要怎么做呢,有一個辦法是使用gn的args,使用方法如下:

hb build -f --gn-args enable_ohos_utils_native_lite_kv_store_use_posix_kv_api=false這種方法會強(qiáng)制覆蓋代碼中的已聲明的變量,同樣能達(dá)到編譯通過的辦法。

那么這種方法有什么缺點(diǎn)嗎:當(dāng)然有,就是每次編譯都需要帶上長長的一串東西,且不說記不記得住吧,使用起來也是非常的不方便。

另外一種方法就是:在vendor對應(yīng)的目錄下的config.json里,對應(yīng)的組件內(nèi)feature添加對應(yīng)的參數(shù)聲明,這一種方式,在產(chǎn)品的readme文檔里也有介紹,比如:

#創(chuàng)作者激勵#由一個編譯參數(shù)引發(fā)的gn構(gòu)建依賴圖譜查詢-開源基礎(chǔ)軟件社區(qū)

比如我們現(xiàn)在是在編譯bearpi_hm_nano,那么我們只需要在vendor/bearpi/bearpi_hm_nano/config.json里面編輯,把kv_store庫添加對應(yīng)的參數(shù)即可,這里不知道是bug還是gn的原理就是這樣,我們不需要找到kv_store真正的庫聲明位置,而是隨便一個地方加上"enable_ohos_utils_native_lite_kv_store_use_posix_kv_api=false"就可以正常編譯通過了,比如:

#創(chuàng)作者激勵#由一個編譯參數(shù)引發(fā)的gn構(gòu)建依賴圖譜查詢-開源基礎(chǔ)軟件社區(qū)

這樣再編譯就成功了。

探究一下原理,在gn進(jìn)行build的時候,會在out目錄下生成一個args.gn文件,這個文件里保存了所有需要用到的args,如:

#創(chuàng)作者激勵#由一個編譯參數(shù)引發(fā)的gn構(gòu)建依賴圖譜查詢-開源基礎(chǔ)軟件社區(qū)

這里的args都是順序排列的,在gn進(jìn)行構(gòu)建的時候會讀取里面所有的參數(shù)。

另外一個問題

kv_store是什么時候調(diào)用并編譯的?到這里問題應(yīng)該就解決了,但是剛剛我發(fā)現(xiàn)另外一個問題,在添加feature的時候我們并沒有找到kv_store在config.json文件里顯示聲明組件,那么到底是在什么時候kv_store參與編譯了呢?
這里是config.json的內(nèi)容:

{
"product_name": "bearpi_hm_nano",
"type": "mini",
"version": "3.0",
"ohos_version": "OpenHarmony 1.1.0",
"device_company": "bearpi",
"device_build_path": "device/board/bearpi/bearpi_hm_nano",
"board": "bearpi_hm_nano",
"kernel_type": "liteos_m",
"kernel_is_prebuilt": true,
"kernel_version": "",

"subsystems": [

{
"subsystem": "iothardware",
"components": [
{ "component": "peripheral", "features":[] }
]
},
{
"subsystem": "hiviewdfx",
"components": [
{ "component": "hilog_lite", "features":[] },
{ "component": "hievent_lite", "features":[] },
{ "component": "blackbox", "features":[] },
{ "component": "hidumper_mini", "features":[] }
]
},
{
"subsystem": "systemabilitymgr",
"components": [
{ "component": "samgr_lite", "features":[] }
]
},
{
"subsystem": "security",
"components": [
{ "component": "device_auth", "features":[] },
{ "component": "huks", "features":
[
"disable_huks_binary = false",
"disable_authenticate = false",
"huks_use_lite_storage = true",
"huks_use_hardware_root_key = true",
"huks_config_file = \"hks_config_lite.h\"",
"ohos_security_huks_mbedtls_porting_path = \"http://device/soc/hisilicon/hi3861v100/sdk_liteos/third_party/mbedtls\""
]
}
]
},
{
"subsystem": "startup",
"components": [
{ "component": "bootstrap_lite", "features":[] },
{ "component": "init_lite", "features":
[
"enable_ohos_startup_init_feature_begetctl_liteos=true",
"enable_ohos_startup_init_lite_use_thirdparty_mbedtls = false"
]
}
]
},
{
"subsystem": "communication",
"components": [
{ "component": "wifi_lite", "features":[] },
{ "component": "dsoftbus", "features":[] },
{ "component": "wifi_aware", "features":[]}
]
},
{
"subsystem": "updater",
"components": [
{ "component": "ota_lite", "features":[] }
]
},
{
"subsystem": "commonlibrary",
"components": [
{ "component": "file", "features":[] }
]
},
{
"subsystem": "xts",
"components": [
{ "component": "xts_acts", "features":
[
"enable_ohos_test_xts_acts_use_thirdparty_lwip = false"
]
},
{ "component": "xts_tools", "features":[] }
]
}
],
"third_party_dir": "http://device/soc/hisilicon/hi3861v100/sdk_liteos/third_party",
"product_adapter_dir": "http://vendor/bearpi/bearpi_hm_nano/hals"
}

找了一圈,并沒有找到kv相關(guān)的庫,看來kv_store是由別的子系統(tǒng)或組件庫依賴的。

那是由誰依賴的呢?

#查找依賴kv_store的庫或組件。

首先,一個庫被依賴通常會寫在gn的deps列表內(nèi),比如這種:

#創(chuàng)作者激勵#由一個編譯參數(shù)引發(fā)的gn構(gòu)建依賴圖譜查詢-開源基礎(chǔ)軟件社區(qū)

如果還不明白,建議找?guī)灼猤n相關(guān)的文章看看就懂了。

現(xiàn)在的辦法就是一層一層的找到是誰調(diào)用的kv_store庫,回到之前編譯出錯的地方:

#創(chuàng)作者激勵#由一個編譯參數(shù)引發(fā)的gn構(gòu)建依賴圖譜查詢-開源基礎(chǔ)軟件社區(qū)

可以看到有一個名為utils_kv_store的lib文件,先找一下:?

#創(chuàng)作者激勵#由一個編譯參數(shù)引發(fā)的gn構(gòu)建依賴圖譜查詢-開源基礎(chǔ)軟件社區(qū)

#創(chuàng)作者激勵#由一個編譯參數(shù)引發(fā)的gn構(gòu)建依賴圖譜查詢-開源基礎(chǔ)軟件社區(qū)

然后再去找由誰依賴了utils_kv_store。

現(xiàn)在問題出來了,openharmony里面這么多代碼,如果每一個庫都要這樣不停的搜索相關(guān)字才能找到最終依賴的地方,效率低不說,還容易出錯,而且很容易跟著就跟丟了,這是因?yàn)槿说挠洃浟Ξ吘褂邢?函數(shù)調(diào)用太多層就會丟失路徑,這也就是為什么人類下棋永遠(yuǎn)下不過電腦。

請出神器

這時候就輪到了我們gn desc這個神器出廠了,我們先來看一下效果,這是依靠gn desc生成的依賴樹信息:

//out/bearpi_hm_nano/bearpi_hm_nano/build_configs/device_bearpi_hm_nano/device_bearpi_hm_nano:device_bearpi_hm_nano_info
//device/soc/hisilicon/hi3861v100:hi3861v100
//device/soc/hisilicon/hi3861v100/sdk_liteos:run_wifiiot_scons
//base/security/device_auth/frameworks/deviceauth_lite:hichainsdk
//base/security/device_auth/frameworks/deviceauth_lite/source:hichainsdk
//base/security/huks/interfaces/innerkits/huks_lite:huks_3.0_sdk
//base/security/huks/interfaces/innerkits/huks_lite:huks_3.0_sdk__notice
//third_party/musl:sysroot_lite
//third_party/mbedtls:mbedtls_static
//third_party/musl:sysroot_lite
//third_party/musl:sysroot_lite
//third_party/musl:sysroot_lite
//build/lite:ohos
//base/hiviewdfx/blackbox:blackbox
//third_party/musl:sysroot_lite
//base/hiviewdfx/hidumper_lite/mini:hidumper_mini
//third_party/musl:sysroot_lite
//base/hiviewdfx/hievent_lite:hievent_lite
//base/hiviewdfx/hievent_lite:hievent_lite_static
//base/hiviewdfx/hiview_lite:hiview_lite
//base/hiviewdfx/hiview_lite:hiview_lite_static
//third_party/musl:sysroot_lite
//third_party/musl:sysroot_lite
//base/hiviewdfx/hilog_lite/frameworks/mini:hilog_lite
//base/hiviewdfx/hilog_lite/frameworks/mini:hilog_lite_static
//base/hiviewdfx/hiview_lite:hiview_lite...
//third_party/musl:sysroot_lite
//base/iothardware/peripheral:iothardware
//device/soc/hisilicon/hi3861v100/hi3861_adapter/hals/iot_hardware/wifiiot_lite:hal_iothardware
//third_party/musl:sysroot_lite
//base/security/device_auth:deviceauth_build
//base/security/device_auth/services:deviceauth
//base/hiviewdfx/hilog_lite/frameworks/mini:hilog_lite...
//base/security/device_auth/deps_adapter:deviceauth_hal_liteos
//base/hiviewdfx/hilog_lite/frameworks/mini:hilog_lite...
//base/security/huks/interfaces/innerkits/huks_lite:huks_3.0_sdk...
//base/startup/init/interfaces/innerkits:libbegetutil
//base/hiviewdfx/hilog_lite/frameworks/featured:hilog_static
//third_party/bounds_checking_function:libsec_static
//third_party/musl:sysroot_lite
//base/startup/init/interfaces/hals/utils/sys_param:hal_sys_param
//third_party/musl:sysroot_lite
//base/startup/init/services/log:init_log
//third_party/musl:sysroot_lite
//base/startup/init/services/modules/init_hook:inithook
//third_party/musl:sysroot_lite
//base/startup/init/services/param/liteos:param_client_lite
//base/startup/init/services/param/liteos:lite_ohos_param_to
//third_party/musl:sysroot_lite
//third_party/musl:sysroot_lite
//base/startup/init/services/utils:libinit_utils
//third_party/musl:sysroot_lite
//third_party/bounds_checking_function:libsec_static
//third_party/musl:sysroot_lite
//vendor/bearpi/bearpi_hm_nano/hals/utils/sys_param:hal_sysparam
//third_party/musl:sysroot_lite
//build/lite/config/component/cJSON:cjson_shared
//commonlibrary/utils_lite:utils
//commonlibrary/utils_lite/file:file
//commonlibrary/utils_lite/file:native_file
//commonlibrary/utils_lite/hals/file:static_hal_file
//commonlibrary/utils_lite/hals/file:static_hal_file__notice
//third_party/musl:sysroot_lite
//third_party/musl:sysroot_lite
//device/soc/hisilicon/hi3861v100/hi3861_adapter/hals/utils/file:hal_file_static
//third_party/musl:sysroot_lite
//third_party/musl:sysroot_lite
//foundation/distributeddatamgr/kv_store/interfaces/inner_api/kv_store:kv_store
//foundation/distributeddatamgr/kv_store/interfaces/inner_api/kv_store:utils_kv_store
//third_party/musl:sysroot_lite
//third_party/musl:sysroot_lite
//build/lite/config/component/cJSON:cjson_shared
//commonlibrary/utils_lite:utils...
//foundation/communication/dsoftbus/sdk:softbus_client
//foundation/communication/dsoftbus/adapter:softbus_adapter
//base/hiviewdfx/hilog_lite/frameworks/mini:hilog_lite...
//third_party/mbedtls:mbedtls
//device/soc/hisilicon/hi3861v100/sdk_liteos/third_party/mbedtls:mbedtls
//third_party/musl:sysroot_lite
//foundation/communication/dsoftbus/core/common:softbus_utils
//base/hiviewdfx/hilog_lite/frameworks/mini:hilog_lite...
//build/lite/config/component/cJSON:cjson_static
//third_party/musl:sysroot_lite
//foundation/communication/dsoftbus/adapter:softbus_adapter...
//third_party/musl:sysroot_lite
//third_party/musl:sysroot_lite
//third_party/musl:sysroot_lite
//base/security/device_auth:deviceauth_sdk_build
//base/security/device_auth:deviceauth_service_build
//base/security/device_auth/frameworks/deviceauth_lite:hichainsdk...
//base/security/huks:fwk_group
//base/security/huks/frameworks/huks_lite:huks_sdk
//base/security/huks/interfaces/innerkits/huks_lite:huks_3.0_sdk...
//base/security/huks/test:unittest
//base/security/huks:service_group
//base/startup/bootstrap_lite/services/source:bootstrap
//third_party/musl:sysroot_lite
//base/startup/init/services:startup_init
//base/startup/init/services/begetctl:begetctl_cmd
//base/startup/init/services/loopevent:loopeventgroup
//base/startup/init/services/modules:modulesgroup
//base/startup/init/services/param:parameter
//base/startup/init/ueventd:startup_ueventd
//base/startup/init/watchdog:watchdog
//base/update/ota_lite/frameworks:ota_lite
//base/update/ota_lite/frameworks/source:hota
//base/startup/init/interfaces/innerkits:libbegetutil...
//device/soc/hisilicon/hi3861v100/hi3861_adapter/hals/update:hal_update_static
//third_party/musl:sysroot_lite
//third_party/musl:sysroot_lite
//commonlibrary/utils_lite/file:file...
//foundation/communication/dsoftbus:dsoftbus
//foundation/communication/dsoftbus/core:softbus_server
//foundation/communication/dsoftbus/adapter:softbus_adapter...
//foundation/communication/dsoftbus/core/common:softbus_utils...
//foundation/communication/dsoftbus/core/frame:softbus_server_frame
//base/security/device_auth/services:deviceauth...
//base/security/huks/interfaces/innerkits/huks_lite:huks_3.0_sdk...
//base/startup/init/interfaces/innerkits:libbegetutil...
//build/lite/config/component/cJSON:cjson_static...
//build/lite/config/component/cJSON:cjson_static...
//foundation/communication/dsoftbus/adapter:softbus_adapter...
//foundation/communication/dsoftbus/components/nstackx/nstackx_ctrl:nstackx_ctrl
//foundation/communication/dsoftbus/components/nstackx/nstackx_util:nstackx_util.open
//third_party/musl:sysroot_lite
//third_party/musl:sysroot_lite
//foundation/communication/dsoftbus/core/common:softbus_utils...
//third_party/musl:sysroot_lite
//foundation/communication/dsoftbus/sdk:softbus_client...
//foundation/communication/dsoftbus/tests:softbus_test
//foundation/communication/wifi_aware:wifiaware
//device/soc/hisilicon/hi3861v100/hi3861_adapter/hals/communication/wifi_lite/wifiaware:hal_wifiaware
//third_party/musl:sysroot_lite
//third_party/musl:sysroot_lite
//foundation/communication/wifi_lite:wifi
//foundation/systemabilitymgr/samgr_lite:samgr
//foundation/systemabilitymgr/samgr_lite/communication/broadcast:broadcast
//third_party/musl:sysroot_lite
//foundation/systemabilitymgr/samgr_lite/samgr:samgr
//foundation/systemabilitymgr/samgr_lite/samgr/adapter:samgr_adapter
//third_party/musl:sysroot_lite
//foundation/systemabilitymgr/samgr_lite/samgr/source:samgr_source
//foundation/systemabilitymgr/samgr_lite/samgr/adapter:samgr_adapter...
//third_party/musl:sysroot_lite
//third_party/musl:sysroot_lite
//device/soc/hisilicon/hi3861v100/sdk_liteos:sdk
//build/lite/config/component/cJSON:cjson_static...
//build/lite/config/component/cJSON:cjson_static...
//device/soc/hisilicon/hi3861v100/hi3861_adapter/hals/communication/wifi_lite/wifiservice:wifiservice
//third_party/musl:sysroot_lite
//device/soc/hisilicon/hi3861v100/hi3861_adapter/hals/communication/wifi_lite/wifiservice:wifiservice...
//device/soc/hisilicon/hi3861v100/hi3861_adapter/kal:kal
//device/soc/hisilicon/hi3861v100/hi3861_adapter/kal/cmsis:cmsis
//third_party/musl:sysroot_lite
//device/soc/hisilicon/hi3861v100/hi3861_adapter/kal/posix:posix
//third_party/musl:sysroot_lite
//device/soc/hisilicon/hi3861v100/hi3861_adapter/kal:kal...
//third_party/musl:sysroot_lite
//third_party/musl:sysroot_lite

看起來有點(diǎn)亂,沒關(guān)系,主要我們根據(jù)這個樹狀結(jié)構(gòu)找到我們所有的依賴,有了這樣的依賴關(guān)系之后,我們?nèi)绻胍檎夷硟蓚€模塊的關(guān)系就非常簡單了,以我們剛剛說了kv_store為例:

#創(chuàng)作者激勵#由一個編譯參數(shù)引發(fā)的gn構(gòu)建依賴圖譜查詢-開源基礎(chǔ)軟件社區(qū)

#創(chuàng)作者激勵#由一個編譯參數(shù)引發(fā)的gn構(gòu)建依賴圖譜查詢-開源基礎(chǔ)軟件社區(qū)

#創(chuàng)作者激勵#由一個編譯參數(shù)引發(fā)的gn構(gòu)建依賴圖譜查詢-開源基礎(chǔ)軟件社區(qū)

可以看到很輕松就找到了kv_store是怎么被一層一層依賴的了,而且通過關(guān)系圖可以得知kv_store竟然是由device_auth引入的,那么這個工具的意義就在于:有了依賴樹,以后出現(xiàn)依賴相關(guān)的問題都可以通過它快速分析并定位問題了。

看到這里是不是好心動,是不是想學(xué)習(xí)一下怎么用呢?

只需要在命令行輸入gn help desc就能得知用法了:

root@346a62050f11:/home/openharmony# gn help desc
gn desc

gn desc <out_dir> <label or pattern> [<what to show>] [--blame]
[--format=json]

Displays information about a given target or config. The build parameters
will be taken for the build in the given <out_dir>.

The <label or pattern> can be a target label, a config label, or a label
pattern (see "gn help label_pattern"). A label pattern will only match
targets.
...

其中 <out_dir>就是我們編譯的輸出目錄
<label or pattern> 可以是一個目標(biāo)標(biāo)簽,配置標(biāo)簽,或者一個匹配模式標(biāo)簽。只有匹配成功的才會顯示。
<what to show> 包括如下(如果不指定,默認(rèn)顯示):

all_dependent_configs
allow_circular_includes_from
arflags [–blame] args
cflags [–blame]
cflags_c [–blame]
cflags_cc [–blame]
check_includes
configs [–tree] (see below)
data_keys
defines [–blame]
depfile
deps [–all] [–tree] (see below)
framework_dirs
frameworks
include_dirs [–blame]
inputs ldflags [–blame]
lib_dirs libs
metadata
output_conversion
outputs
public_configs
public
rebase
script
sources
testonly
visibility
walk_keys
weak_frameworks
runtime_deps
[–format=json] 以JSON的格式輸出。

根據(jù)以上提示,我們制作查詢語句:root@346a62050f11:/home/openharmony# gn desc out/bearpi_hm_nano/bearpi_hm_nano //out/bearpi_hm_nano/bearpi_hm_nano/build_configs/device_bearpi_hm_nano/device_bearpi_hm_nano:device_bearpi_hm_nano --tree ,即可得到依賴樹等內(nèi)容。

總結(jié)

本篇真實(shí)記錄了一次出現(xiàn)問題,排查問題,解決問題并進(jìn)行深層次思考的過程,最后通過不斷的查找資料,找到了一個可以瞬間生成依賴樹的強(qiáng)大工具,為以后解決問題提供了一種思路。
希望各位熱愛學(xué)習(xí)的朋友,能夠沉心靜氣,耐住寂寞,永不言棄,因?yàn)橹挥薪?jīng)過這樣的過程,技術(shù)才能得到精進(jìn),然后總結(jié)出自己的學(xué)習(xí)套路,學(xué)習(xí)有一萬種方法,最重要的是行動。

??想了解更多關(guān)于開源的內(nèi)容,請?jiān)L問:??

??51CTO 開源基礎(chǔ)軟件社區(qū)??

??https://ost.51cto.com??

責(zé)任編輯:jianghua 來源: 51CTO 開源基礎(chǔ)軟件社區(qū)
相關(guān)推薦

2017-08-25 16:38:05

表達(dá)式正則血案

2019-02-27 08:26:06

算法大數(shù)據(jù)社交

2021-07-27 07:12:11

Getter接口Setter

2011-11-25 13:04:43

空格usr

2009-03-13 16:39:16

Linux開源改變

2013-12-19 09:58:36

移動應(yīng)用產(chǎn)品市場

2021-12-01 06:59:27

架構(gòu)

2024-02-28 08:12:25

SSE接口代理

2010-11-04 09:11:34

Fedora 14評測

2010-05-14 00:19:43

2015-02-04 14:36:07

格式串漏洞Ghost漏洞安全漏洞

2013-03-05 10:05:52

2024-08-20 21:27:04

docker部署容器

2021-07-24 13:11:19

Redis數(shù)據(jù)技術(shù)

2011-04-27 10:02:54

兼容墨盒用戶體驗(yàn)

2024-01-11 16:02:38

OHOS依賴關(guān)系檢查編譯構(gòu)建系統(tǒng)

2011-06-10 10:11:44

2022-11-07 19:08:28

transform屬性瀏覽器

2021-06-06 16:15:57

地區(qū)接口項(xiàng)目

2022-04-17 10:04:32

HerokuPaaSPorter
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

亚洲成人在线免费| 国产一区激情在线| 一区二区在线视频播放| 国产精品嫩草影院8vv8| 影音先锋男人资源在线| 国产不卡高清在线观看视频| 91成人精品网站| 公肉吊粗大爽色翁浪妇视频| 国产999精品在线观看| 亚洲国产色一区| 欧美一级爱爱| 午夜精品久久久久久久96蜜桃| 亚洲精品乱码| 日韩在线观看高清| 欧美大片免费播放器| 欧美不卡高清一区二区三区| 国产欧美日韩精品高清二区综合区| 91成人在线观看喷潮| 日本一道在线观看| 九九九伊在人线综合| 国产精品一区三区| 国产精品777| 在线免费观看毛片| 国产精品精品| 亚洲美腿欧美激情另类| 麻豆av免费看| 日韩福利在线观看| 色哟哟一区二区| 国产一线二线三线女| 淫片在线观看| 国产日韩欧美不卡| 精品无码久久久久国产| 国产黄色av片| 日本不卡中文字幕| 69视频在线播放| 欧美日韩大片在线观看| 久久精品99久久无色码中文字幕| 日韩电影中文字幕在线观看| 少妇伦子伦精品无吗| 91成人精品观看| 欧美亚洲日本一区| 久久久久久久少妇| 高清不卡亚洲| 欧美性生交大片免网| 2018国产在线| heyzo在线| 亚洲国产综合91精品麻豆| 成年人黄色在线观看| 91官网在线| 中文字幕不卡的av| 亚洲精品一区二区三区蜜桃久| 欧美大片aaa| 久久综合国产精品| 欧美日韩成人一区二区三区| 亚洲色偷精品一区二区三区| www.欧美亚洲| 久精品国产欧美| 午夜福利理论片在线观看| 99久久er热在这里只有精品66| 成人欧美视频在线| 色综合久久久久久| 99精品黄色片免费大全| 久久精品国产第一区二区三区最新章节 | 国产欧美日韩中文字幕在线| 国产又粗又猛又黄视频| 久久久久久穴| 国产精品久久久久久久久久久久久| 亚洲精品国产无码| 蜜桃久久久久久| 成人中文字幕+乱码+中文字幕| 国产精品丝袜黑色高跟鞋| 久久国产精品99久久久久久老狼| 成人日韩av在线| 性欧美18一19性猛交| 成人精品免费网站| 欧美日韩免费高清| 永久免费av在线| 一区二区欧美在线观看| 日本午夜激情视频| 香蕉视频亚洲一级| 欧美日韩精品综合在线| 亚洲一区二区偷拍| 国产一区丝袜| 在线观看国产精品日韩av| 色老板免费视频| 最新亚洲视频| 国产精品久在线观看| 国产男男gay体育生网站| 豆国产96在线|亚洲| 快播亚洲色图| 精品视频在线一区二区| 亚洲6080在线| 色播五月激情五月| 精品中国亚洲| 日韩在线观看免费全| 日本熟妇一区二区| 三级影片在线观看欧美日韩一区二区| 成人av在线天堂| 天天干视频在线观看| 久久欧美一区二区| 亚洲人成77777| 91吃瓜在线观看| 欧美日韩精品欧美日韩精品一| 性感美女一区二区三区| 欧美丝袜激情| 97久久伊人激情网| 国产露脸国语对白在线| 99久久国产综合精品麻豆| 中文字幕一区二区三区精彩视频 | 在线观看免费不卡av| jizz性欧美2| 一区国产精品视频| 日本天堂在线视频| 黄页网站大全一区二区| 欧美激情导航| 91色在线看| 在线播放日韩导航| 日韩一区二区a片免费观看| 欧美在线免费| 国产欧美 在线欧美| 午夜av免费观看| 一区二区三区欧美日韩| 国产一二三区av| 亚洲区小说区图片区qvod按摩| 美女性感视频久久久| 亚洲成人av网址| 91在线国产观看| 日本黄大片在线观看| 亚洲高清国产拍精品26u| 亚洲精品天天看| 国产在线视频卡一卡二| 美腿丝袜在线亚洲一区| 欧美日韩电影一区二区| 麻豆网站免费在线观看| 精品捆绑美女sm三区| 黑鬼狂亚洲人videos| 麻豆精品新av中文字幕| 日韩高清dvd| 欧美男体视频| 国产丝袜高跟一区| 久久国产视频播放| 99热这里都是精品| 日本a视频在线观看| **爰片久久毛片| 久久久久www| 国产精品天天操| 成人欧美一区二区三区1314| 天天干天天玩天天操| 日本在线电影一区二区三区| 国产成人av网| 浮生影视网在线观看免费| 色婷婷av一区二区三区软件| 色婷婷在线影院| 久久综合图片| 日韩欧美在线电影| 欧美激情福利| 久久亚洲国产成人| 亚洲av无码乱码国产精品| 一区二区欧美国产| 人妻 日韩 欧美 综合 制服| 激情综合电影网| 国产在线精品一区二区三区| а√天堂8资源中文在线| 亚洲黄页网在线观看| wwwxxx亚洲| 久久精品水蜜桃av综合天堂| 国产真人无码作爱视频免费| 日本一区二区在线看| 成人淫片在线看| 男人天堂亚洲| 日韩黄色av网站| 国产情侣小视频| 中文字幕亚洲不卡| 午夜影院免费版| 亚洲精品一二| 婷婷亚洲婷婷综合色香五月| 亚洲成人1区| 欧美激情一二区| 欧美色18zzzzxxxxx| 欧美亚洲综合一区| 欧美激情精品久久久久久免费 | 成人欧美亚洲| 欧美一级生活片| 日本熟妇乱子伦xxxx| 国产欧美日韩在线视频| 在线观看av免费观看| 影音先锋久久| 日韩高清国产一区在线观看| 免费精品一区二区三区在线观看| 欧美激情网站在线观看| 精品视频一二三| 91麻豆精品国产91久久久资源速度 | 99国产揄拍国产精品| 亚洲福利一区二区| xxxx日本黄色| 国产福利精品导航| 成人在线观看黄| 欧美高清日韩| 欧洲一区二区在线| 亚洲一区二区三区四区电影| 欧美一级片免费在线| 黄a在线观看| 亚洲午夜av久久乱码| 亚洲a视频在线| 欧美亚洲精品一区| 免费在线不卡视频| 亚洲视频你懂的| 国产熟妇久久777777| 国产91精品一区二区| 亚洲欧美日韩一级| 99这里有精品| 麻豆映画在线观看| 精品大片一区二区| 国内精品视频在线播放| 四虎影视成人精品国库在线观看| 51ⅴ精品国产91久久久久久| av色综合久久天堂av色综合在| 亚洲人成在线观| 国产综合在线播放| 欧美疯狂做受xxxx富婆| 一级黄色av片| 欧美性开放视频| 国产精品第一页在线观看| 综合激情成人伊人| 欧洲美熟女乱又伦| 26uuu国产电影一区二区| 在线观看一区二区三区视频| 蜜臀久久99精品久久久画质超高清| 欧美亚洲日本一区二区三区| 欧美日韩一视频区二区| 亚洲欧洲另类精品久久综合| 亚洲人成精品久久久| 国产在线精品一区二区三区》| 香蕉免费一区二区三区在线观看| 成人国产精品日本在线| 国产乱子精品一区二区在线观看| 欧洲午夜精品久久久| 欧亚在线中文字幕免费| 久久免费精品视频| 国产第一页在线| 欧美高清无遮挡| av免费在线网站| 另类图片亚洲另类| 免费网站看v片在线a| 这里只有精品在线观看| 国产美女视频一区二区三区| 日韩精品在线观看一区二区| 亚欧洲精品视频| 日韩大陆毛片av| 秋霞av在线| 亚洲欧美日韩区| 国产精品影院在线| 在线视频欧美性高潮| av在线资源网| 日韩在线免费视频| 综合图区亚洲| 欧美精品videosex极品1| 美足av综合网| 国模精品视频一区二区| 国产高潮在线| 欧美亚洲视频一区二区| 女生影院久久| 国产日韩欧美另类| 日韩成人精品| 国产九色91| 久久99青青| 亚洲国产高清国产精品| 久久久久午夜电影| 亚洲av首页在线| 一区在线视频| 欧美黄色一级片视频| 麻豆freexxxx性91精品| 亚洲欧美日韩一二三区| 东方aⅴ免费观看久久av| 亚洲天堂资源在线| 国产无一区二区| 911国产在线| 亚洲国产精品一区二区久久| 精品欧美一区二区三区免费观看| 91精品福利在线| 91麻豆国产在线| 精品乱人伦小说| 国产天堂在线| 另类美女黄大片| 丁香六月综合| 91亚洲精华国产精华| 欧美电影免费网站| 亚洲一区3d动漫同人无遮挡| 欧美精品国产一区| 国产一区亚洲二区三区| 激情丁香综合五月| 天堂久久久久久| 亚洲色图在线播放| 五月天婷婷综合网| 欧美日韩成人一区二区| 少妇无码一区二区三区| 中文字幕日韩在线观看| 国产白丝在线观看| 国产欧美一区二区三区四区| 国产精品jk白丝蜜臀av小说| 亚洲ai欧洲av| 一本色道久久综合亚洲精品不卡| 亚洲精品手机在线观看| 99精品久久只有精品| 国产成人久久久久| 91国产成人在线| 欧美一级淫片aaaaaa| 最近的2019中文字幕免费一页| а√天堂8资源在线| 亚洲自拍欧美色图| 成人aaaa| 免费观看精品视频| 国产999精品久久久久久| jizz18女人高潮| 一本色道亚洲精品aⅴ| 亚洲国产精品二区| 久久久999成人| 亚洲第一会所001| 国严精品久久久久久亚洲影视 | 国内av在线播放| 亚洲国产三级网| 日本高清成人vr专区| 国产剧情日韩欧美| 国产精品密蕾丝视频下载| 日韩a∨精品日韩在线观看| 国产乱淫av一区二区三区 | 99久久夜色精品国产亚洲1000部| 欧美日韩一道本| 懂色av一区二区夜夜嗨| 希岛爱理中文字幕| 欧美日韩和欧美的一区二区| 你懂的免费在线观看视频网站| 高清视频欧美一级| 日韩黄色av| 浴室偷拍美女洗澡456在线| 久久国产精品72免费观看| 国产主播av在线| 在线欧美小视频| 国产九色在线| 国产精品久久久久aaaa九色| 美女久久久久| 成人羞羞国产免费网站| 91老师片黄在线观看| 久久夜色精品亚洲| 日韩成人黄色av| 性孕妇free特大另类| 久久精精品视频| 国产精品日韩| 日本黄色特级片| 天天综合网 天天综合色| 十九岁完整版在线观看好看云免费| 日韩丝袜美女视频| 黄色网在线免费看| 成人精品一区二区三区电影免费| 欧美gvvideo网站| 超碰成人在线播放| 亚洲免费色视频| xxxwww在线观看| 久久久在线视频| 日本成人中文| 一本色道无码道dvd在线观看| 国产视频在线观看一区二区三区| 中文字幕xxxx| 最新91在线视频| 久久久91麻豆精品国产一区| 日韩欧美猛交xxxxx无码| www.日韩在线| 男人天堂视频在线| 久久久精品欧美| 动漫视频在线一区| 欧美日韩激情视频在线观看| 久久在线观看免费| 一区二区视频在线免费观看| 久久综合色影院| 老牛国内精品亚洲成av人片| 欧美视频第三页| 亚洲欧美日韩国产中文在线| 亚洲美女综合网| 日韩av电影中文字幕| 天天色天天射综合网| 污网站免费观看| 在线视频欧美区| 神马午夜伦理不卡| 你懂的网址一区二区三区| 久久 天天综合| 国产一级特黄视频| 一区二区三区高清国产| 久久天堂久久| 无罩大乳的熟妇正在播放| 欧美国产亚洲另类动漫| 亚洲国产精品suv| 国产精品老女人精品视频| 欧美涩涩视频| 精品亚洲aⅴ无码一区二区三区| 日韩一区二区免费在线电影| 亚洲免费福利| 国产精品免费看久久久无码| 久久久国产一区二区三区四区小说 | 在线播放日韩| 国产一级淫片久久久片a级|