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

OpenHarmony系統之Napi框架生成工具介紹

系統 OpenHarmony
NAPI框架生成工具支持三種入口,分別是可執行程序、VS Code插件、DevEco Studio上使用的IntelliJ插件,使用者可以根據自己的需要選擇合適的工具。本文主要介紹可執行文件的使用方法。

想了解更多關于開源的內容,請訪問:

51CTO 開源基礎軟件社區

https://ost.51cto.com

前言

當開發者為OpenHarmony系統上開發JS與C交互的接口時,需要使用NAPI進行接口封裝:首先需要用戶定義JS接口,然后創建NAPI模塊、實現NAPI初始化函數、封裝JS接口、處理JS調用,最后進行構建和部署。這需要開發人員熟悉NAPI,有一定的學習成本。而Napi框架生成工具可以根據用戶指定路徑下的ts(typescript)接口文件一鍵生成NAPI框架代碼、業務代碼框架,這為開發者提供了一種快速、高效的開發方式,可以大大提高開發效率。使用該工具時,開發者不必關注Nodejs的語法、C與JS之間的數據類型轉換等上層應用邏輯,只需要關注底層業務邏輯;此外,Napi框架生成工具還可以自動生成GN文件,這樣就可以方便地將生成的代碼集成到OpenHarmony系統中。這種方式可以避免手動編寫GN文件的繁瑣過程,提高了代碼集成的效率。

1、使用說明

NAPI框架生成工具支持三種入口,分別是可執行程序、VS Code插件、DevEco Studio上使用的IntelliJ插件,使用者可以根據自己的需要選擇合適的工具。本文主要介紹可執行文件的使用方法。

可執行文件下載路徑如下(由于網絡原因,可能會導致有的下載鏈接失效,因此提供了以下三個下載鏈接):

可執行文件下載鏈接1

可執行文件下載鏈接2

可執行文件下載鏈接3

訪問密碼:kaihong

壓縮包解壓密碼:kaihong20231121

準備

輸入文件說明

待轉換的示例.ts文件 @ohos.napitest.d.ts。

declare namespace napitest {
    function func1(v: string): string;
}
export default napitest;

業務代碼serviceCode示例:

業務代碼頭文件Service.h。

#ifndef IMPL_SERVICE_H
#define IMPL_SERVICE_H

#include <string>

namespace napitest {
    std::string func1(std::string& v);
}
#endif // IMPL_SERVICE_H

業務代碼cpp文件Service.cpp。

#include "Service.h"
#include "../generatorCode/napitest.h"
#include "hilog/log.h"
static constexpr OHOS::HiviewDFX::HiLogLabel LABEL = {LOG_CORE, 0XD002E00, "NAPITESTNAPILayer"};
#define NAPITEST_LOGI(fmt, ...) OHOS::HiviewDFX::HiLog::Info(LABEL, \
    	"%{public}s:%{public}d " fmt, __func__, __LINE__, ##__VA_ARGS__)
	
namespace napitest {
std::string func1(std::string& v)
{
    NAPITEST_LOGI("NAPITEST_LOGI func1 v = %s\r\n", v.c_str());  // 打印輸入參數
    return "testzzz";
}
}

配置文件cfg.json示例:

[
  {
    "includeName": "../serviceCode/Service.h",
    "cppName": "../serviceCode/Service.cpp",
    "interfaceName": "func1",
    "serviceCode": "out = napitest::func1(v);"
  }
]

可執行文件使用方法

Linux

將待轉換的.d.ts文件(如@ohos.napitest.d.ts)、napi_generator-linux、 配置文件cfg.json、業務代碼文件夾serviceCode(其中serviceCode目錄下放置業務代碼的.h文件和.cpp文件)放在同級目錄下。此處新建generatorCode文件夾,用于存放生成框架代碼。整體目錄文件如下:

OpenHarmony@Ubuntu-64:~/service$ ls
napi_generator-linux  @ohos.napitest.d.ts  generatorCode  cfg.json  serviceCode

在終端中進入到之前可執行程序napi_generator-linux所在的目錄,并運行napi_generator-linux,命令如下:

OpenHarmony@Ubuntu-64:~/service$ ./napi_generator-linux -f @ohos.napitest.d.ts -o generatorCode -i false -n int -s cfg.json

