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

8步教你打開Android之門 NDK入門教程

移動開發 Android
這是一篇Android NDK開發的入門教程,在這一教程結束后,你將創建你自己的項目,從Java代碼簡單地調用原生C語言代碼。

前不久我們為大家介紹過在MyEclipse 8.6上搭建Android開發環境,本文為一篇外文翻譯,我們將介紹如何學習安裝 Android NDK 并開始使用它。在這一教程結束后,你將創建你自己的項目,從 Java 代碼簡單地調用原生 C 語言代碼。

51CTO推薦專題:Android開發應用詳解

教程細節

技術:Android SDK、NDK、C 語言

難度:進階

預計完成時間:60-90 分鐘

先決經驗

在我們開始之前,我們需要先花點時間了解一下這一教程的難度。它的標記是“進階”。之所以標為“進階”是因為我們這些作者想要確保你符合以下要求:

你有Java和C語言經驗。

你能適應命令行操作。

你知道如何了解你的 Cygwin、awk 和其他工具的版本。

你能適應 Android Development。

你有一個有效的 Android 開發環境(本文撰寫時,筆者使用的是 Android 2.2)

你使用 Eclipse 或者可以將 Eclipse 的指導步驟輕松應用于你自己的 IDE 上。

就算你并不滿足這些條件,我們當然也歡迎你閱讀這一教程,不過你可能在某些步驟遇到困難,如果你滿足了以上條件這些困難就會輕易解除。也就是說,即使你認為自己是個移動開發老手,使用 NDK 依然很容易碰到困難和麻煩。請注意你可能要自行排查故障才能讓一切正常運轉于你的開發系統中。

本教程提供完整的樣例項目的開源代碼下載。

何時使用 NDK 的說明

好,如果你正在閱讀這篇教程,你也許已經在考慮在你的 Android 項目中使用 NDK 了。不過,我們想要花點時間討論一下 NDK 為什么那么重要、何時該使用它,以及——同等重要的,何時不該使用它。

總的來說,只有當你的應用程序真的是個處理器殺手的時候你才需要使用 NDK。也就是說,你設計的算法要利用 DalvikVM 中所有的處理器資源,而且原生運行較為有利。還有,別忘了在 Android 2.2 中,JIT 編譯器會提高類似代碼的效率。

另一個使用 NDK 的原因是方便移植。如果你在現有的應用程序中有大量的 C 語言代碼,那么使用 NDK 不僅可以加速你的項目的開發進程,也能在你的 Android 和非 Android 項目中保持修改的同步。這一點對于那些為其他平臺而寫的 OpenGL ES 應用程序來說尤為如此。

別以為只要用了原生代碼就能提高你的應用程序的效率。Java 與原生 C 語言之間的轉換會增加一些資源開銷,因此只有你有一些集中消耗處理器資源的任務時才真正有必要這么做。

第 0 步:下載工具

好了,讓我們開始吧。你需要下載 NDK。我們先開始下載,因為在下載的過程中你可以檢查一下確保你所需要用到的其余工具的版本都正確。

從 Android 網站下載適合你的操作系統的 NDK。

現在,對照下列檢查你的工具版本:

如果在 Windows 下,Cygwin 1.7 或更高版本

將 awk 升級到***版本(我們使用的是 20070501)

GNU Make 3.81 或更高版本(我們使用的是 3.81)

如果其中任何一個的版本太舊,請在繼續之前先升級。

第 1 步:安裝 NDK

既然 NDK 已經下載完成(沒錯吧?),你就需要解壓縮它。解壓后將它放入合適的目錄中。我們把它放在和 Android SDK 相同的目錄下。記住你把它放在哪里了。

現在,你也許想要在路徑設置中添加 NDK 工具。如果你在 Mac 或 Linux 下,你可以用你的原生路徑設置來完成。如果你在 Windows 下的 Cygwin,你就需要設置 Cygwin 的路徑設置。

