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

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

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

作者:RAYMAN

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

用命令行編譯鏈接程序

  雖然EVC里提供了Batch Build的功能,但該功能只能用于同一平臺的不同CPU版本的編譯鏈接操作。在切換不同平臺進行編譯時,需要在GUI環境中手工執行,無法達到我們要求。所以我們需要研究如何在命令行狀態下進行程序的編譯運行。實際上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命令。假設我們需要編譯的程序名叫做Demo,工作環境文件名為demo.vcw,PPC版的工程項目文件為Demo.vcp,Smartphone版本的項目文件為DemoSP.vcp.我們為EVC3編寫好的批處理文件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 <-執行編譯并生成目標可執行文件
if errorlevel 1 goto :eof <-如果編譯失敗則終止批處理

:pocketpc
set CFG=Demo - Win32 (WCE ARM) Release<-將要進行編譯的項目名稱和編譯出來的目標代碼的平臺和CPU類型。其中“-”前面的是項目名稱,“-”后面的部分是平臺和CPU類型以及編譯的是Release版還是Debug版。格式可以參照在EVC的Build->Configurations中的寫法, EVC3 和 EVC4的表達方式略有不同。
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

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

制作cab文件

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

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

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

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

  一般來說,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%” <-定義程序在目標設備中的安裝目錄

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

  其中InstallDir中出現的“%CE1%”是inf文件定義的系統目錄標記,下面列出的是PPC 2002和Smartphone 2002下可以使用的目錄宏:

目錄標記 目錄路徑
%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)

  這些目錄標記在進行安裝的時候會替換成相應的系統目錄路徑。此外這些系統目錄在安裝過程中會自動根據需要進行自動調節。例如%CE1%是指系統缺省的程序安裝目錄,指向“\Program Files”。而當用戶選擇程序安裝在存儲卡中時,該目錄也會做相應改變。

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

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

[CEDevice.ARM] <-目標設備聲明,如果支持多種設備/CPU就會有多個CEDevice段,并且在用設備標號作為后綴表示。如果只支持一種設備,可以直接用[CEDevice]表示
ProcessorType = 2577 <-該目標設備是StrongARM CPU
UnsupportedPlatforms = “Smartphone”,"HPC","Jupiter","Palm PC2" <-不支持smarthphone和HPC等舊設備
VersionMin = 3.00 <-對應設備德操作系統的最低版本號要求是3.0,版本號說明見下面的說明
VersionMax = 5.00 <-假設我們的程序要求的操作系統最高版本號是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各個平臺的表示法和相應的版本號如下表,UnsupportedPlatform和VersionMin/VersionMax的值可以參考該表進行填寫。

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] <-源文件所在目錄,段名稱不加后綴表示與平臺無關的文件所在目錄.必須有該段
1=, "SourceDisk01",,%CommonDir% <-格式為 <source ID> = ,<label>,,<source directory>其中Source ID用來在后續內容中指定源文件目錄用,label只是說明,無用處。Source directory則是指源文件在PC系統中的所在目錄。

[SourceDisksNames.ARM] <-段名稱的后綴與前面的CEDevice段相對應
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] <-指明安裝包需要進行的操作,例如文件拷貝,快捷方式創建等。必須有該段
CopyFiles = Files.InstallDir, Files.Windows <-指明需要進行文件拷貝的說明段,參看下面的說明
CEShortcuts = Links <-指定需要生成的快捷方式定義. 除了這連個安裝操作外,開發人員還可以指定注冊表修改(AddReg), 自定的安裝/卸載時的可執行代碼(CESetupDLL), 注冊DLL文件(CESelfRegister).具體可以參考SDK幫助文件

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

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

"demo.exe",,,0x40000003

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

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

[Links] <- 該段對應[DefaultInstall]中CEShortcuts的定義,用來說明需要創建的快捷方式
%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所以比較復雜一些,而Smartphone目前實際上目前只支持一種CPU類型,所以我們可以對inf文件進行簡化。其中文件的第1和第4部分的內容還是和PPC一樣。而第2和第3部分則可以簡化成:

[CEDevice]
ProcessorType = 2577
UnsupportedPlatforms = “Pocket PC“,"HPC","Jupiter","Palm PC2" <-不支持PPC和HPC等設備
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]]

  參數的含義為:

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

  假設我們前面例子中的inf文件名為demo.inf文件。則對應的執行命令為:

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

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

制作自動安裝執行文件

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

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