其中,參數詳情如下:

  • -f, 待轉換的.d.ts文件,若同時轉換多個文件,文件之間用“,”隔開。
  • -d, 根據指定路徑轉換該文件夾中所有.d.ts文件。
  • -i, 可選參數,默認false,待轉換.d.ts文件中引用非basic.d.ts的ts文件時打開開關。
  • -o, 可選參數,默認為當前目錄,指定生成框架代碼輸出路徑。
  • -n, 可選參數,默認為uint32_t,指定生成框架代碼中number類型全部為指定類型。
  • -s, 可選參數,默認為不配置業務代碼,指定生成框架代碼的業務配置文件,用于粘合工具代碼和業務代碼的配置。

備注1:-f與-d兩個參數只選其中一個參數即可。

備注2:若.d.ts文件中聲明了basic.d.ts文件,將basic.d.ts文件放置在待轉換.d.ts文件同一級目錄;若除此之外還聲明其它.d.ts文件,將此類文件放置在待轉換.d.ts文件同級目錄。

其中,cfg.json內容如下:

[
 {
  "includeName": "../serviceCode/Service.h",
  "cppName": "../serviceCode/Service.cpp",
  "interfaceName": "func1",
  "serviceCode": "out = napitest::func1(v);",
  "description": "includeName: 引入的業務代碼.h文件相對路徑, cppName: 引入的業務代碼.cpp文件相對路徑, interfaceName: ts文件中的使用接口名,業務代碼就在該接口中調用;格式為:類名::方法名(如: TestClass::funcTest1),若無類名,則格式為:方法名(如: funcTest), serviceCode: 在接口中調用業務代碼的調用語句。(該屬性只做注釋使用)"
 }
]

cfg.json是一個數組,每一項配置對應一個方法的調用,需要對多少方法進行調用就配置多少項;其中

“includeName”: 引入的業務代碼.h文件相對路徑, 如: “…/serviceCode/Service.h”。

“cppName”: 引入的業務代碼.cpp文件相對路徑, 如:“…/serviceCode/Service.cpp”。

“interfaceName”: ts文件中的使用接口名,業務代碼就在該接口中調用;格式為:類名::方法名(如: TestClass::funcTest1),若無類名,則格式為:方法名(如: func1)。

“serviceCode”: 在接口中調用業務代碼的調用語句。此處調用的是實現該接口的業務代碼, 如:“out = napitest::func1(v);”。

“description”: 僅作為cfg.json文件中描述其它字段含義的屬性,用戶配置時,可以不用填寫這個字段。

運行成功后會在generatorCode目錄下生成框架代碼文件,如下所示:

OpenHarmony@Ubuntu-64:~/linshi/napi_generator_8/examples/ts/generatorCode$ ls
binding.gyp  BUILD.gn  napi_gen.log  napitest.cpp  napitest.h  napitest_middle.h napitest_middle.cpp  test.sh  tool_utility.cpp  tool_utility.h

Windows

將待轉換的.d.ts文件(如@ohos.napitest.d.ts)、napi_generator-win.exe、 配置文件cfg.json、業務代碼文件夾serviceCode(其中serviceCode目錄下放置業務代碼的.h文件和.cpp文件)放在同級目錄下。此處新建generatorCode文件夾,用于存放生成框架代碼。整體目錄文件如下:

E:\demo\napi>dir /B
@ohos.napitest.d.ts
napi_generator-win.exe
generatorCode
cfg.json
serviceCode

在終端中進入到之前可執行程序napi_generator-win.exe所在的目錄,并運行napi_generator-win.exe,命令如下:

E:\demo\napi>napi_generator-win.exe -f @ohos.napitest.d.ts -o generatorCode -i false -n double -s cfg.json

其中,參數詳情如下:

  • -f, 待轉換的.d.ts文件,若同時轉換多個文件,文件之間用“,”隔開。
  • -d, 根據指定路徑轉換該文件夾中所有.d.ts文件。
  • -i, 可選參數,默認false,待轉換.d.ts文件中引用非basic.d.ts的ts文件時打開開關。
  • -o, 可選參數,默認為當前目錄,指定生成框架代碼輸出路徑。
  • -n, 可選參數,默認為uint32_t,指定生成框架代碼中number類型全部為指定類型。
  • -s, 可選參數,默認為不配置業務代碼,指定生成框架代碼的業務配置文件,用于粘合工具代碼和業務代碼的配置。