第 2 步:創建項目

創建一個常規的 Android 項目。為了避免日后的問題,你的項目的路徑必須不包含空格。我們的項目有個叫做“com.mamlambo.sample.ndk1”的包,帶有一個叫做“AndroidNDK1SampleActivity”的默認 Activity——你之后還會看到它們。

在這個項目的頂層創建一個叫做“jni”的目錄——這是你放置原生代碼的地方。如果你很熟悉 JNI,那你就會知道 Android NDK 很大程度上基于 JNI 的概念——它本質上是個只有有限的 C 語言編譯頭文件的 JNI。

第 3 步:添加一些 C 語言代碼

現在,在 jni 文件夾中,創建一個叫做 native.c 的文件。一開始將以下 C 語言代碼寫入該文件,我們以后再添加另一個函數:

  1. #include  
  2.  
  3. #include  
  4.  
  5. #include  
  6.  
  7. #define DEBUG_TAG "NDK_AndroidNDK1SampleActivity"  
  8.  
  9. void Java_com_mamlambo_sample_ndk1_AndroidNDK1SampleActivity_helloLog(JNIEnv * env, jobject this, jstring logThis)  
  10.  
  11. {  
  12.  
  13.     jboolean isCopy;  
  14.  
  15.     const char * szLogThis = (*env)->GetStringUTFChars(env, logThis, &isCopy);  
  16.  
  17.     __android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "NDK:LC: [%s]", szLogThis);  
  18.  
  19.     (*env)->ReleaseStringUTFChars(env, logThis, szLogThis);  
  20.  
  21. }  
  22.  

這個函數實際上非常淺顯。它獲取一個 Java 對象的字符串參數,將它轉換為 C-string,然后將它寫入到 LogCat 中。

不過該函數的名字很重要。它遵循了以“Java”的特定字樣開頭,后面跟著包名稱,然后類名稱,然后方法名稱,和 Java 中定義的一樣。每一部分都由一根下劃線隔開,而不是點。

該函數的頭兩個參數也很重要。***個參數是 JNI 環境,它與 helper 函數會被頻繁調用。第二個參數是該函數所屬的 Java 對象。

第 4 步:從 Java 中調用原生代碼

既然你已經寫好了原生代碼,讓我們回頭看看 Java 這邊。在默認的 Activity 中,按照你的喜好創建一個按鈕,并添加一個按鈕處理器。從按鈕處理器中,對 helloLog 作調用:

  1. helloLog("This will log to LogCat via the native call."); 

然后你必須在 Java 這邊添加函數聲明。在你的 Activity 類中添加如下聲明:

  1. private native void helloLog(String logThis); 

它告訴編譯和鏈接系統該方法將在原生代碼中實現。

***,你需要加載原生代碼最終編譯到的庫。在 Activity 類中添加如下的靜態初始化程序來根據名稱加載庫(庫的名字隨你決定,在下一步還會用到):

  1.  
  2.  
  3. static {  
  4.  
  5.     System.loadLibrary("ndk1");  
  6.  
  7. }  
  8.  

第 5 步:添加原生代碼的 Make 文件

在 jni 文件夾中,現在你需要添加在編譯中要用到的 makefile。該文件必須以“Android.mk”命名,如果你之前命名的文件為 native.c,庫為 ndk1,那么 Android.mk 的內容就應該是這樣:

  1.  
  2.  
  3. LOCAL_PATH := $(call my-dir)    
  4.  
  5.     
  6.  
  7. include $(CLEAR_VARS)    
  8.  
  9.     
  10.  
  11. LOCAL_LDLIBS := -llog    
  12.  
  13.     
  14.  
  15. LOCAL_MODULE    :ndk1    
  16.  
  17. LOCAL_SRC_FILES :native.c    
  18.  
  19.     
  20.  
  21. include $(BUILD_SHARED_LIBRARY)  
  22.  

#p#

