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

Android+Ruby=Ruboto:能訪問Android的簡單腳本

移動開發 Android
一種常用語言使兩個不相似的伙伴走到了一起:Ruby 腳本語言和 Google 針對 Android 程序的自定義格式。借助 JRuby 和 Android 項目的強大工具集,您可以編寫和運行與常見的 Android 程序的表現完全不同的 Ruby 腳本。

今天,軟件開發中的大部分有趣工作都出現在兩個極端上:巨型云服務器和微型移動設備。這些領域解決完全不同的問題,相應地,也就擁有不同的工具支 持。服務器開發往往使用腳本語言將不同的組件捆綁在一起并完成復雜的自動化任務,而移動開發主要關注某個特殊設備和用戶的特定功能和需求。

但是,這兩個極端共享一種常用語言:Java。無論 Android 還是 Spring 框架,當今許多最流行的技術都采用一種全世界廣泛理解和支持的語言。這種常用語言可能會導致一些您原以為存在天壤之別的領域之間出現令人驚訝的交集。Java 編程打開了許多跨平臺選項的大門,比如將服務器代碼輕松移植到 Android 設備上,或從現有組件綁定原生平臺功能。

本文將探索 Ruboto 項目,該項目致力于在腳本語言和 Android 之間搭建一座橋梁。您將了解到 Ruby 和 Android 相關信息,它們如何在 Dalvik 虛擬機中協同工作,如何構建和部署您的腳本,以及這種技術提高程序員生產力和應用程序靈活性的潛力。

Ruby 背景知識

許多腳本語言都想獲得程序員的青睞,但 Ruby 目前處于有利位置。最著名的是,它支持 Rails web 框架,但很多開發人員還喜歡 Ruby 的簡潔性和優雅。作為一種擁有 duck typing 和元編程(metaprogramming)等現代功能的面向對象腳本語言,Ruby 不僅很強大,足以支持各種復雜架構;而且還很簡單,能執行各種特殊任務。

Ruby 有幾種衍生版本,包括流行的 JRuby。JRuby 是一個功能齊備的 Ruby 解釋器,用 Java 語言編寫,可以在 Java Virtual Machine (JVM) 中運行。與官方 Ruby 不同,JRuby 支持從 Java 代碼中調用 Ruby 腳本和從 Ruby 腳本中調用 Java API。

Android 背景知識

Android 由 Open Handset Alliance 開發,但經常被視為一個 Google 項目。今天,Android 幾乎驅動所有新智能手機的四分之一,它的市場份額持續增長。

在內部,Android 在一個經過修改的 Linux 內核上運行。大多數應用程序都在 Dalvik 虛擬機上運行,這個虛擬機完全由 Google 設計開發,旨在優化移動設備上的性能。要了解更多 Dalvik 信息。

許多新 Android 開發人員忽略的一點是他們編寫的 Java 源代碼并不作為 Java 字節碼運行。相反,Android 工具包將 Java 字節碼轉換為 Dalvik 字節碼。這些經過轉換的文件(擴展名為 .dex)被打包到部署到設備上的應用程序中。等到設備運行您的程序時,將不會留下任何 Java 字節碼。

Android + Ruby = Ruboto

JRuby 團隊成員 Charles Nutter 有一天突然意識到:既然 Android 工具包能將編譯后的 Java 代碼轉換為 Dalvik 文件,而且由于 JRuby 在編譯后的 Java 字節碼中有一個 Ruby 解釋器,那么應該能夠在 Android 上運行 Ruby。在極短的時間內,他執行了這個任務,Ruboto 隨之誕生了。 在其他幾位開發人員的共同努力下,Ruboto 成為了一個活躍的項目,Android 和 Ruby 開發人員對該項目的興趣與日俱增。

今天,Ruboto 具有兩種版本:ruboto-irb 和 ruboto-core。ruboto-irb 是在 Android 上運行的一個交互式 Ruby shell。這個項目允許運行任何能訪問 Android API 的 Ruby 腳本。這個工具對于想在他們的設備上運行測試或執行任務的開發人員而言非常有用,但可能不適合編寫今后用于分發的應用程序。