備注1:-f與-d兩個參數只選其中一個參數即可。

備注2:若.d.ts文件中聲明了basic.d.ts文件,將basic.d.ts文件放置在待轉換.d.ts文件同一級目錄;若除此之外還聲明其它.d.ts文件,將此類文件放置在待轉換.d.ts文件同級目錄。

其中,cfg.json內容如下:

[
 {
  "includeName": "../serviceCode/Service.h",
  "cppName": "../serviceCode/Service.cpp",
  "interfaceName": "func1",
  "serviceCode": "out = napitest::func1(v);",
  "description": "includeName: 引入的業務代碼.h文件相對路徑, cppName: 引入的業務代碼.cpp文件相對路徑, interfaceName: ts文件中的使用接口名,業務代碼就在該接口中調用;格式為:類名::方法名(如: TestClass::funcTest1),若無類名,則格式為:方法名(如: funcTest), serviceCode: 在接口中調用業務代碼的調用語句。(該屬性只做注釋使用)"
 }
]

cfg.json是一個數組,每一項配置對應一個方法的調用,需要對多少方法進行調用就配置多少項;其中

“includeName”: 引入的業務代碼.h文件相對路徑, 如: “…/serviceCode/Service.h”。

“cppName”: 引入的業務代碼.cpp文件相對路徑, 如:“…/serviceCode/Service.cpp”。

“interfaceName”: ts文件中的使用接口名,業務代碼就在該接口中調用;格式為:類名::方法名(如: TestClass::funcTest1),若無類名,則格式為:方法名(如: func1)。

“serviceCode”: 在接口中調用業務代碼的調用語句。此處調用的是實現該接口的業務代碼, 如:“out = napitest::func1(v);”。

“description”: 僅作為cfg.json文件中描述其它字段含義的屬性,用戶配置時,可以不用填寫這個字段。

運行成功后會在generatorCode目錄下生成框架代碼文件,如下所示:

E:\demo\napi\generatorCode>dir /B
binding.gyp
BUILD.gn
napitest.cpp
napitest.h
napitest_middle.h
napitest_middle.cpp
napi_gen.log
test.sh
tool_utility.cpp
tool_utility.h

Mac

方法步驟參考windows、Linux的使用方法。

不配置cfg.json文件生成框架代碼

若使用配置文件配置業務代碼不能滿足用戶使用場景需求,可手動配置業務代碼,參考以下鏈接:

不配置cfg.json生成框架代碼說明

輸出文件說明

Napi工具生成文件如下所示:

binding.gyp
BUILD.gn
napitest.cpp
napitest.h
napitest_middle.h
napitest_middle.cpp
napi_gen.log
test.sh
tool_utility.cpp
tool_utility.h

其中binding.gyp為工具生成框架代碼后自測時的編譯配置文件;BUILD.gn為集成到OpenHarmony系統上的編譯配置文件;napitest.h和napitest.cpp是工具生成的業務代碼文件,業務開發者在這里對業務接口進行調用或進行業務代碼實現;而napitest_middle.h,napitest_middle.cpp,tool_utility.h,tool_utility.cpp為膠水代碼,即NAPI框架代碼,用于創建NAPI模塊、實現NAPI初始化函數、參數轉換、封裝JS接口、處理JS調用等;napi_gen.log為工具生成的日志文件。

2、集成說明

本集成說明針對的是OpenHarmony 4.0release系統,其他系統可能存在差別,開發者可自行調試修改。

用戶使用配置文件cfg.json生成框架代碼后,不必再手動修改業務代碼,直接將生成代碼集成到OpenHarmony的方法參考以下鏈接:

生成代碼集成到OpenHarmony

若在生成框架代碼時,用戶未選擇配置文件cfg.json生成框架代碼,那么在集成時用戶就需要在生成的框架代碼中自行添加業務代碼,例如當前ts文件生成的napitest.cpp文件,修改相應代碼后如下所示:

