青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

春暖花開
雪化了,花開了,春天來了
posts - 149,comments - 125,trackbacks - 0
摘自:http://blog.csdn.net/dotnet_editor/archive/2005/08/19/459018.aspx

  本文來自《msdn開發(fā)精選》雜志2005年第4期“特別策劃”欄目

作者:RAYMAN

  當(dāng)我們開發(fā)完P(guān)ocket PC或者Smartphone的軟件后,都需要考慮如何制作給最終用戶使用的軟件安裝包。專門用于制作安裝包的軟件有很多,如Install Shield等。但在許多情況下,我們僅僅需要一些比較簡單的安裝過程,這時候我們完全可以利用SDK中提供的工具和一些免費的軟件來制作安裝包。另外,我們制作的軟件經(jīng)常會需要在不同的平臺下運行,例如筆者開發(fā)的一個軟件同時支持HPC,PPC,Smartphone等平臺,HPC和PPC平臺上還有3種CPU類型。如果每一步操作完成后都需要人工介入進(jìn)行操作的話,每一次構(gòu)建過程都會相當(dāng)?shù)姆爆嵑秃臅r。所以我們會考慮如何將一系列的操作采用腳本串接起來,只需要運行一個命令就能夠生成最終需要的所有安裝包。

用命令行編譯鏈接程序

  雖然EVC里提供了Batch Build的功能,但該功能只能用于同一平臺的不同CPU版本的編譯鏈接操作。在切換不同平臺進(jìn)行編譯時,需要在GUI環(huán)境中手工執(zhí)行,無法達(dá)到我們要求。所以我們需要研究如何在命令行狀態(tài)下進(jìn)行程序的編譯運行。實際上EVC程序本身是提供了一系列的命令可以用于命令行編譯的。

D:\Program Files\Microsoft eMbedded Tools\Common\EVC\Bin>evc /?
Usage:
    EVC [myprj.vcp|mywksp.vcw] - load project/workspace
    [<filename>] - load source file
        /? - display usage information
        /EX <macroname> - execute a VBScript macro
        /OUT <filename> - redirect command line output to a file
        /USEENV - ignore tools.options.directories settings
        /MAKE [<target>] [...] - build specified target(s)
            [<project> - <platform> <configname>]
            [[<project>|ALL] - [DEBUG|RELEASE|ALL]]
        /CLEAN - delete intermediate files but don't build
        /REBUILD - clean and build
        /NORECURSE - don't build dependent projects
        /CECONFIG [<configuration>] - use specified configuration

  其中主要是運用MAKE命令。假設(shè)我們需要編譯的程序名叫做Demo,工作環(huán)境文件名為demo.vcw,PPC版的工程項目文件為Demo.vcp,Smartphone版本的項目文件為DemoSP.vcp.我們?yōu)镋VC3編寫好的批處理文件build.bat如下:

REM @echo off
set EVC="D:\Program Files\Microsoft eMbedded Tools\Common\EVC\Bin\EVC.EXE" <-指向EVC 3.0程序所在目錄
set CFG=
set CECONFIG=

%EVC% Demo.vcw /make "%CFG%" /CEConfig=%CECONFIG% /rebuild <-執(zhí)行編譯并生成目標(biāo)可執(zhí)行文件
if errorlevel 1 goto :eof <-如果編譯失敗則終止批處理

:pocketpc
set CFG=Demo - Win32 (WCE ARM) Release<-將要進(jìn)行編譯的項目名稱和編譯出來的目標(biāo)代碼的平臺和CPU類型。其中“-”前面的是項目名稱,“-”后面的部分是平臺和CPU類型以及編譯的是Release版還是Debug版。格式可以參照在EVC的Build->Configurations中的寫法, EVC3 和 EVC4的表達(dá)方式略有不同。
set CECONFIG="Pocket PC" <-編譯PPC平臺版本
%EVC% Demo.vcw /make "%CFG%" /CEConfig=%CECONFIG% /rebuild
if errorlevel 1 goto :eof