相比之下,ruboto-core 提供一個允許創建 Ruboto 項目的框架。使用 ruboto-core,可以向您的項目添加強大靈活的腳本支持,同時保留對 Android API 的訪問能力。圖 1 展示 ruboto-core 構建過程:自動生成的 Java 源文件和定制編寫的 Ruby 腳本打包到一個將在設備上運行的 Android APK 中。

圖 1. 構造一個 Ruboto 應用程序

從 Ruboto Java 文件到 APK 的流程圖

本文余下部分主要關注創建一個基于 Ruboto 的自定義項目。Ruboto 還是一個早期軟件,在本文撰寫之時,它的版本編號是 0.0.2。該項目發展很快,等到您閱讀本文之時,它可能已經發生了輕微的變化。

編寫 SMS

將 Ruby 和 Android 結合起來,就能創建能訪問 Android 的強大功能的簡單腳本。我們將編寫一個 Ruboto 腳本,允許用戶從一家快遞服務公司預訂海鮮。這個簡單的應用程序將利用每個平臺的優點。在 Android 端,您擁有一種簡單的方法來創建一個包含您的訂單的 SMS 消息,應用程序甚至無需請求服務器就可以下訂單。在 Ruby 端,您將重用一個現有的語言處理庫,該庫將您的訂單規范化為一種可閱讀格式。

開始

要構建 Ruby 腳本并將其部署到 Android 上,需要幾個組件。您可能已經安裝了部分組件,如果是這樣,您可以繼續使用它們。

由于 Android 和 Ruby 是多平臺的,因此可以在 Linux、Mac OS X 或 Windows 上運行 Ruboto。本文完全使用命令行。

如果您在 Windows 上使用 cygwin,則可能會在運行某些 JRuby 命令時遇到問題。為安全起見,如果您在運行 Windows,請務必嚴格遵守標準 Windows CMD shell。

Java

您的開發機器上需要一個 Java Development Kit (JDK)。要檢查該工具包是否已安裝,請輸入以下命令:

  1. $ javac -version 

如果此命令發現一個 JDK 版本,那么可以繼續使用。否則,請參見 參考資料 中的鏈接安裝最新版 JDK。安裝完成后,將 JDK 的 bin 文件夾添加到您的 PATH 并重復上述命令。

Ant

Android 附帶了自己的 Ant 版本,但 Ruboto 還需要從它自己的腳本訪問 Ant。如果您沒有安裝獨立版 Ant。同樣,將它的 bin 文件夾添加到您的 PATH。確保能夠運行 Ant 命令。

Android

訪問 Android Developer Site,安裝適用于您的操作系統的 Android SDK(參見 參考資料)。安裝完成后,運行 Android 的 tools 文件夾中的 android 命令。這將啟動 SDK 管理器,如圖 2 所示。您可能想安裝以下包,它們列示在 Available packages 下方。

SDK Platform Android 2.2, API 8

Android SDK Tools(修訂版 8)

Android SDK Platform-tools(修訂版 1)

圖 2. Android SDK and AVD Manager

顯示一列可用包的窗口

打開 Android SDK and AVD Manager 的 Virtual devices 部分,創建一個用于開發的 Android 映像。如圖 3 所示,創建一個針對 Android 2.2 - API Level 8 的虛擬設備 Froyo。如果愿意,也可以創建一個虛擬 SD Card。

圖 3. 創建一個模擬器

包含以下字段的窗口:name: froyo;target: Android 2.2 - API Level 8, 1024 SD card size;skin: default, hardware

Ruboto 將在您的設備上運行,但是,如果您擁有對任何文件夾的寫權限,那么開發工作將會輕松得多,這就需要使用模擬器或 root 設備。本文余下部分將討論如何使用模擬器。這個項目完成后,它在運行軟件版本 2.2 或更高版本的 Android 設備上的效果一樣好。

將 Android 的 platform-tools 和 tools 目錄添加到您的 PATH。現在,您應該能在命令提示中運行清單 1 中的命令。

清單 1. 從您的命令提示運行命令

  1. $ aapt version 
  2. $ adb --version 

JRuby

JRuby 提供一個非常簡單的安裝方法:只需訪問 http://jruby.org/getting-started 并遵循安裝說明即可。通過運行以下命令驗證安裝是否成功:

  1. $ jruby -v 