[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程序是一個命令行運行的程序,這可以方便我們進行自動化構建。命令的使用方法如下:

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最終用戶授權協議文件的全路徑,用于安裝過程中授權協議界面的顯示
-o outputexe 生成的exe文件的名稱

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

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

自動化構建

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

posted on 2009-04-23 18:40 Sandy 閱讀(318) 評論(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>
            亚洲福利视频在线| 亚洲欧洲一区二区天堂久久| 欧美在线一区二区三区| 亚洲午夜小视频| 亚洲网站在线| 欧美一区二区三区视频| 久久久噜噜噜久久| 欧美成人a∨高清免费观看| 欧美/亚洲一区| 欧美日韩免费观看一区=区三区| 国产精品白丝黑袜喷水久久久 | 亚洲欧美日韩区| 午夜激情久久久| 欧美日韩在线播放三区四区| 欧美精品亚洲精品| 国产精品日韩欧美一区二区三区 | 国内自拍一区| 亚洲六月丁香色婷婷综合久久| aa日韩免费精品视频一| 欧美一区视频在线| 亚洲黑丝在线| 午夜一级久久| 欧美日本精品| 国产综合色产| 亚洲无亚洲人成网站77777| 久久久噜噜噜久久| 欧美日韩一区二区三区视频| 亚洲免费在线电影| 欧美大成色www永久网站婷| 国产精品三级久久久久久电影| 激情文学综合丁香| 亚洲免费一在线| 亚洲国产欧美一区二区三区久久 | 亚洲福利视频一区| 亚洲自拍高清| 亚洲国产成人在线播放| 性做久久久久久久久| 欧美成人免费大片| 国内精品久久久| 亚洲欧美视频一区| 亚洲精品视频免费| 免费不卡在线视频| 狠狠色香婷婷久久亚洲精品| 午夜性色一区二区三区免费视频| 亚洲人成亚洲人成在线观看图片| 久久精品免费电影| 国产人久久人人人人爽| 亚洲视频视频在线| 亚洲三级免费| 欧美99在线视频观看| 国产一级一区二区| 久久电影一区| 午夜精品在线看| 国产精品视频1区| 亚洲一区二区三区三| 激情综合电影网| 久久成人免费网| 亚洲欧美在线磁力| 国产精品美女xx| 亚洲欧美日韩精品综合在线观看| 亚洲三级国产| 欧美日韩三级视频| 一区二区三区欧美成人| 亚洲激情电影在线| 欧美日韩精选| 翔田千里一区二区| 久久av免费一区| 亚洲国产天堂久久国产91| 欧美激情视频一区二区三区不卡| 欧美多人爱爱视频网站| 一区二区欧美激情| 亚洲少妇自拍| 国产日韩欧美精品综合| 久久久久久9| 免费看亚洲片| 亚洲性感美女99在线| 亚洲一区二区精品在线观看| 国产欧美日韩视频| 麻豆精品91| 欧美精品www在线观看| 制服丝袜亚洲播放| 午夜免费电影一区在线观看| 亚洲黄色三级| 日韩视频免费在线观看| 国产精品一区二区三区久久久| 欧美一区视频| 男女av一区三区二区色多| 一区二区三区高清| 午夜视频久久久| 亚洲日本激情| 亚洲自拍都市欧美小说| 在线欧美亚洲| 亚洲一二三区视频在线观看| 国产夜色精品一区二区av| 模特精品在线| 国产精品久久久久毛片大屁完整版| 欧美一区二区三区视频| 久久久999精品免费| 一区二区三区国产| 久久精品视频在线观看| 夜夜嗨av一区二区三区中文字幕| 亚洲欧美一区二区激情| 亚洲精品色婷婷福利天堂| 亚洲欧美一区二区在线观看| 亚洲精选一区| 久久久久青草大香线综合精品| 亚洲婷婷综合久久一本伊一区| 久久精品综合一区| 香蕉尹人综合在线观看| 毛片基地黄久久久久久天堂| 欧美日韩亚洲综合| 美女爽到呻吟久久久久| 国产精品进线69影院| 亚洲经典三级| 亚洲国产美女| 欧美在线二区| 香蕉国产精品偷在线观看不卡| 免费看的黄色欧美网站| 久久久久99| 国产乱肥老妇国产一区二| 亚洲精品国偷自产在线99热| 在线播放豆国产99亚洲| 欧美在线看片| 久久高清一区| 国产伦精品一区二区三区免费 | 欧美一级专区| 欧美午夜理伦三级在线观看| 亚洲激情电影在线| 亚洲精品一线二线三线无人区| 久久精品国产亚洲高清剧情介绍| 午夜电影亚洲| 国产精品亚洲视频| 亚洲欧美成aⅴ人在线观看| 亚洲一区二区三区四区在线观看 | 久久婷婷国产综合尤物精品| 久久久精品动漫| 国产一区导航| 久久精品99国产精品| 久久成人一区| 巨胸喷奶水www久久久免费动漫| 欧美午夜精品久久久久久久 | 亚洲欧美成人一区二区在线电影| 欧美美女bb生活片| 亚洲精品一区在线观看| 亚洲视频电影图片偷拍一区| 欧美日本中文| 国产精品99久久不卡二区| 亚洲欧美日本另类| 国产精品一区二区a| 欧美一区二粉嫩精品国产一线天| 欧美一区二区三区四区视频| 国产欧美精品国产国产专区| 欧美一级一区| 欧美二区在线| 一区二区三区四区五区视频| 欧美视频官网| 亚洲欧美在线一区二区| 久久五月激情| 亚洲精品一区二区三| 亚洲国产成人久久综合一区| 亚洲网友自拍| 国产亚洲二区| 欧美成人中文字幕| 亚洲深夜av| 欧美 日韩 国产 一区| 日韩手机在线导航| 国产日韩欧美综合一区| 麻豆精品精品国产自在97香蕉| 亚洲美女视频在线观看| 欧美一区日韩一区| 91久久在线视频| 国产精品午夜av在线| 欧美不卡视频| 新狼窝色av性久久久久久| 亚洲国产精品黑人久久久| 午夜精品视频网站| 亚洲国产精品成人| 国产欧美在线观看| 欧美精品日韩| 久久久噜噜噜久久中文字免| 中文在线不卡| 亚洲激情成人网| 久久亚洲电影| 亚洲欧美日韩另类| 亚洲人体影院| 伊人精品视频| 国产亚洲精品久久久| 欧美日韩在线另类| 欧美暴力喷水在线| 久久免费视频网| 欧美一区二区精美| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 美国十次了思思久久精品导航| 亚洲一级片在线观看| 亚洲激情一区二区| 伊人久久亚洲热| 国产视频在线观看一区 | 久久精品亚洲精品国产欧美kt∨| 一区二区高清在线| 亚洲国产婷婷|