set CFG=Demo - Win32 (WCE MIPS) Release
%EVC% Demo.vcw /make "%CFG%" /CEConfig=%CECONFIG% /rebuild
if errorlevel 1 goto :eof

set CFG=Demo - Win32 (WCE SH3) Release
%EVC% Demo.vcw /make "%CFG%" /CEConfig=%CECONFIG% /rebuild
if errorlevel 1 goto :eof

:sp2002
set CFG=DemoSP - Win32 (WCE ARM) Release
set CECONFIG="Smartphone 2002" <-編譯Smartphone平臺版本
%EVC% Demo.vcw /make "%CFG%" /CEConfig=%CECONFIG% /rebuild
if errorlevel 1 goto :eof

echo build successfully finished!!
pause

  根據(jù)上面的代碼,現(xiàn)在我們只需要運行一次build.bat文件即可編譯生成PPC,Smartphone等不同平臺的目標(biāo)文件。

制作cab文件

  生成目標(biāo)文件后,我們就需要考慮如何將程序安裝到設(shè)備上。cab文件是一種壓縮并且?guī)в懈鞣N安裝信息的打包文件,所有的安裝軟件實際上都是將軟件的cab文件拷貝到相應(yīng)設(shè)備上,然后利用設(shè)備上的wceload程序進(jìn)行最后的設(shè)備安裝步驟。我們可以使用PocketPC或者Smartphone SDK中附帶的cabwiz.exe (在Smartphone上是CabWizSP.exe)對程序進(jìn)行打包生成cab文件。

  在制作cab文件之前,我們通常需要做好以下的規(guī)劃:

  • 程序的詳細(xì)信息,例如公司名稱,程序名稱等等
  • 目標(biāo)的硬件平臺,如PPC還是Smartphone,什么類型的CPU
  • 有哪些源文件,源文件存放在PC機上面的什么目錄中
  • 拷貝到設(shè)備上的文件存放在什么路徑下
  • 是否需要創(chuàng)建快捷方式,快捷方式到什么文件,圖標(biāo)是什么
  • 是否需要修改注冊表,修改項目和內(nèi)容是什么

  cab文件的生成需要制作一個.inf文件作為cabwiz程序的輸入。當(dāng)我們做好計劃之后就可以動手編寫這個.inf文件。這個文件是整個制作過程中最關(guān)鍵的一步,也是最困難的一步。.inf文件與windows里的ini文件十分相似,都是用文本方式保存的,里面包含若干的段(Section), 關(guān)鍵字(Key)和值(Value)組成的描述信息。我們同樣是采用對例子進(jìn)行解釋說明的方式進(jìn)行介紹。

  一般來說,inf文件都有四個主要組成部分,PPC的寫法和Smartphone的寫法略有不同,我們先介紹PPC的寫法。

  inf文件的第一部分是一些全局信息的定義:

[Version] <-版本信息,必須有該段
Signature = "$Windows NT$" <-必須是$Windows NT$或者$Windows 98$, 不要改動
Provider = "Demo Soft" <-提供商, 完整的程序名字會是"<Provider> <AppName>"
CESignature = "$Windows CE$" <-必須是該值

[CEStrings] <-該段主要是定義安裝程序用到的一些字符串,必須有該段
AppName = "DemoApp" <-程序的名字
InstallDir = “%CE1%\Octopus Studio\%AppName%” <-定義程序在目標(biāo)設(shè)備中的安裝目錄

[Strings] <-該段用于用戶自己定義的字符串, 該段可選
ExeBaseDir = "C:\ProjectHome\demo\Release\platform" <-和平臺相關(guān)的文件放在這個目錄下
CommonDir = "C:\ProjectHome\demo\Release" <-與平臺無關(guān)的文件放在這個目錄里

  其中InstallDir中出現(xiàn)的“%CE1%”是inf文件定義的系統(tǒng)目錄標(biāo)記,下面列出的是PPC 2002和Smartphone 2002下可以使用的目錄宏:

