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

借助Apache Cordova構建混合移動應用程序

譯文
移動開發
在該例子中,我們使用Apache Cordova部署混合應用程序,該應用程序使用了TicketMonster的現有HTML5移動前端,并與在JBoss A7或JBoss企業應用平臺(EAP)上運行的TicketMonster部署環境的充分利用代表性狀態傳輸協議(REST)的服務進行交互。

[[127393]]

【51CTO譯文】你已完成了為應用程序構建前端的工作,它還有了移動支持功能?,F在你想提供用戶們可以從應用程序商店下載的原生客戶端應用程序。讀完該教程后,你會明白如何重復使用現有的HTML5代碼,借助Apache Cordova,針對每個目標平臺開發原生的移動客戶端程序。

你將學會如何:

•對現有的Web應用程序進行改動,好讓應用程序可以作為一個混合移動應用程序來部署。

•借助Apache Cordova,開發面向安卓和iOS的原生應用程序。

什么是混合移動應用程序?

混合移動應用程序是用HTML5開發的――不像原生應用程序編譯成針對特定平臺的二進制代碼。客戶端代碼完全由HTML、CSS和JavaScript組成,包裝起來后安裝在客戶端設備上,完全像任何原生應用程序那樣,然后在周圍的原生外殼生成的瀏覽器進程里面執行。

除了封裝瀏覽器進程外,原生外殼還允許訪問原生設備功能,比如方向感應器、GPS、聯系人名單等,應用程序則可以通過JavaScript庫來使用這些功能。

在該例子中,我們使用Apache Cordova部署混合應用程序,該應用程序使用了TicketMonster的現有HTML5移動前端,并與在JBoss A7或JBoss企業應用平臺(EAP)上運行的TicketMonster部署環境的充分利用代表性狀態傳輸協議(REST)的服務進行交互。

圖1:混合TicketMonster的架構

改動應用程序以便遠程訪問

在我們讓應用程序成為混合應用程序之前,需要對應用程序訪問遠程服務的方式做一些改變。請注意:這些變化已經實現在用戶前端,我們在此為你顯示了需要改動的代碼。

在Web版本的應用程序中,客戶端代碼與服務器端代碼一起部署,那樣模型和集合(還有將執行REST服務調用的任何部分代碼)可以使用相對應用程序根目錄的URL:所有資源都由同一臺服務器來提供,所以瀏覽器將進行正確的調用。這還尊重瀏覽器在默認情況下執行的同源策略,以防止跨站腳本攻擊。

如果客戶端代碼與服務分開來部署,REST調用必須使用絕對URL(我們會在后面探討給同源策略帶來的影響)。此外,由于我們希望不必重新構建源代碼,就能夠將該應用程序部署到不同的主機上,所以它必須是可以配置的。

你已經在用戶前端章節大體了解了這方面,我們在那個章節為移動版應用程序定義了configuration(配置)模塊。

  1. src/main/webapp/resources/js/configurations/mobile.js  
  2. ...  
  3. define("configuration", function() {  
  4.     if (window.TicketMonster != undefined && TicketMonster.config != undefined) {  
  5.         return {  
  6.             baseUrl: TicketMonster.config.baseRESTUrl  
  7.         };  
  8.     } else {  
  9.         return {  
  10.             baseUrl: ""  
  11.         };  
  12.     }  
  13. });  
  14. ...  

該模塊有一個baseURL屬性,既可以設置代表相對URL的空字符串,也可以設置成前綴,比如域名,這取決于名為TicketMonster的全局變量是否早已被定義,它擁有baseRESTUrl屬性。

我們所有執行REST服務調用的代碼都依賴該模塊,因而基本REST URL可以在單單一個地方加以配置,并注入到整段代碼中,正如下列代碼實例所示:

  1. src/main/webapp/resources/js/app/models/event.js 
  2. /** 
  3.  * 事件模型的模塊 
  4. */ 
  5. define([ 
  6.     'configuration'
  7.     'backbone' 
  8. ], function (config) { 
  9.     /** 
  10.      * 事件模塊類定義 
  11.      * 用于對單個事件執行CRUD(創建讀取更新刪除)操作 
  12.      */ 
  13.     var Event = Backbone.Model.extend({ 
  14.         urlRoot: config.baseUrl + 'rest/events' // the URL for performing CRUD operations 
  15.     }); 
  16.     // 輸出事件類 
  17.     return Event; 
  18. }); 