#include "napitest.h"
#include "hilog/log.h"
static constexpr OHOS::HiviewDFX::HiLogLabel LABEL = {LOG_CORE, 0XD002E00, "NAPITESTNAPILayer"};
#define NAPITEST_LOGI(fmt, ...) OHOS::HiviewDFX::HiLog::Info(LABEL, \
    	"%{public}s:%{public}d " fmt, __func__, __LINE__, ##__VA_ARGS__)
	
namespace napitest {
bool func1(std::string& v, std::string& out)
{
    NAPITEST_LOGI("NAPITEST_LOGI func1 v = %s\r\n", v.c_str());  // 打印輸入參數
    out = "testzzz";
    return true;
}
}

手動配置業務代碼之后集成到OpenHarmony的方法參考以下鏈接:

4.0版本手動配置業務代碼集成方法

3、應用測試

準備

硬件:rk3568開發套件。

系統鏡像: 集成到OpenHarmony并編譯成功的鏡像,路徑如下:

OpenHarmony/out/rk3568/packages/phone/images

擴展SDK接口并增加新接口調用。

(1)擴展SDK接口

查看SDK目錄:

將@ohos.napitest.d.ts文件拷貝到sdk目錄下的ets\api:

(2)編寫應用測試新接口

其中修改index.ets文件內容如下:

import hilog from '@ohos.hilog';
	import napitest from '@ohos.napitest';
	
	@Entry
	@Component
	struct Index {
	  @State message: string = 'Hello World'
	
	  build() {
	    Row() {
	      Column() {
	        Text(this.message)
	          .fontSize(50)
	          .fontWeight(FontWeight.Bold)
	        // 添加按鈕,以響應用戶點擊
	        Button() {
	          Text('TEST')
	            .fontSize(30)
	            .fontWeight(FontWeight.Bold)
	        }
	        .type(ButtonType.Capsule)
	        .margin({
	          top: 20
	        })
	        .backgroundColor('#0D9FFB')
	        .width('40%')
	        .height('5%')
	        // 跳轉按鈕響應
	        .onClick(() => {
	          let out = napitest.func1("abcf");
	          hilog.info(0x0000, 'testTag', '%{public}s', 'AAAAAAAA napi testprint' + out);
	        })
	      }
	      .width('100%')
	    }
	    .height('100%')
	  }
	}

使用說明

步驟一:安裝鏡像環境:將out/rk3568/packages/phone目錄下的images鏡像文件下載并燒錄到開發板上。

OpenHarmony@Ubuntu-64:~/OpenHarmony/out/rk3568/packages/phone/images$ ll
 total 767452
 drwxrwxrwx  2 root root       4096 Nov 21 05:32 ./
 drwxrwxrwx 15 root root       4096 Nov 21 05:32 ../
 -rwxrwxrwx  1 root root   67108864 Nov 21 05:04 boot_linux.img*
 -rw-r--r--  1 root root   52428800 Nov 21 05:32 chip_prod.img
 -rwxrwxrwx  1 root root       8569 Nov 21 05:04 config.cfg*
 -rw-r--r--  1 root root   12582912 Nov 21 05:32 eng_system.img
 -rwxrwxrwx  1 root root     455104 Nov 21 05:04 MiniLoaderAll.bin*
 -rwxrwxrwx  1 root root        756 Nov 21 05:04 parameter.txt*
 -rw-rw-r--  1 root root    2507625 Nov 21 05:32 ramdisk.img
 -rwxrwxrwx  1 root root    5639680 Nov 21 05:04 resource.img*
 -rw-r--r--  1 root root   52428800 Nov 21 05:32 sys_prod.img
 -rw-r--r--  1 root root 1610608640 Nov 21 05:32 system.img
 -rwxrwxrwx  1 root root    4194304 Nov 21 05:04 uboot.img*
 -rw-rw-r--  1 root root   15806303 Nov 21 05:32 updater.img
 -rw-r--r--  1 root root 1468006400 Nov 21 05:32 userdata.img
 -rw-r--r--  1 root root  268431360 Nov 21 05:32 vendor.img

步驟二:安裝hap包。

Build Haps通過后,通過Run按鈕將hap包安裝到板子上。