目錄標(biāo)記 目錄路徑
%CE1% \Program Files
%CE2% \Windows
%CE4% \Windows\StartUp
%CE5% \My Documents
%CE8% \Program Files\Games
%CE11% \Windows\Start Menu\Programs
%CE14% \Windows\Start Menu\Programs\Games
%CE15% \Windows\Fonts
%CE17% \Windows\Start Menu
%CE19% \Application Data(僅用于Smartphone)

  這些目錄標(biāo)記在進(jìn)行安裝的時候會替換成相應(yīng)的系統(tǒng)目錄路徑。此外這些系統(tǒng)目錄在安裝過程中會自動根據(jù)需要進(jìn)行自動調(diào)節(jié)。例如%CE1%是指系統(tǒng)缺省的程序安裝目錄,指向“\Program Files”。而當(dāng)用戶選擇程序安裝在存儲卡中時,該目錄也會做相應(yīng)改變。

  [CEString]和[Strings]中定義的變量以及上面提到的目錄標(biāo)記可以用于替換inf文件中的任意部分。下面的說明中會有使用的例子。

  第二部分是用來聲明支持的設(shè)備CPU類型,操作系統(tǒng)類型和版本號要求:

[CEDevice.ARM] <-目標(biāo)設(shè)備聲明,如果支持多種設(shè)備/CPU就會有多個CEDevice段,并且在用設(shè)備標(biāo)號作為后綴表示。如果只支持一種設(shè)備,可以直接用[CEDevice]表示
ProcessorType = 2577 <-該目標(biāo)設(shè)備是StrongARM CPU
UnsupportedPlatforms = “Smartphone”,"HPC","Jupiter","Palm PC2" <-不支持smarthphone和HPC等舊設(shè)備
VersionMin = 3.00 <-對應(yīng)設(shè)備德操作系統(tǒng)的最低版本號要求是3.0,版本號說明見下面的說明
VersionMax = 5.00 <-假設(shè)我們的程序要求的操作系統(tǒng)最高版本號是5.0

[CEDevice.MIPS]
ProcessorType = 4000 <-CPU要求是 MIPS_R4000
UnsupportedPlatforms = “Smartphone”,"HPC","Jupiter","Palm PC2"
VersionMin = 3.00
VersionMax = 5.00

[CEDevice.SH3]
ProcessorType = 10003 <- CPU要求是 Hitachi_SH3
UnsupportedPlatforms = “Smartphone”,"HPC","Jupiter","Palm PC2"
VersionMin = 3.00
VersionMax = 5.00

  WinCE各個平臺的表示法和相應(yīng)的版本號如下表,UnsupportedPlatform和VersionMin/VersionMax的值可以參考該表進(jìn)行填寫。

Platform Platform type Windows CE version
Smartphone 2003 Smartphone 4.2
Smartphone 2002 Smartphone 3.0
Pocket PC 2003 Pocket PC 4.2
Pocket PC 2002 Pocket PC 3.0
Pocket PC 2000 Palm PC2 3.0
Palm Size PC v2 Palm PC 2.11
Palm Size PC v1 Palm PC 2.1
Handheld PC 2000 Jupiter 3.0
Handheld PC Pro Jupiter 2.11
Handheld PC HPC 2.0

  inf文件的第三部分是定義源文件的組成和其在桌面機器的目錄:

[SourceDisksNames] <-源文件所在目錄,段名稱不加后綴表示與平臺無關(guān)的文件所在目錄.必須有該段
1=, "SourceDisk01",,%CommonDir% <-格式為 <source ID> = ,<label>,,<source directory>其中Source ID用來在后續(xù)內(nèi)容中指定源文件目錄用,label只是說明,無用處。Source directory則是指源文件在PC系統(tǒng)中的所在目錄。