執行REST服務調用的其他所有模塊以相似的方式使用前綴。眼下你沒必要做任何事情,因為我們在用戶前端教程中編寫的代碼最初就是這樣編寫而成的。不過小心,如果你有一個移動Web應用程序使用任何相對URL,就需要對它們進行重構,以便加入某種URL配置。

#p#

安裝混合移動工具和CordovaSim

混合移動工具(Hybrid Mobile Tools)和CordovaSim還沒有作為JBoss Developer Studio的一部分而安裝。它們可以從JBoss Central來安裝,如下所示:

1. 想安裝這些插件,只需把下面這個鏈接拖到JBoss Central: https://devstudio.jboss.com/central/install?connectors=org.jboss.tools.aerogear.hybrid。另外在JBoss Central中,選擇Software/Update(軟件/更新)選項卡。在Find(查找)欄,鍵入JBoss Hybrid Mobile Tools,或者滾動瀏覽列表,找到JBoss Hybrid Mobile Tools + CordovaSim。選擇相應的復選框,并點擊Install(安裝)。

圖2:通過鏈接,開始混合移動工具和CordovaSim的安裝過程。

圖3:在JBoss Central的軟件/更新選項卡中找到混合移動工具和CordovaSim。

在安裝向導中,確保已為你想要安裝的軟件選擇了復選框,并點擊Next(下一步)。建議你安裝所有已選擇的組件。

仔細查看列出來安裝的項目的細節,并點擊Next(下一步)。在閱讀并同意許可證后,點擊I accept the terms of the license agreement(s),即我接受許可證協議的條款,點擊Finish(完成)。Installing Software(安裝軟件)窗口就會打開,報告安裝進度。

在安裝過程中,你可能會收到警告,提醒要安裝未簽名內容。如果真是這樣,仔細閱讀內容細節,如果對內容滿意,就點擊OK(確定),繼續安裝。

圖4:提示安裝的軟件含有未簽名內容的警告。

一旦安裝完成,會提示你重啟IDE。點擊Yes(確定),即可立即重啟;如果你需要保存對所打開項目改動的任何未保存內容,就點擊No(不)。注意:IDE重啟后,改動才生效。

一旦安裝完畢,你必須將安卓SDK的位置告知混合移動工具,之后才能使用涉及安卓的混合移動工具動作。

想設定安卓SDK的位置,點擊Window(窗口)→ Preferences(偏好設置),選擇Hybrid Mobile(混合移動)。在Android SDK Directory(安卓SDK目錄)欄,鍵入已安裝SDK的路徑,或者點擊Browse(瀏覽),瀏覽到相應位置。點擊Apply(應用),并點擊OK(確定),即可關閉Preferences(偏好設置)窗口。

圖5:偏好設置窗口的混合移動面板

#p#

開發混合移動項目

1. 想開發一個新的混合移動項目,點擊File(文件)→ New(新建)→ Other(其他),選擇“Hybrid Mobile (Cordova) Application Project”,即“混合移動(Cordova)應用程序項目”。

圖6:開始開發一個新的混合移動應用程序項目

2. 輸入項目信息:應用程序名稱、項目名稱和程序包。

項目名稱

TicketMonster-Cordova

名稱

TicketMonster-Cordova

ID

org.jboss.jdf.example.ticketmonster.cordova

圖7:開發一個新的混合移動應用程序項目

點擊Next(下一步),為該項目選擇混合移動引擎。如果你之前在JBoss Developer Studio中從未安裝過混合移動引擎,就會提示你下載或搜索可以使用的引擎。我們將點擊Download(下載)按鈕來執行前一項操作。

圖8:頭一次安裝混合移動引擎

系統會提示一個對話框,你可以下載所有可用的混合移動引擎。

圖9:選擇要下載的混合移動引擎

我們將選擇版本3.4.0的安卓和iOS變種。

圖10:為3.4.0選擇安卓和iOS

我們已經下載并安裝了混合移動引擎,現在不妨將它用在我們的項目中。選擇剛配置好的引擎,并點擊Finish(完成)。