由于 Ruboto 被托管在一個安全服務器上,因此需要安裝 jruby-openssl gem 以下載它。為此,執行以下命令:

  1. $ gem install jruby-openssl 

您可能還想安裝 rake,這是 make 或 ant 的 Ruby 對等物。輸入以下命令:

  1. $ gem install rake 

最后,是時候安裝 Ruboto 本身了。Ruboto 被打包為一個 gem,因此安裝很容易。輸入以下命令:

  1. $ gem install ruboto-core 

創建 Ruboto 項目

Ruboto 將為您從頭創建一個 Android 項目,這將確保您的清單文件(manifest)正確設置,腳本被放置到正確的集合中,且您能訪問必要的庫。您應該采用這種方法,而不是試圖自己創建或修改一個現有 Android 項目。

要創建項目,切換到 project 文件夾,輸入以下命令:

  1. $ ruboto gen app  
  2. --package us.cirion.ruboto.demo 
  3. --path fishmonger  
  4. --name Fishmonger  
  5. --target android-8  
  6. --activity Fishmonger 

這條命令將執行以下操作:

gen app 告知 Ruboto 從頭開始創建一個新 Android 項目。

--package 提供唯一的 Android 包名。

--path 告知 Ruboto 將項目存儲在哪里;這必須是一個新文件夾名。

--name 定義用戶可見的應用程序名;這不需要是唯一的。

--target 指定針對哪個 Android 版本編譯項目。對于本文,您必須使用 android-8。一個可選參數 --min_sdk 聲明您的應用程序可以在較早的 Android 版本上運行,這里省略此參數。

--activity 是一個可選參數,它告知 Ruboto 生成一個新的 Android Activity 并初始化它。

您可以探索 fishmonger 目錄的內容。Ruboto 已經自動生成了構建和運行一個基本 Activity 所需的所有 Android 文件。由于此應用程序將發送 SMS 消息,您需要在 AndroidManifest.xml 文件中進行一個更改。在該文件中,將下面這個標記插入為 元素的第一個子元素:

  1. <uses-permission android:name="android.permission.SEND_SMS" /> 

如果您省略這個權限,您仍然能夠構建并加載您的腳本,當您的應用程序試圖發送一條 SMS 消息時,您將遇到一個運行時錯誤。

運行默認項目

Ruboto 以開箱即用的方式生成了一個 Activity 和腳本,它們將在設備或模擬器上安裝和運行。如果您的模擬器還沒有運行,可以使用以下命令啟動它:

  1. $ emulator -avd Froyo 

等待模擬器啟動到主屏幕。要確保所有 Ruboto 文件正確構建并部署,cd 到 fishmonger 目錄并運行以下命令:

  1. $ rake install 

如果遇到錯誤,嘗試再次運行此命令;有時連接在構建過程中會超時。最初構建需要一些時間,但后續更新速度就快得多。安裝完成后,在您的模擬器中查找標簽為 Fishmonger 的圖標。啟動它并等待一會兒。在本文撰寫之時,Ruboto 引擎加載需要一點時間。最終,您將看到與圖 4 類似的屏幕。

圖 4. 模板 Ruboto 活動

左邊有一個窗口,右邊有一個軟鍵盤和一些控制按鈕的模擬器

定制項目

現在我們設置 Fishmonger 應用程序。首先,您將添加自然語言支持。Ruby 擁有一個名為 linguistics 的優秀 gem,提供許多英語語言功能。在本文撰寫之時,Ruboto 還不能處理 linguistics 庫的嵌套目錄結構,因此,請您下載本文的 linguistics zip 文件,將其內容解壓到 fishmonger\assets\scripts 中(參見 下載 部分的鏈接)。這是一個庫存 linguistics gem,被修改來扁平化目錄結構。將來,您應該能夠只綁定這個 gem 和您的 Ruboto 腳本。

編寫腳本

現在您準備好處理項目核心部分了。Ruboto 框架負責處理所有 Java 代碼和 Android 基礎架構,因此,您的所有工作都可以在 fishmonger.rb 中完成。清除該文件的默認內容。首先添加清單 2 中的文本。

清單 2. 腳本依賴項

  1. require 'ruboto.rb' 
  2. require 'linguistics' 
  3. include Linguistics::EN 
  4.  
  5. import "android.telephony.SmsManager" 
  6.  
  7. ruboto_import_widgets :Button, :EditText, :LinearLayout, \ 
  8.   :RadioGroup, :RadioButton, :TextView 