執行完成后,設備中會出現安裝的APP。

步驟三:打印日志并驗證結果。

hap包安裝成功后,進入hdc shell

首先執行以下命令關閉hilog隱私權限

hilog -p off

輸入命輸入命令實時打印日志并輸出至windows中。

.\hdc.exe hilog > log.txt

然后單擊設備中安裝的APP,進入APP后單擊測試按鈕,執行完成后會在hdc安裝目錄下出現log.txt文件。

查看結果

log.txt中包含“AAAAAAAA napi testprint testzzz”日志表示接口調用成功。如下所示:

// 打印js層傳遞給C++的入參abcf
I C02e00/NAPITESTNAPILayer: [Service.cpp:10] NAPITEST_LOGI func1 v = abcf
// 打印接口返回到js的返回值testzzz
01-01 08:10:55.571  2291  2291 I A00000/testTag: AAAAAAAA napi testprint testzzz

使用問題

問題:用可執行程序生成C++代碼失敗,log如下所示:

E:\napi_generator_aboutTest\zzx_gjj_napi230808\napiTest>napi_generator-win.exe -f @ohos.napitest.d.ts
at checkGenerate [C:\snapshot\napi_generator\src\gen\cmd_gen.js(135:21)] @ohos.napitest.d.ts (15,41): Cannot find module './basic'. Did you mean to set the 'moduleResolution' option to 'node', or to add aliases to the 'paths' option?

fail
@ohos.napitest.d.ts (15,41): Cannot find module './basic'. Did you mean to set the 'moduleResolution' option to 'node', or to add aliases to the 'paths' option?

問題定位:@ohos.napitest.d.ts依賴了文件basic.d.ts,但在@ohos.napitest.d.ts同級目錄下未找到該依賴文件。

Cannot find module './basic'.

解決方案:將依賴文件basic.d.ts放在@ohos.napitest.d.ts同級目錄下,若@ohos.napitest.d.ts中還引用了其他依賴文件,需要一一將其加入到其依賴的路徑下。

更多常見問題解決方法指導如下:

FAQ

相關倉

關于Napi工具,若想了解更多,請參考以下鏈接:

napi_generator: NAPI框架生成工具

總結

Napi框架生成工具是一個開源項目,我們歡迎有興趣的開發者試用該工具,并提出寶貴的改進意見,我們將繼續不斷優化和完善該工具軟件。我們相信,該工具會成為OpenHarmony生態圈中一個有用的補充。

想了解更多關于開源的內容,請訪問:

51CTO 開源基礎軟件社區

https://ost.51cto.com

責任編輯:jianghua 來源: 51CTO 開源基礎軟件社區
相關推薦

2023-03-10 09:41:16

NAPI框架鴻蒙

2021-09-16 15:08:08

鴻蒙HarmonyOS應用

2023-03-14 21:29:26

MysubsysNAPI框架

2023-06-01 15:30:30

Service代碼生成工具

2022-07-19 20:04:31

NAPI模塊鴻蒙

2024-06-21 10:27:21

Service生成工具鴻蒙

2024-06-21 10:07:06

鴻蒙service生成工具

2023-04-26 15:29:35

NAPI模塊鴻蒙

2024-03-26 15:25:55

應用接口文件轉換工具鴻蒙

2022-10-11 15:04:28

NAPI開發鴻蒙

2021-12-08 15:07:51

鴻蒙HarmonyOS應用

2021-12-06 06:19:03

鴻蒙HarmonyOS應用

2023-06-20 15:45:15

服務卡片鴻蒙

2022-05-12 14:42:17

項目開發Napi實現

2022-03-21 15:02:05

Harmonyhiperf鴻蒙

2012-05-31 09:14:58

Rexsee

2023-04-04 09:15:10

NAPI 框架鴻蒙

2023-06-20 15:40:58

系統開發鴻蒙

2022-04-20 20:28:40

HDF 驅動框架鴻蒙操作系統

2021-09-07 15:48:28

鴻蒙HarmonyOS應用
點贊
收藏

51CTO技術棧公眾號