圖11:開發一個新的混合移動應用程序項目

一旦你完成了開發項目的任務,瀏覽到www目錄,該目錄里面含有應用程序的HTML5代碼。由于我們重復使用TicketMonster代碼,你只要把www目錄換成TicketMonster的webapp目錄的符號鏈接;config.xml文件和rest目錄需要拷貝過去,拷貝到TicketMonster的webapp目錄。另外,你可以拷貝TicketMonster的代碼,并在那里作所有必要的改動(不過在那種情況下,你在兩個地方都需要維護應用程序的代碼。)

  1. $ cp config.xml $TICKET_MONSTER_HOME/demo/src/main/webapp 
  2.  
  3. $ cp res $TICKET_MONSTER_HOME/demo/src/main/webapp 
  4.  
  5. $ cd .. 
  6.  
  7. $ rm -rf www 
  8.  
  9. $ ln -s $TICKET_MONSTER_HOME/demo/src/main/webapp www

圖12:將www與webapp目錄鏈接起來的結果

混合移動工具要求cordova.js文件裝入到應用程序的起始頁面。由于我們不想把該文件裝入到現有的index.html文件中,就要創建一個只由Cordova應用程序才可以使用的新的起始頁面。

  1. src/main/webapp/mobileapp.html 
  2. <!DOCTYPE html> 
  3. <html> 
  4. <head> 
  5.     <title>Ticket Monster</title> 
  6.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
  7.     <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"/> 
  8.     <script type="text/javascript" src="resources/js/libs/modernizr-2.6.2.min.js"></script> 
  9.     <script type="text/javascript" src="resources/js/libs/require.js" 
  10.             data-main="resources/js/configurations/loader"></script> 
  11. </head> 
  12. <body> 
  13. </body> 
  14. </html> 

現在不妨修改混合移動項目的配置,使用該頁面作為應用程序的起始頁面。此外,我們將把我們的REST服務URL添加到config.xml文件中的域白名單(為了簡單起見,你在開發過程中還可以使用“*”):

  1. src/main/webapp/config.xml 
  2. <?xml version="1.0" encoding="utf-8"?> 
  3. <widget xmlns="http://www.w3.org/ns/widgets" xmlns:gap="http://phonegap.com/ns/1.0" 
  4.     id="org.jboss.jdf.example.ticketmonster.cordova" version="2.0.0"> 
  5.     ... 
  6.     <!-- The application start page --> 
  7.     <content src="mobileapp.html" /> 
  8.     <!-- 
  9.     Add the TicketMonster cloud app to the domain whitelist. 
  10.     Domains are assumed blocked unless set otherwise. 
  11.      --> 
  12.     <access origin="http://ticketmonster-jdf.rhcloud.com"/> 
  13.     ... 
  14. </widget> 

下一步,我們需要將庫裝入到應用程序。我們還將構建一個單獨的模塊。除了裝入面向安卓的Apache Cordova JavaScript庫外,該模塊還將裝入移動應用程序的其余部分。我們還需要配置應用程序的基本URL。就這個例子而言,我們將使用部署在云端的TicketMonster的URL。

  1. src/main/webapp/resources/js/configurations/hybrid.js 
  2. // 為充分利用REST的服務覆蓋配置 
  3. var TicketMonster = { 
  4.     config:{ 
  5.         baseRESTUrl:"http://ticketmonster-jdf.rhcloud.com/" 
  6.     } 
  7. }; 
  8. require(['../../../cordova'], function() { 
  9.     var bootstrap = { 
  10.         initialize: function() { 
  11.             document.addEventListener('deviceready'this.onDeviceReady, false); 
  12.         }, 
  13.         onDeviceReady: function() { 
  14.             // 檢查是不是iOS 7或更高版本,禁止覆蓋狀態欄 
  15.             if(window.device.platform.toLowerCase() == "ios" && 
  16.                 parseFloat(window.device.version) >= 7.0) { 
  17.                 StatusBar.overlaysWebView(false); 
  18.                 StatusBar.styleDefault(); 
  19.                 StatusBar.backgroundColorByHexString("#e9e9e9"); 
  20.             } 
  21.             // 裝入移動模塊 
  22.             require (["mobile"]); 
  23.         } 
  24.     }; 
  25.     bootstrap.initialize(); 
  26. }); 