[SourceDisksNames.ARM] <-段名稱的后綴與前面的CEDevice段相對應(yīng)
2=, "SourceDisk02",,%ExeBaseDir%\ppc\arm

[SourceDisksNames.MIPS]
2=, "SourceDisk03",,%ExeBaseDir%\ppc\mips

[SourceDisksNames.SH3]
2=, "SourceDisk04",,%ExeBaseDir%\ppc\sh3

[SourceDisksFiles] <-說明源文件分別放在什么目錄下,必須有該段
"demo.htm" = 1 <- 格式為<filename> = <source ID>,其中filename是文件名,Source ID是指上面SourceDiskName中定義的源目錄ID.“demo.htm”=1表示demo.htm文件是放在SourceDiskNames里定義的%CommonDir%目錄里。
"demo.exe" = 2
"demo.dll" = 2

  inf文件的第四部分是定義安裝的操作

[DefaultInstall] <-指明安裝包需要進(jìn)行的操作,例如文件拷貝,快捷方式創(chuàng)建等。必須有該段
CopyFiles = Files.InstallDir, Files.Windows <-指明需要進(jìn)行文件拷貝的說明段,參看下面的說明
CEShortcuts = Links <-指定需要生成的快捷方式定義. 除了這連個安裝操作外,開發(fā)人員還可以指定注冊表修改(AddReg), 自定的安裝/卸載時的可執(zhí)行代碼(CESetupDLL), 注冊DLL文件(CESelfRegister).具體可以參考SDK幫助文件

[Files.InstallDir] <-文件拷貝操作中指明的文件拷貝操作定義,用于定義每個文件如何被拷貝到設(shè)備上
"demo.htm",,,0x40000001 <- 格式為<dest filename>,<source filename>,,<copy flags>, 其中dest filename 表示拷貝到目標(biāo)設(shè)備后文件名; source filename源文件的文件名,如果為空則dest filename用來表示源文件文件名;copy flags表示拷貝文件時的方式,該值是一些標(biāo)志位的組合,可用的標(biāo)志如下:

標(biāo)志 含義
0x00000001 警告用戶如果在拷貝該文件時發(fā)生錯誤, 而用戶采用跳過操作的話
0x00000002 不允許用戶在拷貝該文件時發(fā)生錯誤才取跳過操作
0x00000010 當(dāng)目標(biāo)目錄中有同名文件存在時不進(jìn)行覆蓋操作
0x00000400 當(dāng)目標(biāo)目錄存在同名文件時才進(jìn)行拷貝(覆蓋)操作
0x20000000 如果目標(biāo)文件比該文件新則不進(jìn)行拷貝操作
0x40000000 拷貝文件時不檢查文件日期
0x80000000 創(chuàng)建一個對該文件的鏈接,主要是用于共享dll文件

"demo.exe",,,0x40000003

[Files.Windows] <-同上,用戶定義文件拷貝操作
"demo.dll",,,0x80000013

[DestinationDirs] <-定義設(shè)備上的目標(biāo)文件目錄
Files.InstallDir = 0,%InstallDir% <- 格式為<section name> = 0,<dest directory>, 其中section name 對應(yīng)[DefaultInstall] CopyFiles中的值。dest directory則是目標(biāo)設(shè)備上的目的目錄。例如Files.InstallDir里列出的文件將會拷貝到目標(biāo)設(shè)備的%InstallDir%目錄下。
Files.Windows = 0, %CE2%
Links = 0, %CE11%