前兩行加載 ruboto 和 linguisitics 庫。include 命令將使英語語法在您的模塊中可用。

第一個導入對于 JRuby 用戶比較眼熟:您正在添加對另一個庫的支持。注意,在本例中,您實際上正在使用一個 Android Dalvik 庫,而不是標準 Java 庫的一部分。Ruboto 將在運行時使用反射(reflection)來加載這個類并使其對您可用。

ruboto_import_widgets 的功能與 import 相似。在本例中,您正在添加一些 Android 特有 UI 小部件。這些小部件通常用于 Android 活動中,Ruboto 添加一些方便的方法,便于您輕松配置 UI。

下面,定義腳本的 handle_create 方法,如清單 3 所示。

清單 3. 配置屏幕

  1. $activity.handle_create do |bundle| 
  2.   setTitle 'Freddy\'s Fresh Fish' 
  3.  
  4.   setup_content do 
  5.     linear_layout :orientation => LinearLayout::VERTICAL do 
  6.       text_view :text => "What would you like to order?" 
  7.       @group = radio_group do 
  8.         radio_button :text => "Tuna":id => 0 
  9.         radio_button :text => "Trout":id=> 1 
  10.         radio_button :text => "Salmon":id => 2 
  11.         radio_button :text => "Crab":id => 3 
  12.         radio_button :text => "Lobster":id => 4 
  13.       end 
  14.       @quantity = edit_text :hint => "Quantity" 
  15.       button :text => "Place Order" 
  16.     end 
  17.   end 

handle_create 在用戶啟動應用程序時調用。在 Android 中,這是您處理必要設置的地方。標準 Android 應用程序通常使用 XML 定義布局,但在 Ruboto 中,需要通過腳本定義布局。

Ruboto 的功能在您的腳本和 Android 之間架起一座橋梁。無論您擁有 Ruby 背景還是 Android 背景,您都應該能夠明白setup_content 中發生的事。您正在創建一個垂直布局,將幾個小部件堆疊在一起。這些小部件包括文本,幾個用于選擇要預訂的魚類種類的單選按鈕,一個用于輸入數量的可編輯文本字段,以及一個用于下訂單的按鈕。可以使用 Ruby 語法來配置您的小部件,而不是 Android 中通常使用的更繁瑣的 Java 語法。

設置每個 radio_button 上的 id 屬性有好處,它向您提供一種簡單方法,以便稍后查看選中了哪個按鈕。

Android 將自動處理與單選按鈕和可編輯文本字段之間的所有用戶交互。唯一剩下的工作是定義如何處理 Place Order 按鈕,如清單 4 所示。