注意:我們將使用OpenShift主機托管版的TicketMonster應用程序,因為它在所有環境下訪問起來更容易――智能手機模擬器和仿真器也能訪問它,基本上不需要什么配置。另一方面,訪問本地運行的JBoss EAP實例可能需要一番復雜的網絡配置;要是需要向互聯網打開實例,以便可以從智能手機訪問,更是錯綜復雜。

上述代碼片段含有面向iOS 7的針對特定設備的檢查機制。我們將使用Cordova狀態欄插件,確保iOS 7上的狀態欄并不重疊用戶界面。Cordova設備插件將用來獲得檢測設備時所用的設備信息。我們還將使用Cordova通知插件,向使用原生移動用戶界面的最終用戶顯示提醒和通知。

我們將繼續把所需的Cordova插件添加到項目。

選擇混合移動項目的plugins目錄,通過右擊鼠標打開上下文菜單。選擇菜單中的Install Cordova Plug-in(安裝Cordova插件)選項。這會打開一個對話框,你可以在上面搜索各個位置下的Cordova插件,包括Cordova注冊中心、git軟件庫或你文件系統中的目錄。

圖13:啟動Cordova插件發現向導

現在我們將搜索并添加所需的插件:

圖14:添加Cordova設備插件

圖15:添加Cordova通知插件

圖16:添加Cordova狀態欄插件

點擊Next(下一步)按鈕,核實所要安裝的插件版本。點擊Finish(完成)按鈕,即可下載插件,并安裝到項目。

圖17:核實所要添加的插件

最后一步需要調整src/main/webapp/resources/js/configurations/loader.js,以便在安卓上運行時裝入該模塊,使用我們已經在項目中配置的查詢字符串。我們還將調整src/main/webapp/resources/js/app/utilities.js,以便使用通知插件,在混合移動應用程序的上下文中顯示提醒。

  1. src/main/webapp/resources/js/configurations/loader.js 
  2. //檢測要裝入的合適模塊 
  3. define(function () { 
  4.     /* 
  5.      針對客戶端的簡單檢查。如果是觸摸設備或低分辨率屏幕, 
  6.      顯示移動客戶端。通過啟用低分辨率屏幕上的移動客戶端, 
  7.      我們允許在移動設備外面進行測試(比如JBoss Tools和 
  8. JBoss Developer Studio中的移動瀏覽器模擬器)。 
  9.      */ 
  10.     var environment; 
  11.     if (document.URL.indexOf("mobileapp.html") > -1) { 
  12.         environment = "hybrid"
  13.     } 
  14.     else if (Modernizr.touch || Modernizr.mq("only all and (max-width: 768px)")) { 
  15.         environment = "mobile"
  16.     } else { 
  17.         environment = "desktop"
  18.     } 
  19.     require([environment]); 
  20. }); 

現在我們將仔細檢查utilities對象中的displayAlert函數。它被設置成一旦有通知插件,就使用該插件:

  1. src/main/webapp/resources/js/app/utilities.js 
  2. ... 
  3. // 顯示模板的utility函數 
  4.     var utilities = { 
  5.         ... 
  6.         applyTemplate:function (target, template, data) { 
  7.             return target.empty().append(this.renderTemplate(template, data)); 
  8.         }, 
  9.         displayAlert: function(msg) { 
  10.             if(navigator.notification) { 
  11.                 navigator.notification.alert(msg); 
  12.             } else { 
  13.                 alert(msg); 
  14.             } 
  15.         } 
  16.     }; 
  17. ... 

由于這類環境中缺少navigator.notification對象,該函數自動適用于非移動環境。

#p#

運行混合移動應用程序

現在你可以準備運行應用程序了。混合移動應用程序可以在使用混合移動工具的設備和模擬器上運行。

在安卓設備或模擬器上運行

注意:

你需要為安卓做什么?

想在安卓設備或模擬器上運行,你就要安裝安卓開發者工具,這需要Eclipse實例(可以使用JBoss Developer Studio),可以在Windows(XP、Vista和7)、Mac OS X(10.5.8或更新版本)、Linux(GNU C Library - glibc 2.7或更新版本,已安裝運行32位應用程序所需庫的64位發行版)上運行。