[Links] <- 該段對應(yīng)[DefaultInstall]中CEShortcuts的定義,用來說明需要創(chuàng)建的快捷方式
%AppName%,0,"demo.exe",%CE11% <- 格式為<shortcut filename>,<shortcut type>,<target file/path>,<standard dest path>。其中 shortcut filename是指生成的快捷方式的文件名; shortcut type 指明鏈接的是文件名還是目錄,0表示文件,非0表示目錄; target file/path 是指被鏈接的文件的文件名或者目錄路徑; standard dest path 指快捷方式存放在那個目錄下。

  以上是針對PPC的inf文件寫法。由于PPC支持多種的CPU所以比較復(fù)雜一些,而Smartphone目前實際上目前只支持一種CPU類型,所以我們可以對inf文件進(jìn)行簡化。其中文件的第1和第4部分的內(nèi)容還是和PPC一樣。而第2和第3部分則可以簡化成:

[CEDevice]
ProcessorType = 2577
UnsupportedPlatforms = “Pocket PC“,"HPC","Jupiter","Palm PC2" <-不支持PPC和HPC等設(shè)備
VersionMin = 3.00
VersionMax = 5.00

[SourceDisksNames]
1=, "SourceDisk01",,%CommonDir%
2=, "SourceDisk02",,%ExeBaseDir%\sp

[SourceDisksFiles]
"demo.htm" = 1
"demo.exe" = 2
"demo.dll" = 2

  把以上四個部分拼成一個文件就是一個完整的inf文件了。制作完inf文件后,我們就可以使用cabwiz.exe文件來生成.cab文件。該命令的語法如下:

cabwiz.exe "inf_file"
[/dest dest_directory]
[/err error_file]
[/cpu cpu_type [cpu_type]]

  參數(shù)的含義為:

inf_file – 指向inf文件的全路徑
dest_directory – 生成的cab文件的存放路徑,如不指定則生成在inf文件所在目錄
error_file – 錯誤報告文件,將所有的執(zhí)行信息都輸出到該文件。不指定該參數(shù)時,所有的錯誤信息都會用消息框來顯示。該參數(shù)主要用于自動化構(gòu)建
cpu_type – 指定需要生成的CPU類型,需要與inf文件中定義的CEDevice段的后綴一致。可以同時指定多個CPU類型

  假設(shè)我們前面例子中的inf文件名為demo.inf文件。則對應(yīng)的執(zhí)行命令為:

cabwiz demo.inf /err buildppc.err /cpu ARM MIPS SH3

  這樣就會生成 demo.arm.cab, demo.mips.cab, demo.sh3.cab 三個文件,分別對應(yīng)3種不同的CPU(平臺)的安裝文件。