欧洲精品久久久久毛片完整版| 天天综合天天干| 国产午夜亚洲精品一级在线| 亚洲精品国产一区二区精华液| 成人精品一区二区三区| 国产在线一二区| 精品国产美女| 精品国产伦一区二区三区观看方式| 成人综合视频在线| 久久五月精品| 91片黄在线观看| 成人性教育视频在线观看| 日韩成人一区二区三区| 欧美在线免费看视频| 精品噜噜噜噜久久久久久久久试看| 农村妇女精品一二区| 成人免费网站在线观看视频| 久久久午夜精品理论片中文字幕| 亚洲最大av网站| 久久精品偷拍视频| 91久久久久| 久久精彩免费视频| 亚洲区免费视频| 精品国产亚洲一区二区三区| 在线免费亚洲电影| 久草热视频在线观看| 天堂av在线电影| 国产精品乱子久久久久| 欧美影视一区二区| 欧美熟妇另类久久久久久不卡| 麻豆一区二区99久久久久| 91国内免费在线视频| 唐朝av高清盛宴| 91亚洲成人| 一区二区三区天堂av| 蜜桃精品一区二区| 欧美激情15p| 亚洲精品在线网站| 亚洲麻豆一区二区三区| 亚洲一区二区三区在线免费| 555www色欧美视频| 岛国毛片在线播放| 精品女同一区二区三区在线观看| 色哟哟国产精品免费观看| 蜜桃传媒一区二区三区| 高清电影在线观看免费| 亚洲一区二区在线播放相泽 | 羞羞色国产精品网站| 精品久久一区二区| 波多野结衣三级视频| 国产精品视频首页| 欧美一级国产精品| 欧美色图校园春色| 亚洲精品在线国产| 精品日产卡一卡二卡麻豆| 杨幂一区二区国产精品| 日韩中文一区二区| 精品嫩草影院久久| 小毛片在线观看| 日韩在线麻豆| 亚洲视频在线观看网站| 欧美成人另类视频| 欧美3p在线观看| 欧美成人免费播放| 五月天婷婷网站| 日韩视频在线一区二区三区 | 原创国产精品91| 又色又爽的视频| 91精品国产91久久久久久密臀| 久久在线免费观看视频| 久久久久久久久精| 亚洲欧美视频| 国产精品三级网站| 性生交大片免费看女人按摩| 成人免费黄色在线| 奇米精品在线| 日韩伦理在线观看| 亚洲一区二区欧美| 日本黄网站免费| 中文字幕综合| 亚洲国产天堂网精品网站| 亚洲天堂久久新| 亚洲成人国产| 青草热久免费精品视频| 中文字字幕在线观看| 国产成人精品一区二 | 久久精品国产www456c0m| 欧美床上激情在线观看| 久久免费激情视频| 精品一区二区综合| 精品国产综合| 日本欧美在线视频免费观看| 亚洲视频资源在线| 欧美日韩在线视频一区二区三区| 青青青国产精品| 欧美精品一区男女天堂| wwwww黄色| 99亚洲一区二区| 91精品中国老女人| 女人天堂在线| 亚洲综合久久久| 香港日本韩国三级网站| 老牛国内精品亚洲成av人片| 最近日韩中文字幕中文| 青青国产在线观看| 国产一区二区在线观看视频| 久久综合精品一区| 日本在线观看高清完整版| 在线看不卡av| 亚洲人人夜夜澡人人爽| 欧美精品aa| 国产精品综合久久久| 亚洲av无码乱码国产精品久久| 久久精品一区二区| 可以在线看的av网站| 亚洲网站三级| 中文字幕亚洲综合久久| 五月天婷婷综合网| 国产69精品久久久久777| 亚洲一区二区三区精品动漫| 91av亚洲| 亚洲精品福利在线| 久久精品国产亚洲av香蕉| 极品美女销魂一区二区三区免费| 欧美综合激情| 日韩伦理在线一区| 亚洲国产成人一区| 久久久无码精品亚洲国产| 国内精品视频666| 亚洲一区二区三区免费观看| 黄瓜视频成人app免费| 日韩国产精品视频| 日韩欧美一区二区一幕| 粉嫩嫩av羞羞动漫久久久| 色呦呦网站入口| 免费视频观看成人| 日韩中文在线不卡| 中文字幕在线视频免费| 国产精品三级电影| 久久人人爽av| 久久福利综合| 成人国产精品日本在线| 日韩大片在线永久免费观看网站| 91福利在线免费观看| 青青草福利视频| 免费永久网站黄欧美| 蜜桃导航-精品导航| 亚洲天堂电影| 国产午夜精品久久久 | 欧美美女一区二区| 任我爽在线视频| 国产一区二区免费在线| 狠狠噜天天噜日日噜| 成人午夜网址| 91av视频在线免费观看| 飘雪影视在线观看免费观看| 一本到三区不卡视频| 人妻少妇无码精品视频区| 青青国产91久久久久久| 正在播放一区二区三区| 日韩视频一二区| 久久久亚洲网站| 同心难改在线观看| 欧美亚洲高清一区二区三区不卡| 免费成人深夜蜜桃视频| 国内精品写真在线观看| 隔壁人妻偷人bd中字| 天海翼亚洲一区二区三区| 国产成人精品日本亚洲| 日p在线观看| 日韩欧美一区二区在线视频| 日本少妇性生活| 国产三区在线成人av| 日本黄大片一区二区三区| 亚洲国产成人精品女人| 国产三级精品在线不卡| 超级碰碰久久| 久久精品91久久香蕉加勒比| 全国男人的天堂网| 在线精品视频一区二区三四| 国产高潮国产高潮久久久91| bt7086福利一区国产| 国产av人人夜夜澡人人爽| 亚洲色图网站| 欧美日产一区二区三区在线观看| 四虎精品在线观看| 国语自产偷拍精品视频偷| 国产精品毛片一区二区三区四区| 欧美男人的天堂一二区| 国产成人在线免费观看视频| 国产精品你懂的| 成人性生活免费看| 黑人巨大精品欧美一区| 人妻少妇被粗大爽9797pw| 亚洲国产老妈| 欧洲精品在线一区| 激情亚洲另类图片区小说区| 国产日韩中文字幕| 中文在线а√在线8| 免费91在线视频| 国产高清免费在线播放| 亚洲国产成人精品电影| 91中文字幕在线视频| 狠狠久久亚洲欧美专区| 高h视频免费观看| 国产精品午夜免费| 久久精品综合视频| 国产一区二区精品久久99| 一本久道中文无码字幕av| 国内自拍一区| 秋霞在线一区二区| 成人在线免费视频观看| 精品视频在线观看| 亚洲**毛片| 成人精品一区二区三区| 伊人久久高清| 日韩av免费看| 天堂中文最新版在线中文| 欧美噜噜久久久xxx| 素人av在线| 中文字幕欧美日韩在线| 精品成人一区二区三区免费视频| 欧美变态tickle挠乳网站| 国产精品呻吟久久| 欧美日韩一区二区三区在线 | 欧美精品1区2区| 少妇无套内谢久久久久| 日韩欧美一区二区三区久久| 亚洲视频免费播放| 午夜精品123| 日本五十熟hd丰满| 亚洲国产一区二区在线播放| 久久久久99精品成人片毛片| 亚洲三级小视频| 亚洲一区电影在线观看| 国产精品毛片大码女人| 山东少妇露脸刺激对白在线| 国产精品美女视频| 欧美日韩国产黄色| 国产精品三级视频| chinese全程对白| 综合分类小说区另类春色亚洲小说欧美 | 午夜久久久久久久久久久| 婷婷激情图片久久| aaa免费在线观看| 91精品蜜臀一区二区三区在线| 伊人久久av导航| 亚洲深深色噜噜狠狠爱网站| 青青视频免费在线观看| 国产尤物精品| 五十路熟女丰满大屁股 | 爱情岛论坛亚洲首页入口章节| 日本亚洲三级在线| 岛国av免费在线| 国产很黄免费观看久久| 自拍视频第一页| 91在线你懂得| x88av在线| 亚洲人成亚洲人成在线观看图片| 2021亚洲天堂| 午夜电影一区二区三区| 亚洲欧美另类在线视频| 在线观看日韩高清av| 国产精品伊人久久| 欧美xxxxxxxx| 日漫免费在线观看网站| 国产一区二区三区中文| 黄色一级大片在线免费看产| 欧美老女人性生活| 小视频免费在线观看| 日本欧美中文字幕| 日韩久久一区| 国产欧美欧洲| 欧美美女视频| 免费极品av一视觉盛宴| 午夜亚洲福利在线老司机| 色国产在线视频| 成人免费视频视频在线观看免费| 中文在线永久免费观看| 国产精品午夜春色av| 久久久精品国产sm调教| 色哦色哦哦色天天综合| 国产人妻精品一区二区三区| 亚洲黄色av女优在线观看| yw193.com尤物在线| 欧美高清在线视频观看不卡| videos性欧美另类高清| 91热精品视频| 欧美人与牛zoz0性行为| 国产免费内射又粗又爽密桃视频| 香蕉久久国产| 亚洲丝袜在线观看| 久久精品水蜜桃av综合天堂| 538精品在线观看| 在线观看一区二区精品视频| av网站在线观看免费| 亚洲欧美综合精品久久成人| 丝袜国产在线| 国产精品美女免费看| 秋霞影视一区二区三区| 视色,视色影院,视色影库,视色网| 先锋影音久久久| 午夜福利三级理论电影| 中文字幕欧美一| 青青草视频在线观看免费| 欧美成人免费网站| 久草中文在线观看| 国产精品99蜜臀久久不卡二区| 第四色在线一区二区| 日本黄色a视频| 青青草国产精品97视觉盛宴| 国产成人精品无码片区在线| 亚洲色图.com| 一级片视频免费| 一区二区三区视频在线| 爱情电影社保片一区| 国产女人水真多18毛片18精品| 中文字幕人成人乱码| 校园春色 亚洲色图| 国产午夜精品久久| 天天做天天爱夜夜爽| 亚洲第一网站男人都懂| 最新日本在线观看| 亚洲xxxxx性| 欧美a级片视频| 色免费在线视频| 中文字幕第一区综合| 中文字幕一区二区三区四区欧美| 日韩av在线最新| 国产极品在线观看| 国产三级精品在线不卡| 在线观看不卡| 精人妻一区二区三区| 亚洲已满18点击进入久久| 99产精品成人啪免费网站| 日韩中文字幕网址| 日韩午夜视频在线| 中文字幕一区二区三区四区五区六区| 青青草一区二区三区| 一本在线免费视频| 欧美日韩在线精品一区二区三区激情| 国产特黄在线| 国产精品自产拍在线观看| 日韩理论电影| 午夜视频在线观| 亚洲精品国产第一综合99久久| 99国产精品久久久久99打野战| 久久亚洲精品一区二区| 视频精品一区二区三区| 国产片侵犯亲女视频播放| 福利一区二区在线| 亚洲视频免费播放| 亚洲欧美国产视频| 日韩经典一区| 在线观看视频黄色| 粉嫩一区二区三区性色av| 久久国产精品系列| 亚洲色图50p| 亚洲人成网站在线在线观看| 欧美交换配乱吟粗大25p| 成人黄页在线观看| 99久久久久久久久| 深夜福利一区二区| 视频在线观看免费影院欧美meiju| 国产片侵犯亲女视频播放| 99re热这里只有精品视频| 国产一级片免费在线观看| 丝袜亚洲欧美日韩综合| 日韩08精品| 成人一级片网站| 国产精品色呦呦| а√天堂资源在线| 欧美整片在线观看| 五月婷婷亚洲| 亚洲一区二区三区无码久久| 欧美在线影院一区二区| gogo在线观看| 麻豆成人小视频| 激情欧美日韩一区二区| 欧美福利视频一区二区| 色噜噜狠狠狠综合曰曰曰| 嗯用力啊快一点好舒服小柔久久| 日韩中文字幕二区| 一区二区三区精品| 国产高清免费在线播放| 97人人模人人爽人人少妇| 亚洲在线黄色| 超碰手机在线观看| 精品视频久久久久久| 国产亚洲字幕| 久久久精品在线视频| 亚洲女爱视频在线| 欧美老女人性开放| 国产精品久久久久久久小唯西川 | 国产极品精品在线观看| 欧美激情精品久久久六区热门| 性欧美13一14内谢| 日韩欧美一区在线观看| 国产亚洲欧美日韩精品一区二区三区 | 擼擼色在线看观看免费|