清單 4. 下訂單

  1. handle_click do |view| 
  2.    if view.text == "Place Order" 
  3.      count = @quantity.text 
  4.      food = @group.child_at(@group.checked_radio_button_id).\ 
  5.        text.downcase 
  6.      order = Linguistics::EN::plural(food,count) 
  7.      SmsManager.default.send_text_message("4155551234", \ 
  8.        nil"Please send #{count} #{order}"nilnil
  9.      finish 
  10.    end 
  11.  end 
  12. nd 

如果您以前編寫過 Android 應用程序,您可能會注意到,您正在使用一種不同的范式來處理選擇。Android 開發人員傾向于為每個可選項目編寫一些獨特的單擊處理程序。但是,在 Ruboto 中,更簡單的方法是為您的 Activity 創建一個全局單擊處理程序,在那里測試用戶單擊了哪個項目。

您提取用戶選擇的魚的數量和種類。如果用戶沒有選中一個單選按鈕,Ruboto 將在內部優雅地處理這個運行時錯誤。否則,您將把文本傳遞到 linguistics 庫并請求它為您創建適當的名詞形式。這個庫能處理不同的復數規則,因此它將生成 1 salmon、2 salmon、1 crab、2 crabs 之類的值。它甚至能識別手寫的數字,因此它還將生成 one lobster 和three lobsters 之類的詞組。對于一行代碼來說,這是令人非常印象深刻的行為,展示了它利用現有腳本向您的應用程序輕松添加功能的能力。

類似地,發送一條 SMS 消息只需一行調用,調用一個方便的 Android 方法。Ruboto 允許您使用 Ruby 式語法調用這個方法;對等的 Java 代碼將是 SmsManager.getDefault().sendTextMessage()。您提供接收者的電話號碼和要發送的消息,并為可選參數傳遞 nil。如果您 正在一個設備上運行并想實際發送一條 SMS 消息,可以替換為一個實際電話號碼。如果您想在模擬器中測試,則可以替換為模擬器的端口號,比如 “5554”。

運行腳本

Ruboto 最強大的一個方面是允許通過簡單地加載一個已更新腳本來更改功能。即使您已經完全更改了這個應用程序的功能,也不需要重新構建應用程序或重新加載 APK。相反,只需在命令行輸入以下命令:

  1. $ rake update_scripts 

這條命令將把 linguistics 腳本和您的新 fishmonger 腳本復制到模擬器或一個已連接設備。當您重新啟動應用程序時,將看到您的新屏幕,如圖 5 所示。

圖 5. Android 預訂頁面

顯示一些預訂 tuna、crab、trout、salmon 和 lobster 的選項以及一個數量和一個預訂按鈕的屏幕

如果您正在運行一個非根設備(non-rooted device)或正在更改 Java 文件或 Android 清單文件,可以通過再次輸入 rake 安裝命令來加載更新。注意,即使是非根設備也可以實時更新它們的腳本;例如,您可以從 Internet 下載新腳本并在運行時生成它們。固件限制僅適用于通過您的 USB 連接推送文件。

繼續試驗這個應用程序。當您進行了一個有效選擇并按下預訂按鈕后,屏幕將自動關閉。如果您使用一個有效的接收者地址,他們將很快收到您的消息。圖 6 顯示了一個非常繁忙的海鮮店的最新訂單列表。

圖 6. 來自 Ruboto 腳本的標準化訂單

顯示 4 個不同訂單的屏幕

結束語

Ruboto 仍然是一個早期項目,但即使處于現在的狀態,它已經能提供一種非常靈活有用的方法來編寫和分發 Android 軟件。Ruboto 的成功歸功于 JRuby 和 Android 的優勢:JRuby 已經完成了以 Java 語言編寫一個功能齊備的 Ruby 解釋器的艱巨工作,Android 的 Dalvik 工具集提供了一種令人印象深刻的從標準 Java 字節碼到它的自定義 Dalvik 字節碼的轉換。

如您所見,Ruboto 腳本可能會非常短,但提供來自 Ruby 和 Android 的強大功能?;旌虾推ヅ?Ruby 腳本、Ruby 和 Java 語法以及 Android API 的能力向您提供了許多提高生產力的選項。

Ruboto 是位于客戶端和服務器兩端的開發人員之間的一個有用橋梁。Android 開發人員將欣賞它的反射功能,該功能向他們提供實時大幅更新應用程序功能的能力。Ruby 開發人員將擁有一種相當便捷的方法來結合他們的腳本技術和移動平臺,利用現有 Ruby 代碼來創建新應用程序。這兩類開發人員都將懷著極大興趣,密切關注這個項目的進展。

責任編輯:佚名 來源: IBM
相關推薦

2012-04-09 11:32:40

ibmdw

2009-12-14 13:47:28

Ruby簡單語法

2009-12-14 11:12:55

Ruby運行

2009-12-18 16:27:41

Ruby解析Json

2009-12-17 16:50:54

Ruby簡單編寫

2009-12-15 15:19:30

Ruby訪問控制

2013-03-26 13:38:12

Android per

2014-07-17 11:36:27

Android Stu使用教程

2013-03-28 16:31:48

AIDL的簡單使用Android中AID

2014-08-08 09:39:40

httpClient

2009-12-14 13:27:06

Ruby區間

2009-12-15 14:46:04

Ruby類常量

2009-12-18 14:10:29

Ruby訪問剪貼板

2013-05-14 10:37:10

AIR Android設置訪問權限

2011-05-27 16:57:13

Android widget

2010-01-26 14:43:53

Android數據存儲

2011-03-30 16:20:35

RubyJRubyAndroid

2018-07-02 13:10:05

Android短信驗證

2011-09-09 16:00:02

Android Web實例

2010-02-05 17:02:13

Android
點贊
收藏

51CTO技術棧公眾號

男人操女人的视频网站| 久久夜色精品国产| 人人妻人人添人人爽欧美一区| 亚洲视频免费播放| 国产三级精品三级在线观看国产| 久久夜色精品国产欧美乱极品| 中文字幕在线看视频国产欧美| 免费涩涩18网站入口| 人人爽人人爽人人片av| 色偷偷色偷偷色偷偷在线视频| 成人日韩在线视频| 久草中文在线| 日韩视频一区二区三区在线播放免费观看| 亚洲v精品v日韩v欧美v专区| 国产亚洲一区二区三区在线播放 | 日韩欧美2区| 中文字幕在线不卡一区二区三区| 99re国产在线播放| 成年人在线观看av| 国产一区精品福利| 亚洲一区在线电影| 国产在线观看91精品一区| 国产女主播在线播放| 妞干网免费在线视频| 日本一区二区三区国色天香 | 91porn在线观看| 亚洲狼人精品一区二区三区| 一区二区三欧美| 日本一区二区三区在线免费观看| 亚洲一级少妇| 成人污视频在线观看| 8x海外华人永久免费日韩内陆视频| 亚洲av综合一区二区| 秋霞在线视频| 麻豆精品视频在线| 久久久久久国产精品三级玉女聊斋| 三级在线免费看| 伊人福利在线| 国产在线日韩欧美| 这里只有精品久久| 中文字幕a在线观看| 欧美一级做a| 久久精品人人做| 国产精品电影观看| 日韩福利片在线观看| 99精品视频在线观看播放| 日韩av影片在线观看| 欧美日韩午夜爽爽| 99视频在线观看免费| 日韩成人影院| 日韩精品视频免费专区在线播放 | 熟女少妇一区二区三区| 成人a在线观看高清电影| 亚洲二区在线观看| 国产日韩欧美大片| 日本www在线观看| 亚洲综合日本| 久久久久久久久久久网站| 国产suv精品一区二区68| 精品美女视频| 亚洲日韩第一页| 国产午夜福利视频在线观看| 五月天激情婷婷| 国产福利一区二区三区视频在线 | 日韩中文字幕av在线| 精品无吗乱吗av国产爱色| 宅男噜噜噜66国产日韩在线观看| 久久综合伊人77777尤物| 久久精品国产亚洲AV成人婷婷| 久久综合色占| 欧美亚洲图片小说| 亚洲第一综合网站| 动漫av一区二区三区| 国产九色精品成人porny| 精品少妇v888av| 免费无码一区二区三区| www.神马久久| 亚洲第一偷拍网| 色欲色香天天天综合网www| 人成在线免费视频| 日韩av在线播放中文字幕| 搡老女人一区二区三区视频tv| 人人妻人人藻人人爽欧美一区| 久草在线综合| 欧美日韩视频在线观看一区二区三区 | 黄色免费在线观看| 亚洲精品久久久蜜桃| 大地资源网在线观看免费官网| bestiality新另类大全| 亚洲免费av高清| 日韩一级特黄毛片| www视频在线| 久久午夜av| 国产精品高潮粉嫩av| 中文字幕a级片| 精品一区二区三区欧美| 91丨九色丨国产在线| 国产精品30p| 亚洲经典自拍| 日韩美女视频在线观看| 亚洲熟女乱色一区二区三区久久久| 精品亚洲欧美一区| 国产高清在线精品一区二区三区| 免费黄色网址在线| 韩日欧美一区| 日韩免费不卡av| www.com欧美| 久久婷婷国产综合精品青草| 中文字幕中文字幕在线中心一区| 羞羞的视频在线观看| 99国产精品久久久久久久久久久 | 毛片aaaaa| 亚洲女人av| 国产日产亚洲精品| 天堂av资源在线| 国产精品护士白丝一区av| www.日本三级| 日本黄色一区| 精品福利在线导航| 欧美偷拍一区二区三区| 一区二区中文字幕在线观看| 日韩精品视频在线观看免费| 又嫩又硬又黄又爽的视频| 亚洲欧洲另类| 国产在线999| 色呦呦中文字幕| 国产精品嫩草99a| 国产美女永久无遮挡| 另类中文字幕国产精品| 日韩视频一区在线观看| 免费看91的网站| 日韩图片一区| 亚洲a级在线播放观看| 韩国中文免费在线视频| 亚洲综合久久久| 激情五月亚洲色图| 秋霞综合在线视频| 欧美巨猛xxxx猛交黑人97人| 老熟妇一区二区三区| 成人午夜在线播放| 丰满女人性猛交| 日本在线免费播放| 欧美性猛交xxxx偷拍洗澡| 在线视频观看一区二区| 国产成人黄色| 69久久夜色精品国产69乱青草 | 欧美卡1卡2卡| 伊人国产在线视频| 亚洲精品无吗| 亚洲91精品在线观看| 91亚洲视频在线观看| 国产视频一区二区三区在线观看| 缅甸午夜性猛交xxxx| 视频一区日韩精品| 欧美一区二区三区色| 亚洲精品成人无码熟妇在线| 亚洲精品男同| 国产色综合一区二区三区| av片在线观看| 7777女厕盗摄久久久| 亚洲一二三精品| 久久三级视频| 青青成人在线| 97欧美成人| 日韩成人在线播放| 亚洲国产成人精品激情在线| www.在线成人| 男女超爽视频免费播放| а√中文在线天堂精品| 高清亚洲成在人网站天堂| 国产人妻精品一区二区三区不卡| 日本aⅴ亚洲精品中文乱码| 欧美区高清在线| 色婷婷综合久久久中字幕精品久久 | 自拍偷自拍亚洲精品播放| 国产成人黄色网址| 欧美一级本道电影免费专区| 国产精品久久久久久久天堂| 粉嫩一区二区三区国产精品| 欧美视频你懂的| 最新黄色av网址| 日韩美女一区二区三区在线观看| 国产成人综合久久| 精品久久无码中文字幕| 中文字幕在线观看不卡| 黄页网站在线看| 国产精品va| 精品网站在线看| a毛片在线播放| 精品国产一区a| 成人免费视频毛片| 国产清纯在线一区二区www| 中文字幕 91| 国产一区观看| 日产国产精品精品a∨| 99re8精品视频在线观看| 欧美伦理91i| 午夜视频www| 欧美性色黄大片| 免费又黄又爽又色的视频| 99久久99久久久精品齐齐| 日韩久久久久久久久久久久| 天堂在线精品| 91久久嫩草影院一区二区| 搞黄网站在线看| 亚洲精品一区久久久久久| 无码人妻精品一区二区蜜桃色欲| 国产精品网站在线| 精品少妇人妻av一区二区三区| 欧美日韩国产在线观看网站| 成人av资源在线播放| 18+激情视频在线| 亚洲精品视频播放| 99视频免费看| 欧美性视频一区二区三区| 国产第一页在线播放| 91色在线porny| 99久久国产综合精品五月天喷水| 精品国产91乱码一区二区三区四区 | 日韩女优一区二区| 国产日韩欧美在线一区| 在线观看中文av| 在线亚洲伦理| 日本一道在线观看| 欧美日韩精品一区二区视频| 国产精品三区在线| 免费视频成人| 欧美亚洲激情在线| 日p在线观看| 亚洲性生活视频| 天堂中文在线网| 亚洲精品写真福利| 青娱乐国产视频| jvid福利写真一区二区三区| 爽爽爽在线观看| 视频一区国产视频| 五十路熟女丰满大屁股| 免费欧美一区| 国产欧美韩日| 97一区二区国产好的精华液| 成人字幕网zmw| 久久精品xxxxx| 青青精品视频播放| 国产ktv在线视频| 久久久久久亚洲| 黄色一级片在线观看| 日韩激情av在线播放| 欧日韩在线视频| 欧美mv和日韩mv国产网站| 国产精品嫩草影院桃色| 亚洲欧美中日韩| 美国黄色特级片| 国产亚洲精品aa午夜观看| 五十路六十路七十路熟婆| 国产+成+人+亚洲欧洲自线| 国产又黄又猛又粗又爽的视频| 亚洲尤物在线| 免费无码国产v片在线观看| 国产精品久久久一区二区| 国产精品免费在线播放| 电影一区中文字幕| 91人人爽人人爽人人精88v| 成人国产激情| 国产精品一二区| 99tv成人影院| 91精品久久久久久蜜桃| 日本一区二区三区电影免费观看| 91久久精品在线| 精品一区二区三区视频在线播放| 91嫩草在线视频| 99热这里有精品| 成人免费看片视频| 日本亚州欧洲精品不卡| 高清视频一区| 猫咪成人在线观看| 久久久久久久有限公司| 香蕉久久久久久| 91老司机在线| 日韩中文字幕无砖| 国产精品免费看一区二区三区| 欧美视频三区| 久久久久福利视频| 欧美一区二区激情视频| 亚洲激情六月丁香| 久久久久亚洲天堂| 欧美日韩国产精品一区| 婷婷激情五月综合| 3d成人动漫网站| 亚洲欧美激情在线观看| 亚洲精品国产免费| 成av人电影在线观看| 久久艳片www.17c.com| av资源中文在线天堂| 国产精品日韩精品| 伊人www22综合色| 欧美理论一区二区| 亚洲破处大片| 人妻内射一区二区在线视频| 久久精品99国产精品日本| 无码人妻一区二区三区在线视频| www.亚洲色图| 欧美一级特黄高清视频| 午夜影视日本亚洲欧洲精品| 亚洲一区中文字幕在线| 亚洲精品国精品久久99热| lutube成人福利在线观看| 欧美激情精品久久久久久久变态| 欧美××××黑人××性爽| 99在线看视频| 国产精品99视频| 成人三级视频在线播放| 国产精品原创巨作av| 久久久精品成人| 欧美日韩国内自拍| 精品国产亚洲AV| 日韩亚洲精品电影| 色戒汤唯在线| 国产伦精品一区二区三区免| 亚洲乱码精品| 亚洲综合色在线观看| 99re在线精品| 久久精品这里有| 日韩一区二区高清| 日韩在线观看www| 国产国产精品人在线视| 欧美亚洲色图校园春色| 日韩a级黄色片| 韩国女主播成人在线| 欧美午夜激情影院| 色综合久久久久网| 午夜视频福利在线| 久久久免费电影| 玖玖玖视频精品| eeuss中文| 国内成人精品2018免费看| 极品色av影院| 欧美日本国产一区| www.视频在线.com| 国产成人亚洲综合91| 亚洲制服欧美另类| 大j8黑人w巨大888a片| 成人动漫中文字幕| 国产乡下妇女做爰视频| 精品国产亚洲在线| a级片在线免费| 国产精品乱码视频| 亚洲人成免费| 日批在线观看视频| 欧美日韩国产精品| 青青草免费在线视频| 欧美一级电影久久| 欧美禁忌电影网| av视屏在线播放| 国产精品免费丝袜| 国产原创中文av| 久久成人人人人精品欧| 视频一区中文字幕精品| 国产精品视频网站在线观看| 成人午夜电影小说| 可以在线观看av的网站| 亚洲精品视频在线观看视频| 成人黄色免费短视频| 一区二区三区av| 国产精品888| 久久久久亚洲av成人片| 亚洲国产精品系列| 国模套图日韩精品一区二区| 日韩国产一区久久| 久久国产乱子精品免费女| 国产精品精品软件男同| 欧美不卡一区二区三区| 蜜桃视频动漫在线播放| 日韩精品久久久免费观看 | 麻豆国产精品一区二区三区| 伊人久久久久久久久久久久久久| 欧美成人猛片aaaaaaa| 欧产日产国产精品视频| 婷婷四月色综合| 国产成人综合网站| 岛国av中文字幕| 久青草国产97香蕉在线视频| 老汉色老汉首页av亚洲| 黑森林精品导航| 一区二区三区中文在线观看| 飘雪影院手机免费高清版在线观看| 国产精品色午夜在线观看| 欧美久久99| 中文字幕人妻一区二区三区在线视频| 欧美日本不卡视频| 3344国产永久在线观看视频| 天堂社区 天堂综合网 天堂资源最新版| 狠狠色2019综合网| www.国产色| 欧美日本高清视频| 欧美精品一二| 深田咏美中文字幕| 欧美日本在线播放| 小草在线视频免费播放| 黄色高清视频网站| 久久久三级国产网站|