制作自動安裝執(zhí)行文件

  生成了cab文件并不意味著大功告成。雖然用戶可以手工將cab文件拷貝到設(shè)備上安裝,但這樣需要用戶自己懂得區(qū)分CPU類型等許多的專業(yè)知識。所以我們通常都會進(jìn)一步生成一個可執(zhí)行的自動化安裝包,達(dá)到傻瓜化安裝的目的。如果你的安裝過程比較簡單的話,可以使用Spb Software House(http://www.spbsoftwarehouse.com)公司提供的免費軟件ezsetup進(jìn)行可執(zhí)行安裝文件的制作。該軟件生的安裝程序功能比較簡單:顯示產(chǎn)品信息和軟件授權(quán)協(xié)議,然后安裝cab文件。雖然功能比較少,但大部分的PPC/Smartphone軟件的安裝過程也只需要這幾個功能就足夠了。

  首先我們需要制作一個demo.ini文件。該文件的格式很簡單,PPC和Smartphone對應(yīng)的格式都一樣。例子如下:

[CEAppManager]
Version = 1.0 <- 這個是CeAppMgr程序的版本號,不是要安裝的軟件的版本號,不必修改
Component = Demo <- 軟件的模塊,與下面的段的名稱一致

[Demo]
Description = Demo App For PPC <- 軟件的描述
CabFiles = demo.arm.cab,demo.mips.cab,demo.sh3.cab <-列出需要所有的cab文件,注意文件名之間不要有空格

  ezsetup程序是一個命令行運行的程序,這可以方便我們進(jìn)行自動化構(gòu)建。命令的使用方法如下:

ezsetup <-l language> <-i inifilename> <-r readme.txt>
<-e eula.txt> <-o outputexe>

-l language 是指定安裝過程中使用的語言,暫時不支持中文,所以我們選English
-i inifilename ini文件的全路徑
-r readme.txt readme文件的全路徑,用于在安裝過程中顯示給用戶
-e eula.txt最終用戶授權(quán)協(xié)議文件的全路徑,用于安裝過程中授權(quán)協(xié)議界面的顯示
-o outputexe 生成的exe文件的名稱

  我們可以用下面的命令來生成可執(zhí)行安裝文件:

ezsetup -l english -i demo.ini -r Readme.txt -e License.txt -o demo_setup.exe

自動化構(gòu)建

  前面分別介紹了如何在命令行編譯鏈接目標(biāo)程序,制作cab文件,以及生成自動化安裝程序。這些步驟都是可以通過命令行方式執(zhí)行的,所以我們可以把這些命令在批處理腳本中串接起來制作自動化構(gòu)建腳本。這樣我們就可以“一鍵”完成從代碼編譯到生成最終可執(zhí)行安裝包的全過程。

posted on 2009-04-23 18:40 Sandy 閱讀(320) 評論(0)  編輯 收藏 引用 所屬分類: Window Mobile
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品久久久久久一区二区三区| 性一交一乱一区二区洋洋av| 亚洲视频观看| 亚洲国产精品毛片| 欧美在线视频一区| 亚洲专区欧美专区| 欧美精品一区二区视频 | 欧美亚洲三区| 欧美另类视频| 亚洲国产高清在线| 韩国av一区二区三区| 亚洲一级片在线观看| 日韩小视频在线观看专区| 久久久久久久久久久成人| 久久成人人人人精品欧| 国产精品av一区二区| 亚洲美女免费视频| 亚洲人成网在线播放| 久久一区二区精品| 老司机午夜精品视频| 国产自产在线视频一区| 先锋影音一区二区三区| 欧美一区二区国产| 国产精品爽黄69| 亚洲一区二区免费| 欧美亚洲免费高清在线观看| 国产精品久久一级| 亚洲一区二区三区在线看 | 香蕉久久一区二区不卡无毒影院| 欧美日韩在线观看一区二区三区| 亚洲精品免费在线| 一本久久综合亚洲鲁鲁| 欧美日韩成人在线| 亚洲精品日韩久久| 亚洲主播在线| 国产精品一卡| 久久精视频免费在线久久完整在线看| 久久婷婷国产综合国色天香| 一区二区三区自拍| 另类av一区二区| 亚洲韩国精品一区| 一本色道久久综合亚洲二区三区 | 国产精品国产三级国产专播品爱网| 日韩一级网站| 性做久久久久久免费观看欧美| 国产精品一区二区黑丝| 欧美在线观看你懂的| 免费不卡在线视频| 日韩亚洲欧美成人| 欧美亚洲成人网| 欧美一级成年大片在线观看| 欧美成人一区二免费视频软件| 亚洲美女电影在线| 国产精品久久久久一区| 久久国产精品久久久久久| 欧美激情亚洲另类| 亚洲一区二区三区中文字幕在线| 国产精品一区久久久| 久久久久成人精品免费播放动漫| 亚洲国产精品欧美一二99| 亚洲永久字幕| 一区二区三区我不卡| 欧美日韩你懂的| 久久精品人人做人人综合| 亚洲激情视频网| 久久精品av麻豆的观看方式| 日韩视频国产视频| 国产一区91| 欧美日韩国产色综合一二三四| 午夜精品久久久久久久蜜桃app | 亚洲开发第一视频在线播放| 欧美在线网站| 日韩视频国产视频| 国产在线精品成人一区二区三区| 欧美精品播放| 久久国产成人| 亚洲无限乱码一二三四麻| 亚洲国产黄色| 久久频这里精品99香蕉| 亚洲一二三区在线观看| 亚洲国产二区| 国产在线精品一区二区中文 | 欧美天堂亚洲电影院在线观看| 久久黄色级2电影| 亚洲特级毛片| 亚洲三级网站| 亚洲第一二三四五区| 久久久美女艺术照精彩视频福利播放 | 亚洲精品乱码| 一区二区视频免费在线观看| 国产精品亚洲精品| 欧美日韩中国免费专区在线看| 久久综合激情| 久久精品日韩| 欧美一级片一区| 亚洲淫片在线视频| 一区二区欧美视频| 亚洲人在线视频| 欧美激情无毛| 欧美激情区在线播放| 久久综合一区二区| 久久久久综合一区二区三区| 欧美一区三区三区高中清蜜桃| 亚洲一区二区三区四区视频| 99精品欧美一区二区三区综合在线 | 国模叶桐国产精品一区| 国产精品系列在线播放| 国产精品免费看片| 国产精品视频自拍| 国产精品一区二区在线观看| 国产精品视频yy9299一区| 欧美三区免费完整视频在线观看| 欧美人妖另类| 欧美日韩在线一区二区| 欧美午夜不卡| 国产精品免费看| 国产日韩亚洲欧美综合| 国产有码一区二区| 在线高清一区| 亚洲欧洲一级| 亚洲深夜福利视频| 亚洲欧美资源在线| 久久超碰97人人做人人爱| 久久久久**毛片大全| 鲁鲁狠狠狠7777一区二区| 欧美超级免费视 在线| 亚洲二区三区四区| 日韩一区二区精品| 亚洲制服少妇| 久久五月激情| 欧美裸体一区二区三区| 国产精品电影观看| 国产亚洲欧美激情| 亚洲黄色三级| 亚洲综合首页| 久久综合九色欧美综合狠狠| 亚洲国产精品久久久久婷婷884| 亚洲美女av网站| 羞羞视频在线观看欧美| 美日韩免费视频| 欧美调教vk| 在线精品国精品国产尤物884a| 日韩一区二区久久| 久久都是精品| 亚洲国产精品www| 亚洲资源av| 免费影视亚洲| 国产精品一区在线播放| 亚洲国产专区| 欧美亚洲日本网站| 亚洲国产视频a| 性欧美8khd高清极品| 欧美成人三级在线| 国产日韩在线亚洲字幕中文| 亚洲精品视频在线| 久久精品国产亚洲高清剧情介绍| 亚洲激情成人网| 欧美怡红院视频| 欧美日韩在线播放| 在线日韩电影| 久久精品国产成人| 99re国产精品| 欧美国产激情二区三区| 国产一区二区毛片| 亚洲一区日本| 91久久精品国产91性色| 久久久久久久久久久成人| 国产精品第一页第二页第三页| 亚洲国产毛片完整版| 久久国产成人| 亚洲先锋成人| 欧美日本三级| 亚洲精品影视在线观看| 久久亚洲免费| 欧美亚洲一级| 国产精品女同互慰在线看| 日韩午夜高潮| 欧美国产免费| 久久理论片午夜琪琪电影网| 国产视频亚洲| 欧美在线啊v| 亚洲午夜在线视频| 国产精品h在线观看| 一区二区日韩精品| 最新成人av在线| 欧美不卡激情三级在线观看| 一区在线播放视频| 久久嫩草精品久久久精品一 | 亚洲六月丁香色婷婷综合久久| 美国十次成人| 亚洲福利精品| 欧美激情国产高清| 久久这里有精品15一区二区三区| 国产综合欧美| 久久这里只有精品视频首页| 久久精品国产免费观看| 国内精品视频在线播放| 老鸭窝91久久精品色噜噜导演| 久久精品国产欧美激情 | 国产精品男女猛烈高潮激情|