第 6 步:編譯原生代碼

既然你的原生代碼已完成,make 文件也已就緒,是時候編譯原生代碼了。在命令行下(Windows 用戶在 Cygwin 下),你需要在你的項目的根目錄下運行 ndk-build 命令。ndk-build 工具就在 NDK 工具目錄中。將它添加到我們的路徑中是最方便的辦法。

Fig 1: Typical build output from the ndk-build command

在之后的編譯中,如果你使用“ndk-build clean”命令,那么你可以確保所有的東西都被重新編譯了。

第 7 步:運行代碼

現在你已準備妥當可以運行代碼了。在你最喜歡的模擬器或者手持設備中載入該項目,查看 LogCat,然后點擊按鈕。

可能有兩件事情會發生。首先,它可能正常工作了。這樣的話,恭喜你!不過你可能還是想要繼續閱讀下去。你也可能在 LogCat 中得到類似“Could not execute method of activity”這樣的錯誤。這很正常。這只是說明你漏掉了某個步驟罷了。用 Eclipse 很容易發生這種情況。通常,Eclipse 被設置為自動重編譯。如果它不知道有東西被修改了,它就不會自動重編譯和重鏈接。在本例中,Eclipse 不知道你編譯了原生代碼。所以,“清除(cleaning)”該項目(在 Eclipse 工具欄中點擊項目(Project)->清除(Clean)),強制 Eclipse 重編譯。

第 8 步:添加另一個原生函數

接下來的函數將不僅演示返回值的能力,還會演示返回例如字符串這樣的對象的能力。在 native.c 中添加如下函數:

  1. jstring Java_com_mamlambo_sample_ndk1_AndroidNDK1SampleActivity_getString(JNIEnv * env, jobject this, jint value1, jint value2)  
  2. {  
  3.     char *szFormat = "The sum of the two numbers is: %i";  
  4.     char *szResult;  
  5.     // add the two values  
  6.     jlong sum = value1+value2;  
  7.     // malloc room for the resulting string  
  8.     szResult = malloc(sizeof(szFormat) + 20);  
  9.     // standard sprintf  
  10.     sprintf(szResult, szFormat, sum);  
  11.     // get an object string  
  12.     jstring result = (*env)->NewStringUTF(env, szResult);  
  13.     // cleanup  
  14.     free(szResult);  
  15.     return result;  
  16. }  
  17.  
  18.  

為了正常編譯,你會需要添加一個 include stdio.h 的聲明。而且,為了響應這個新的原生函數,請在你的 Activity Java 類中添加如下聲明:

  1.  
  2. private native String getString(int value1, int value2);  

你現在可以隨意設定其功能。我們使用如下兩個調用和輸出:

  1. String result = getString(5,2);  
  2. Log.v(DEBUG_TAG, "Result: "+result);  
  3. result = getString(105, 1232);  
  4. Log.v(DEBUG_TAG, "Result2: "+result);  

回到 C 語言函數中,你會注意到我們做了許多事情。首先,我們在使用 malloc() 函數中的 sprintf() 調用時需要創建一個緩沖器(buffer)。如果你不會忘記通過使用 free() 函數清理結果,那么這就很合理了。然后,為了傳回結果,你可以使用一個叫作 NewStringUTF() 的 JNI helper 函數。該函數基本上就是獲取一個 C 語言字符串,以之創建一個新的 Java 對象。這個新的字符串對象就可以在之后作為結果返回,你就可以在 Java 類中將它作為一個常規 Java 字符串對象使用了。

Fig 2: Screen from sample implementation

指令集、兼容性,等等

Android NDK 需要 Android SDK 1.5 或更高版本。在新版本的 NDK 中,有些新的頭文件可用于擴大對某些 API 的訪問——特別是 OpenGL ES 庫。