你必須在自己的系統上安裝安卓API 17或更新版本,那樣才能使用Run on Android Emulator(在安卓模擬器上運行)這個動作。

想在設備上運行該項目,在Project Explorer(項目資源管理器)視圖中,鼠標右擊項目名稱,點擊Run As(運行方式)→Run on Android Device(在安卓設備上運行)。這個選項調用外部安卓SDK來包裝工作區項目,如果一個安卓設備已連接上,就在安卓設備上運行。要注意:必須安裝安卓SDK,另外必須正確配置IDE以便使用安卓SDK,那樣這個選項才會成功執行。

想在模擬器上運行項目,在Project Explorer(項目資源管理器)視圖中,鼠標右擊項目名稱,點擊Run As(運行方式)→Run on Android Emulator(在安卓模擬器上運行)。

圖18:在安卓模擬器上運行應用程序

這要求你構建安卓AVD(安卓虛擬設備),以便在虛擬設備中運行應用程序。

一旦部署完畢,應用程序現在可以在模擬器中用來交互。

圖19:在安卓AVD上運行的應用程序

在iOS模擬器上運行

注意:

你需要為iOS做什么?

使用OS X操作系統時,這個選項才會顯示,OS X有iOS模擬器。你必須安裝Xcode 4.5+,它包括iOS 6 SDK。你還要安裝面向iOS 5.x或更高版本的模擬器,以便在模擬器上運行項目。你可能需要更高版本的模擬器才能運行應用程序,這取決于你可能使用的各種Cordova插件。

在Project Explorer(項目資源管理器)視圖中,鼠標右擊項目名稱,點擊Run As(運行方式)→Run on iOS Emulator(在iOS模擬器上運行)。

圖20:在iOS模擬器上運行應用程序

該選項調用外部iOS SDK,將工作區項目包裝成XCode項目,然后在iOS模擬器上運行。

圖21:在iOS模擬器上運行的應用程序

在CordovaSim上運行

CordovaSim讓你可以在本地工作區中運行混合移動應用程序。你可以開發應用程序,不需要部署到實際設備上,甚至不需要部署到仿真器和模擬器上,就能實現應用程序的行為。你在使用CordovaSim能實現什么功能方面有一些限制;比如說,有些Cordova插件可能與CordovaSim無法兼容。但總的來說,你得到的是更快的開發周期。

在Project Explorer(項目資源管理器)視圖中,鼠標右擊項目名稱,點擊Run As(運行方式)→Run with CordovaSim(與CordovaSim一起運行)。這會在CordovaSim中打開應用程序,它由BrowserSim模擬設備和設備輸入面板組成。

圖22:在CordovaSim上運行的應用程序

結束語

這篇教程介紹了借助Apache Cordova構建混合應用程序的全過程。你可能看到了我們如何將一個可正常運行的HTML5 Web應用程序改成可以直接在安卓和iOS上運行的應用程序。

英文原文:Creating hybrid mobile versions of the application with Apache Cordova

布加迪編譯,轉載請注明譯者及譯文原文出處。

責任編輯:閆佳明 來源: 51CTO譯文
相關推薦

2013-09-30 10:19:46

SAP

2014-05-31 22:54:37

Azure移動服務應用程序

2012-03-21 09:36:33

ibmdw

2012-05-14 17:35:28

移動Web

2018-12-28 14:10:57

開發工具 移動應用

2012-03-30 15:54:43

ibmdw

2011-11-23 10:06:32

Azure微軟移動應用

2024-01-03 11:44:26

開發云服務

2011-06-15 16:45:03

UIKitCocoa TouchiOS

2015-01-07 00:30:04

MBaaS移動應用

2010-10-15 09:39:22

MeeGoQt

2017-12-10 14:13:14

云服務云原生應用程序

2011-09-01 10:01:35

PhoneGap應用程序GoodDay

2010-02-04 10:17:38

Android應用程序

2017-03-02 11:10:39

AndroidMVVM應用程序

2011-12-06 10:10:59

云計算移動應用

2011-02-22 10:23:43