不過,那些都不是我們要談論的兼容性。這是原生代碼,在使用時由處理器構架編譯。因此,你要問自己的一個問題會是它支持何種處理器構架?在目前的 NDK 中(在本文撰寫時)它只支持 ARMv5TE 和 ARMv7-A 指令集。默認設置下,目標架構被設置為 ARMv5TE,它可以在使用 ARM 芯片的 Android 設備上運行。

它預計未來將支持其他指令集(其中提到了 x86)。這其中有很有意思的潛在狀況:NDK 解決方案無法適用于所有的設備。例如,市面上有使用 x86 指令集的英特爾(Intel)Atom 處理器的 Android 平板設備。

那么 NDK 在模擬器上如何呢?模擬器運行的是真正的虛擬機,包括完整的處理器虛擬。沒錯,這意味著在虛擬機中運行 Java 就等于是在虛擬機中運行了一個虛擬機。

總結

你的成果如何?你裝上了 Android NDK,最終完成了部分使用原生 C 語言代碼的功能完善、正常運行的應用程序了嗎?我們希望如此。在這一過程中有許多潛在的“出問題啦!”的可能,不過從某些方面來看,這些都是值得的。和從前一樣,歡迎留言評論。

原文標題:Advanced Android: Getting Started with the NDK

來源:http://mobile.tutsplus.com/tutorials/android/ndk-tutorial/

原文作者: Shane Conder & Lauren Darcey

【編輯推薦】

  1. 多圖詳解 “Android UI”設計官方教程 
  2. 圖文并茂 在MyEclipse 8.6上搭建Android開發環境 
  3. Android開發必備的21個免費資源和工具 
  4. Android開發:自由選擇TextView的文字 
  5. Android開發:如何實現TCP和UDP傳輸 
責任編輯:佚名 來源: 譯文網
相關推薦

2009-10-21 15:03:50

VB入門教程

2009-09-25 10:24:40

Androind入門教OPhone

2009-07-08 15:12:48

Java Servle

2014-05-26 15:35:55

Web組件Web Compone

2010-08-03 13:06:15

Flex Builde

2013-08-29 14:12:52

Storm分布式實時計算

2018-08-01 15:22:36

數據科學家數據科學分析

2016-11-10 08:44:45

數據挖掘分析

2018-03-22 14:59:13

Docker入門容器

2010-06-18 16:56:50

UML建模語言

2011-09-02 10:59:10

jQuery Mobi

2013-06-24 13:38:34

HTML5 DataList

2010-07-20 16:19:54

Perl

2010-06-13 09:45:35

Widget開發

2013-08-29 14:28:09

StormHadoop

2010-05-21 12:50:45

Subversion快

2024-11-12 15:46:37

2010-08-03 14:37:30

Flex入門教程

2011-07-21 10:29:18

iPhone 開發

2012-05-10 08:29:46

XcodeiOSPhoneGap
點贊
收藏

51CTO技術棧公眾號