2015-09-16 10:06:40

建議大數據后臺

2022-05-23 14:48:44

人工智能機器學習科技

2014-03-27 10:28:31

移動Web開發框架
點贊
收藏

51CTO技術棧公眾號

穿情趣内衣被c到高潮视频| 美女av一区二区| 免费看的黄色大片| 国产69精品久久app免费版| 老妇喷水一区二区三区| 国产精品成人一区二区不卡| 中文字幕日韩一区| 国产精品高清一区二区三区| 亚洲第一在线播放| 欧美第一精品| 亚洲成人亚洲激情| 无码少妇一区二区三区芒果| gogo在线观看| ww久久中文字幕| 成人激情综合网| 国产精品500部| 亚洲精品一区二区在线看| 亚洲精品美女久久久| 亚洲36d大奶网| 99久久精品免费看国产小宝寻花| 国产亚洲精品aa| 国产精品日韩欧美一区二区三区| 波多野结衣视频观看| 欧美三级网页| 综合网日日天干夜夜久久| 成人在线电影网站| 97久久中文字幕| 一本色道久久综合亚洲91| 波多野结衣与黑人| a天堂中文在线| 91视频在线看| 成人黄色在线免费观看| 一级特黄aa大片| 久久久久.com| 97精品伊人久久久大香线蕉| 天堂av免费在线| 国产尤物久久久| 亚洲黄页视频免费观看| 欧美xxxx黑人| 国产亚洲高清一区| 欧美剧情片在线观看| 日韩av资源在线| 九色porny丨入口在线| 亚洲最大成人综合| 青青在线免费视频| 麻豆网在线观看| 国产精品美日韩| 日韩啊v在线| 久色视频在线| 久久新电视剧免费观看| 91国偷自产一区二区三区成为亚洲经典 | 午夜视频在线观看网站| 国产午夜精品一区二区三区嫩草| 久久精品女人的天堂av| 天堂中文在线资源| 91丨porny丨中文| 美脚丝袜一区二区三区在线观看| 无码国精品一区二区免费蜜桃| 国产69精品久久久久777| 99热99热| 精品人妻一区二区三区换脸明星 | 国产女同一区二区| 欧美 亚洲 另类 激情 另类| 日韩国产在线观看一区| 国产精品久久久91| 中文字幕精品一区二| 男女男精品网站| 国产欧美精品va在线观看| 一级淫片免费看| 国产精品一品二品| 国产精品一区二区av| 天天躁日日躁狠狠躁喷水| av成人动漫在线观看| 久久久久久精| 成人在线观看网站| 自拍偷拍亚洲欧美日韩| 国风产精品一区二区| free性欧美16hd| 狠狠色狠狠色综合日日五| 日韩精品一区中文字幕| 欧美成人毛片| 91精品国产综合久久福利软件| xxxx国产视频| 日本三级久久| 深夜福利91大全| 久草成人在线视频| 美女爽到呻吟久久久久| 国产日韩av在线| 国产一区二区在线视频聊天| 国v精品久久久网| 久久久影院一区二区三区| 国产精品毛片一区二区三区四区| 中文字幕高清一区| 国产传媒久久久| se01亚洲视频| 精品久久久久久综合日本欧美| 国产二级一片内射视频播放| 欧美一区二区三| 欧美俄罗斯乱妇| 高潮毛片又色又爽免费 | 国产精品福利在线观看| 国产福利第一视频| 久久久久九九视频| 久久久天堂国产精品| 男人最爱成人网| 日韩色视频在线观看| 中文字幕成人动漫| 欧美日本久久| 国产精品视频地址| 午夜福利一区二区三区| 亚洲色图视频网| 熟妇人妻va精品中文字幕| 亚洲日本va午夜在线电影| 亚洲欧美日韩网| 毛片a片免费观看| 蜜臀av一区二区在线观看| 韩国成人动漫在线观看| 国产黄色在线网站| 欧美性极品少妇| 青青草视频播放| 欧美日一区二区在线观看| 国产精品午夜视频| 邻家有女韩剧在线观看国语| 亚洲国产精品一区二区久久| 波多野结衣国产精品| 国产成人ay| 97视频网站入口| 亚洲va欧美va| 亚洲色图视频网站| 爱豆国产剧免费观看大全剧苏畅| 国产一区二区精品福利地址| 97久久久免费福利网址| 高清一区二区三区四区| 最近日韩中文字幕| 亚洲黄色小视频在线观看| 免费黄色成人| 奇米成人av国产一区二区三区| 亚洲AV无码精品自拍| 亚洲欧洲精品成人久久奇米网| 黄色国产小视频| 久久综合欧美| 日本一区二区三区四区视频| 天天操天天干天天爽| 亚洲成在人线在线播放| 五月天丁香社区| 国产一区二区三区四区老人| aaa级精品久久久国产片| 黄网站在线播放| 欧美欧美欧美欧美| 免费成人美女女在线观看| 免费观看在线综合| 亚洲精品人成| 欧美高清你懂的| 日韩在线视频网站| 亚洲性在线观看| 中文字幕日本乱码精品影院| 日本黄色福利视频| 久久精品久久久| 亚洲一区二区三区四区视频| jizz性欧美| 精品久久久三级丝袜| 91黑人精品一区二区三区| 日韩制服丝袜av| 欧美另类一区| 免费看av不卡| 中文字幕国产亚洲| 91麻豆国产在线| 亚洲桃色在线一区| 最好看的中文字幕| 亚洲无线视频| 久久久久久久久久久一区| 亚洲性受xxx喷奶水| 精品亚洲一区二区| 亚洲图片欧美日韩| 中文字幕一区二| 成年人性生活视频| 99精品热视频只有精品10| 欧美污视频久久久| 久久69成人| 欧美大片在线免费观看| 人成在线免费视频| 欧美午夜片在线看| 久草网在线观看| 26uuu精品一区二区| 亚洲第一中文av| 欧美~级网站不卡| 久久久久久久久久久一区| 成人综合网站| 久久久久久久久久亚洲| 青青免费在线视频| 91精品欧美福利在线观看| 久久精品国产亚洲AV无码男同| 久久婷婷综合激情| www.成人黄色| 亚洲黄色天堂| 一区二区在线观| 国内自拍欧美| 国产在线精品成人一区二区三区| 成人影音在线| 日韩有码在线观看| 水莓100在线视频| 91精品国产美女浴室洗澡无遮挡| 国产一级在线免费观看| 中文成人综合网| 99精品一区二区三区无码吞精| 日韩电影免费在线看| 国产精品国三级国产av| 欧美日韩国产高清电影| 国产精品乱码视频| 色成人综合网| 国产成人综合精品在线| av3级在线| 久久国产精品首页| 国产一级免费在线观看| 亚洲精品一线二线三线无人区| 中文字幕在线网站| 欧美日韩一区二区三区| 免费三片在线播放| 国产精品第四页| 国产又大又粗又爽的毛片| 成人av综合一区| 手机在线免费毛片| 久久99精品国产.久久久久| 日韩视频第二页| 伊人精品在线| 日韩a级黄色片| 色777狠狠狠综合伊人| 欧美一区观看| 欧美freesex8一10精品| 大波视频国产精品久久| 国产精品日韩精品在线播放| 国产精品亚洲自拍| 浪潮色综合久久天堂| 57pao成人永久免费视频| 国产白丝在线观看| 九九热这里只有在线精品视| 精品国产丝袜高跟鞋| 中文字幕亚洲情99在线| 国产系列电影在线播放网址| 精品亚洲一区二区三区四区五区| 免费av一级片| 亚洲成人网久久久| 蜜桃视频久久一区免费观看入口| 日韩视频免费观看高清完整版 | 成人精品一区| 亚洲天堂av网| 免费看男男www网站入口在线 | 中文字字幕码一二三区| gogo大胆日本视频一区| 国产二级一片内射视频播放| jiyouzz国产精品久久| 免费观看一级一片| 久久久精品国产免费观看同学| 国产ts在线播放| 国产欧美精品一区二区三区四区| 美国黑人一级大黄| 国产精品国产精品国产专区不蜜 | 国产精品成人久久久久| 99欧美精品| 91精品在线播放| 精品一区二区三区在线观看视频| 亚洲最大的av网站| 综合激情五月婷婷| 国产一区二区三区色淫影院| 亚洲福利网站| 日本午夜精品一区二区三区| 不卡中文字幕| 九九99久久| 超碰在线亚洲| 欧洲亚洲一区| 精品视频黄色| 色乱码一区二区三区熟女| 图片小说视频色综合| 99亚洲国产精品| 亚洲精品一级| 日本精品www| 丝袜亚洲精品中文字幕一区| 亚洲视频一二三四| 国产毛片精品一区| 国产ts在线观看| 97久久精品人人做人人爽50路| av网站免费在线播放| 国产人妖乱国产精品人妖| 永久av免费网站| 一区二区日韩av| 精品国产一区二区三区四| 欧美日韩精品一二三区| 国产丰满果冻videossex| 精品国产一二三| 福利在线播放| 精品中文字幕在线观看| 污视频网站在线免费| 久久久视频精品| 三级成人黄色影院| 91精品国产一区二区三区动漫 | 自拍视频一区二区| 国产午夜精品久久久久久久| 欧美国产日韩在线观看成人| 午夜国产精品一区| 怡红院男人天堂| 亚洲国产一区二区三区四区| 黄色av网站在线免费观看| 久久精品国产精品| 久久毛片亚洲| 国产在线观看91精品一区| 国产精品美女在线观看直播| 亚洲乱码一区二区三区| 国产一区激情| 天堂在线资源视频| 成人av在线一区二区三区| 五月婷六月丁香| 亚洲激情图片小说视频| 免费一级a毛片| 欧美不卡视频一区| av中文字幕免费| 中文字幕不卡av| www.超碰在线| 国产精品电影观看| 超碰成人在线观看| 在线免费观看成人| 老司机精品视频网站| 日韩精品xxx| 欧美国产精品v| 日本中文字幕久久| 欧美xxxxxxxx| 成年人在线视频免费观看| 97avcom| 激情不卡一区二区三区视频在线| 日韩精品欧美在线| 亚洲激情视频| 毛片毛片毛片毛| 中文字幕亚洲一区二区va在线| 9i看片成人免费看片| 欧美大片在线观看一区二区| 麻豆传媒免费在线观看| 国产成人av在线| 久久婷婷国产| 成人网站免费观看入口| 国产麻豆成人传媒免费观看| mm131美女视频| 欧美日韩亚洲精品内裤| 好吊视频一区二区三区| xxxxxxxxx欧美| 久久91视频| 婷婷四月色综合| 美女免费视频一区二区| 亚洲调教欧美在线| 国产日韩欧美精品电影三级在线| 亚洲欧美综合另类| 精品国产1区二区| 日本韩国在线视频爽| 国产精品观看在线亚洲人成网| 天堂日韩电影| 999香蕉视频| 26uuu亚洲综合色欧美| 一区二区在线观看免费视频| 日韩欧美激情在线| 亚洲综合伊人久久大杳蕉| 成人av免费电影| 欧美午夜精品| 亚洲熟女一区二区三区| 午夜久久久久久久久| 人妻无码中文字幕| 欧美激情乱人伦| 日韩精品福利一区二区三区| 国产网站免费在线观看| 久久久精品免费免费| 波多野结衣毛片| 日日摸夜夜添一区| 亚洲欧美日本国产| 91免费黄视频| 久久精品一区蜜桃臀影院| 在线观看 亚洲| 中文字幕日韩专区| 亚洲一区二区三区日本久久九 | 亚洲国产精品一区| 国产精品揄拍100视频| 日本高清成人免费播放| 亚洲成人三级| 91超碰rencao97精品| 综合激情一区| 亚洲精品女人久久久| 色欧美日韩亚洲| 黄色av电影在线播放| 国产精品国产三级欧美二区| 在线综合欧美| 亚洲国产精品一区二区久久hs| 91精品国产91热久久久做人人| 理论片午夜视频在线观看| 欧美成ee人免费视频| 亚洲资源av| 动漫性做爰视频| 亚洲精品www久久久| 欧美xxxx性| 日韩视频免费播放| 国产三级精品三级在线专区| 国产精品热久久| 91av在线免费观看视频| 99久久亚洲精品蜜臀| 国产精品麻豆入口|