欧美色videos| 巨乳诱惑日韩免费av| 日韩久久精品一区| 99蜜桃臀久久久欧美精品网站| 四虎影院在线播放| 六月丁香婷婷久久| 久久久噜久噜久久综合| 91精品国自产在线| 成人三级毛片| 欧美丰满少妇xxxxx高潮对白| 欧美午夜性视频| 春暖花开成人亚洲区| 国产成人精品影院| 国产99久久精品一区二区 夜夜躁日日躁| 国产一区第一页| 日韩高清一级| 日韩美一区二区三区| 国产成人手机视频| 成人影音在线| 专区另类欧美日韩| 欧美久久在线| 丰满少妇高潮在线观看| 久久aⅴ国产欧美74aaa| 91超碰中文字幕久久精品| 91免费公开视频| 欧美色图激情小说| 日韩大陆毛片av| 香蕉视频免费网站| 国产不卡精品在线| 欧美日韩国产一区二区三区地区| 欧美 日韩 激情| 国产丝袜在线播放| 亚洲日本中文字幕区| 亚欧洲精品在线视频免费观看| 欧美特黄一级视频| 国产成人在线看| 91在线网站视频| 亚洲图片中文字幕| 日本系列欧美系列| 国产成人精品电影| 欧美精品韩国精品| 国产一区二区三区的电影| 国内精品久久久久伊人av| 青娱乐在线视频免费观看| 911久久香蕉国产线看观看| 在线视频国产日韩| 久热精品视频在线| 久久国产免费| 青青草免费观看免费视频在线| 男人插女人下面免费视频| 亚洲精品久久久狠狠狠爱| 麻豆成人91精品二区三区| 国产成人亚洲综合91精品| 欧美一级视频免费观看| 中文高清一区| 69av在线视频| 精品成人av一区二区在线播放| 日韩视频一区| 欧美亚洲一区在线| 成人免费一级片| 日韩av一区二区在线影视| 国产精品夫妻激情| 中文字幕精品一区二区精| 久久精品国产精品亚洲精品| 国产九九精品视频| 国产又粗又猛又黄又爽| 国产乱淫av一区二区三区| 99在线视频播放| 蜜臀久久99精品久久久| www国产亚洲精品久久麻豆| 国产一区免费视频| 国产毛片av在线| 亚洲你懂的在线视频| 日本阿v视频在线观看| 超碰高清在线| 欧美性猛交丰臀xxxxx网站| 丰满少妇在线观看| 久久三级中文| 日韩激情av在线免费观看| 亚洲最大成人网站| 亚欧美无遮挡hd高清在线视频| 欧美成人精品在线| 久久国产视频播放| 美女视频黄免费的久久| 成人免费在线看片| 精品av中文字幕在线毛片| 国产精品国产三级国产有无不卡| 91精品国产毛片武则天| 夜鲁夜鲁夜鲁视频在线播放| 欧美日韩国产首页| 无码成人精品区在线观看| 免费看av成人| 欧美精品少妇videofree| 800av免费在线观看| 精品一区二区av| 久久精品日产第一区二区三区精品版 | 成人羞羞在线观看网站| 欧美精品生活片| 久久久黄色大片| 国产丶欧美丶日本不卡视频| 欧美极品一区| 人人澡人人添人人爽一区二区| 午夜精品成人在线视频| 欧美激情第3页| 另类图片第一页| 久久久精品一区二区| 日韩特级黄色片| 国产一区二区精品在线观看| 日本一区二区三区视频在线播放| 午夜伦理在线视频| 欧美日韩一本到| 黄色在线观看av| 国产精品v日韩精品v欧美精品网站| 国产精品久久久精品| 亚洲AV无码精品色毛片浪潮| 中文字幕精品在线不卡| 极品美女扒开粉嫩小泬| 日本亚州欧洲精品不卡| 最近日韩中文字幕中文| 免费观看成人毛片| 成人精品视频一区二区三区尤物| 中国一区二区三区| 成人在线免费| 亚洲日韩中文字幕| 日韩乱码在线观看| 国产盗摄视频一区二区三区| 99精品视频网站| 国产黄色一区| 国产一区二区三区欧美| 日韩特级黄色片| 91网址在线看| 伊人成色综合网| 麻豆一区一区三区四区| 隔壁老王国产在线精品| 性欧美8khd高清极品| 亚洲免费在线播放| 亚洲一区二区在线视频观看| 欧洲美女亚洲激情| av资源在线| 欧美精品一区二区在线观看| 日本妇女毛茸茸| 国产精品综合二区| 国产高清免费在线| 美女久久久久久| 日韩中文字幕久久| 亚洲天堂视频在线| 国产精品福利一区| 亚洲精品成人在线播放| 久久美女视频| 国产在线观看一区二区三区| 丝袜美腿美女被狂躁在线观看| 色狠狠av一区二区三区| 亚洲码无人客一区二区三区| 亚洲一区国产一区| 精选一区二区三区四区五区| 啊啊啊久久久| 亚洲免费电影一区| 波多野结衣毛片| 中文字幕av不卡| 黄色三级视频在线| 91综合视频| 91亚洲精品在线| 青青草原av在线| 亚洲国产精品美女| 欧美一区二区三区不卡视频| 国产精品污www在线观看| 亚洲免费999| 午夜视频一区| 国产丝袜不卡| 亚洲成人av观看| 久久偷看各类女兵18女厕嘘嘘| 国产精品综合在线| 亚洲一区在线电影| 91精品人妻一区二区| 日韩主播视频在线| 国产成年人在线观看| 97青娱国产盛宴精品视频| 69久久夜色精品国产7777| 国产精品久久久久久久龚玥菲| 欧美日韩免费一区二区三区| 激情五月少妇a| 91日韩在线专区| 青青草久久伊人| 欧美日韩国产免费观看| 欧美久久久久久久| 精品中文字幕一区二区三区| 午夜精品一区二区三区视频免费看| 你懂得在线网址| 日韩一区二区免费在线观看| 97人人澡人人爽人人模亚洲| 中文字幕乱码亚洲精品一区| 特级特黄刘亦菲aaa级| 中文字幕视频一区二区| av高清不卡在线| 黄色在线视频网| 国产综合视频| 日韩欧美一区二区三区四区| 91成人在线精品视频| 国产精品电影网站| 黄色羞羞视频在线观看| 在线观看国产精品淫| 免费观看a视频| 欧美人狂配大交3d怪物一区| 国产黄色片免费看| 亚洲精品自拍动漫在线| 成人精品999| 不卡视频在线观看| 国产毛片久久久久久| 日韩专区一卡二卡| 黄色片网址在线观看| 国产精品久久久乱弄 | 亚洲资源在线观看| 国产中年熟女高潮大集合| 国产不卡在线视频| 欧美一级视频在线| 久久天堂成人| 国自产拍偷拍精品啪啪一区二区| 亚洲成av人片乱码色午夜| 欧美日韩最好看的视频| 一本色道69色精品综合久久| 国产欧亚日韩视频| 影视一区二区三区| 青青久久av北条麻妃黑人| 国产在线xxx| 欧美理论电影在线播放| 在线免费看黄网站| 国产一区二区三区丝袜| 婷婷五月综合激情| 精品国产污污免费网站入口| www.xxxx国产| 欧美大片一区二区三区| 国产精品一区二区人人爽 | 亚洲高清精品视频| 这里只有精品电影| 一区二区三区免费在线| 欧美日韩国产综合久久| 中文字幕一区二区在线视频| 日韩欧美中文字幕在线播放| 懂色av.com| 亚洲午夜精品一区二区三区他趣| 国产成人av免费在线观看| 国产精品理论片在线观看| 免费91在线观看| 中文字幕在线一区二区三区| 亚洲综合第一区| 国产精品麻豆一区二区| 五月天婷婷丁香网| 久久精品色综合| 国产精品一区二区av日韩在线| 精品国内亚洲在观看18黄| 五月婷婷在线观看| 精品国产一区二区在线| 欧美13一16娇小xxxx| 在线中文字幕日韩| 北条麻妃在线| 色偷偷综合社区| 网友自拍视频在线| 欧美乱妇40p| 999福利在线视频| 97超级碰碰碰| 人在线成免费视频| 国产精品久久久久久久久久东京| 免费高清视频在线一区| 成人av.网址在线网站| 精品中文字幕一区二区三区四区| 粉嫩精品一区二区三区在线观看| 成人性生交大片免费看中文视频 | 一区二区三区四区精品视频| 99国产盗摄| 日韩福利视频一区| 亚洲欧洲精品一区二区三区波多野1战4 | 日韩成人精品视频| 午夜精品久久久久久久99热影院| 国产精品一色哟哟哟| 中文文字幕文字幕高清| 国产午夜精品福利| 日本一级片免费| 亚洲一卡二卡三卡四卡无卡久久| 国产午夜免费福利| 欧美日韩高清一区二区| 亚洲国产精品久久久久爰性色| 亚洲精品v欧美精品v日韩精品| 国产精品秘入口| 久久99国产精品自在自在app| 亚洲人成在线网站| 成人a免费视频| 日韩一级电影| 免费观看国产视频在线| 99热免费精品在线观看| 在线观看岛国av| gogo大胆日本视频一区| 妖精视频在线观看免费| 亚洲国产精品一区二区久久| 这里只有精品999| 欧美精品一区二区高清在线观看| 成全电影播放在线观看国语| 欧美日韩999| 日韩一区二区三区在线免费观看| 91国产丝袜在线放| 欧美女优在线视频| www.av91| 精品一区二区三区的国产在线播放| 韩国三级hd两男一女| 中文欧美字幕免费| 日韩成人av毛片| 777xxx欧美| 国产黄色片在线观看| 高清在线视频日韩欧美| 国产乱码精品一区二区三区亚洲人| 欧美黑人xxxxx| 在线成人国产| 两性午夜免费视频| 国产精品久久久久7777按摩 | 欧美日韩另类国产亚洲欧美一级| 亚州男人的天堂| 欧美成人三级视频网站| 成人国产一区| 久久久久久久久久久久久久一区| 欧美a级片网站| 777一区二区| 中文久久乱码一区二区| 亚洲成人第一网站| 久久亚洲捆绑美女| 国产黄色特级片| 成人深夜视频在线观看| 我要看黄色一级片| 精品视频99| 麻豆国产精品va在线观看不卡| 夜鲁夜鲁夜鲁视频在线播放| 国产乱人伦精品一区二区| 欧美在线日韩| 天天做天天干天天操| 国产精品视频九色porn| 国产免费a视频| 亚洲欧美在线看| 国模冰冰炮一区二区| 精品亚洲欧美日韩| 国产精品毛片| 欧美成人三级伦在线观看| 亚洲成人综合网站| 免费a视频在线观看| 久久免费视频网| 国产成人tv| 日本在线xxx| a美女胸又www黄视频久久| 尤物视频在线观看国产| 亚洲成年人在线| 丁香花在线电影小说观看| 风间由美一区二区三区| 亚洲精品1234| 亚洲av无码一区二区三区观看| 精品电影在线观看| 三级在线观看网站| 国产91精品青草社区| 久久不见久久见中文字幕免费| 亚洲人成无码www久久久| 久久只精品国产| 精品国产www| www.亚洲人.com| 亚洲一区 二区| 国产最新免费视频| 久久精品欧美一区二区三区不卡 | 欧美黑人疯狂性受xxxxx野外| 精品国产91亚洲一区二区三区www 精品国产_亚洲人成在线 | 久久天天东北熟女毛茸茸| 国产精品一卡二| 日韩精品一卡二卡| 亚洲天堂免费在线| 色狠狠一区二区三区| 日韩精品第1页| a美女胸又www黄视频久久| 区一区二在线观看| 中文字幕日韩av电影| 精品视频91| 丰满爆乳一区二区三区| 国产午夜亚洲精品羞羞网站| 91成品人影院| 国语对白做受69| 成人羞羞网站入口| 人妻互换一二三区激情视频| 欧美色视频日本版| 五月香视频在线观看| 国产精品视频免费一区| 首页国产欧美久久| 成人免费毛片东京热| 日韩精品高清在线| 96视频在线观看欧美| 国产精品网站免费| 国产精品久久精品日日| 免费a视频在线观看| 国产精品情侣自拍| 999亚洲国产精| 中文字幕91视频| 亚洲精品美女久久久| 成人黄色91| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 黄色av日韩| 久久久久久久网站| 精品入口麻豆88视频| 国产精品99久久免费黑人人妻|