九九99在线视频-九九99香蕉在线视频美国毛片-九九99热久久精品在线9-九九99热-九九99久久精品在免费线bt-九九99久久


曙海教育集團論壇3G手機技術專區Android應用開發 → JNI技術與Android應用


  共有8820人關注過本帖樹形打印

主題:JNI技術與Android應用

美女呀,離線,留言給我吧!
wangxinxin
  1樓 個性首頁 | 博客 | 信息 | 搜索 | 郵箱 | 主頁 | UC


加好友 發短信
等級:青蜂俠 帖子:1393 積分:14038 威望:0 精華:0 注冊:2010-11-12 11:08:23
JNI技術與Android應用  發帖心情 Post By:2010-12-3 11:15:40

1. 什么是 JNI
    JNI是Java Native Interface的縮寫。從Java 1.1開始,JNI標準成為java平臺的一部分,它允許Java和其他語言進行交互。JNI一開始為C和C++而設計的,但是它并不妨礙你使用其他語 言,只要調用約定受支持就可以了。使用java與本地已編譯的代碼交互,通常會喪失平臺可移植性。但是,有些情況下這樣做是可以接受的,甚至是必須的,比 如,使用一些舊的庫,與硬件、操作系統進行交互,或者為了提高程序的性能。關于 JNI 的用法很簡單,有點像 java 里的 reflect 的工作機制,有興趣的朋友可以參看Java 本地接口規范 http://linux.computersci.net/art ... pec/jniTOC.doc.html
2.  Jni程序開發的一般操作步驟如下:
(1) 編寫帶有native聲明的方法的java類
(2) 使用javac 或 IDE(JBuilder,eclipse等)編譯所編寫的java類
(3) 使用javah -jni java類名生成擴展名為h的頭文件
(4) 使用C++ 實現本地方法,對調用簽名可用 javap –s –p [類全名] 查看(開發 C++ 動態鏈接庫本例是用的 VC6)
注意要從 JDK下面的 include 文件夾中把 jni.h和 jni_md.h 兩個文件 copy 到你的 VC 工程里
(5) 在 Java 中 load 動態鏈接庫文件,調用 native 方法.
或者說將項目依賴的所有原生庫和資源加入到java項目的java.library.path,生成java程序
3. 開發實例
(1). 編寫 Java 類:
package org.jm.jni;
import java.util.ArrayList;
public class BackgroundProcess {
static {
System.loadLibrary("org_jm_jni_BackgroundProcess");
}
// 三個 native 方法和一個 int 變量
public native boolean checkValid();
public native void processData(BackgroundProcess bg);
public native void processGarbage(String[] bg);
public int num = 5;
// C++ 中可以調用的方法
public String backProcess(ArrayList<String> p) {
System.out.println("這是 Java 里的方法,在 C++ 中調用。");
System.out.println("這個方法,是 java 中 native checkValid 方法調用的。");
return "look up process ->" + p;
}
public static void main(String[] args) {
String[] array = new String[4];
array[0] = "jack";
array[1] = "maggie";
array[2] = "rocket";
array[3] = "tom";
BackgroundProcess bgP = new BackgroundProcess();
// 調用 C++ DLL 中定義的方法。
bgP.checkValid();// 該方法回調 java 中的 backProcess 方法,即java::checkValid->c++::checkValid->java::backProcess
bgP.processData(bgP);
bgP.processGarbage(array);
// C++ DLL 改變了該變量
System.out.println("number 現在的值是: " + bgP.num);
}
}
2. 生成 C++ 的頭文件(javah 命令生成,用javap –s –p [類全名] 命令查看java 方法簽名)
/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class org_jm_jni_BackgroundProcess */
#ifndef _Included_org_jm_jni_BackgroundProcess
#define _Included_org_jm_jni_BackgroundProcess
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: org_jm_jni_BackgroundProcess
* Method: checkValid
* Signature: ()Z
*/
JNIEXPORT jboolean JNICALL Java_org_jm_jni_BackgroundProcess_checkValid
(JNIEnv *, jobject);
/*
* Class: org_jm_jni_BackgroundProcess
* Method: processData
* Signature: (Lorg/jm/jni/BackgroundProcess;)V
*/
JNIEXPORT void JNICALL Java_org_jm_jni_BackgroundProcess_processData
(JNIEnv *, jobject, jobject);
/*
* Class: org_jm_jni_BackgroundProcess
* Method: processGarbage
* Signature: ([Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_org_jm_jni_BackgroundProcess_processGarbage
(JNIEnv *, jobject, jobjectArray);
#ifdef __cplusplus
}
#endif
#endif
    這里JNIEXPORT和JNICALL都是JNI的關鍵字,表示此函數是要被JNI調用的。例如jint是以JNI為中介使JAVA的int類型與本地 的int溝通的一種類型,我們可以視而不見,就當做int使用。函數的名稱是JAVA_再加上java程序的package路徑再加函數名組成的。參數 中,我們也只需要關心在JAVA程序中存在的參數,至于JNIEnv*和jclass我們一般沒有必要去碰它。
3. 開發 C++ DLL 的原文件 (記得要加入 jni.h 和 jni_md.h 兩個文件)
發布 DLL 文件, 我是配置了 path 環境變量
#include "org_jm_jni_BackgroundProcess.h"
#include <iostream.h>
#include <windows.h>
#include "string.h"
char* jstringTostring(JNIEnv* env, jstring jstr)
{
char* rtn = NULL;
jclass clsstring = env->FindClass("java/lang/String");
jstring strencode = env->NewStringUTF("utf-8");
jmethodID mid = env->GetMethodID(clsstring, "getBytes", "(Ljava/lang/String;)[B");
jbyteArray barr= (jbyteArray)env->CallObjectMethod(jstr, mid, strencode);
jsize alen = env->GetArrayLength(barr);
jbyte* ba = env->GetByteArrayElements(barr, JNI_FALSE);
if (alen > 0)
{
rtn = (char*)malloc(alen + 1);
memcpy(rtn, ba, alen);
rtn[alen] = 0;
}
env->ReleaseByteArrayElements(barr, ba, 0);
return rtn;
}
//char* to jstring
jstring stoJstring(JNIEnv* env, const char* pat)
{
jclass strClass = env->FindClass("Ljava/lang/String;");
jmethodID ctorID = env->GetMethodID(strClass, "<init>", "([BLjava/lang/String;)V");
jbyteArray bytes = env->NewByteArray(strlen(pat));
env->SetByteArrayRegion(bytes, 0, strlen(pat), (jbyte*)pat);
jstring encoding = env->NewStringUTF("utf-8");
return (jstring)env->NewObject(strClass, ctorID, bytes, encoding);
}
/*
* Class: org_jm_jni_BackgroundProcess
* Method: checkValid
* Signature: ()Z
*/
JNIEXPORT jboolean JNICALL Java_org_jm_jni_BackgroundProcess_checkValid
(JNIEnv *env, jobject obj){
jclass bgpClass=env->GetObjectClass(obj);
jmethodID methodId=env->GetMethodID(bgpClass,"backProcess","(Ljava/util/ArrayList;)Ljava/lang/String;");
jobject str=env->CallObjectMethod(obj,methodId,NULL);
jfieldID fieldId=env->GetFieldID(bgpClass,"num","I");
jint number=env->GetIntField(obj,fieldId);
cout << "number 值是: " <<number << endl;
env->SetIntField(obj,fieldId,100L);
return 1;
}
/*
* Class: org_jm_jni_BackgroundProcess
* Method: processData
* Signature: (Lorg/jm/jni/BackgroundProcess;)V
*/
JNIEXPORT void JNICALL Java_org_jm_jni_BackgroundProcess_processData
(JNIEnv *env, jobject, jobject){
cout<< "this function do nothing " << endl;
}
/*
* Class: org_jm_jni_BackgroundProcess
* Method: processGarbage
* Signature: ([Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_org_jm_jni_BackgroundProcess_processGarbage
(JNIEnv *env, jobject, jobjectArray array){
jint size=env->GetArrayLength(array);
cout << "數組大小是: " << size << endl;
jstring tempObj=NULL;
char *pszSTR1 = NULL;
for(int i=0;i<size;i++){
cout << "current value is : " << i << endl;
tempObj=(jstring)env->GetObjectArrayElement(array,i);
const char * chars =env->GetStringUTFChars(tempObj, 0);
cout << chars << endl;
}
}
在此,針對andorid中c++與java中的方法互調,引用參考說明如下:
(1).andorid CPP調用java函數和訪問其成員:原理 => CPP代碼找到java的那個class里面的函數的入口地址,然后在CPP代碼中調用java代碼
步驟1) 用FindClass()函數找到該java類(如android.os.Binder)的實例對象的引用:
  jclass clazz = env->FindClass(kBinderPathName) = env->FindClass("android.os.Binder")
步驟2) 用GetFieldID()函數獲取到要訪問的域(field: 實際上就是該java class中的某個成員變量的名字)的ID:
  gBinderOffsets.mObject = env->GetFieldID(clazz, "mObject", "I") // mObject為java class "Binder"里的一個成員變量
  -> 注意,這里將要訪問的那個java對象的成員mObject的ID保存到了全局變量gBinderOffsets.mObject中,這樣做的前提和優點如下:
  前提: android里面,每個java進程中只允許有一個java虛擬機(sun公司原始的java架構中,一個進程中可以有多個java虛擬機)
  優點: 除了第一次,以后每次要訪問該java對象的成員mObject就非常快了(不用再去FindClass()和GetFieldID())
步驟3) 用GetMethodID()函數獲取到要訪問的方法(Method: 實際上就是該java class中的某個成員函數的名字)的ID:
  gBinderOffsets.mExecTransact = env->GetMethodID(clazz, "execTransact", "(IIII)Z") // execTransact為java class "Binder"里的一個成員函數
步驟4) 用類似于GetIntField()的函數獲取到該java對象的那個域(即成員)的值:
  IBinder* target = (IBinder*)env->GetIntField(obj,gBinderProxyOffsets.mObject)
     // 獲取java android.os.Binder類型對象里面的成員mObject的值
步驟5) 用類似于CallBooleanMethod()的函數調用到該java對象的那個成員函數:
  jboolean res = env->CallBooleanMethod(mObject, gBinderOffsets.mExecTransact, code, (int32_t)&data, (int32_t)reply, flags)
(2).android java調用CPP函數: 原理 => 相當于java的那個class里面有的函數使用CPP代碼來實現了
1)通過結構JNINativeMethod描述java代碼調用函數和CPP函數的對應關系:
  typedef struct {
  const char* name; // java代碼調用CPP函數的入口
  const char* signature; // CPP函數的返回值
  void* fnPtr; // CPP的函數名
  } JNINativeMethod;
  => 例如: java代碼通過IBinder.transact()來調用CPP的函數android_os_BinderProxy_transact()
  {"transact", "(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z", (void*)android_os_BinderProxy_transact},
2)將CPP函數注冊到java的某個class中: 使用函數AndroidRuntime::registerNativeMethods()來注冊
  => 這之后,java代碼就可以調用CPP函數了
3)java代碼調用CPP函數方法:
  IBinder.transact()
總結其原理:C/C++要調用JAVA程序,必須先加載JAVA虛擬機,由JAVA虛擬機解釋執行class文件。為了初始化JAVA虛擬機,JNI提供了一系列的接口函數,通過這些函數方便地加載虛擬機到內存中。
1). 加載虛擬機:
函數:jint JNI_CreateJavaVM(JavaVM **pvm, void **penv, void args);
參數說明:JavaVM **pvm JAVA虛擬機指針,第二個參數JNIEnv *env是貫穿整個調用過程的一個參數,因為后面的所有函數都需要這個參數,需注意的是第三個參數,在jdk1.1與1.2版本有些不同,在JDK 1.1中第三個參數總是指向一個結構JDK1_ 1InitArgs,這個結構無法完全在所有版本的虛擬機中進行無縫移植。所以為了保證可移植性,建議使用jdk1.2的方法加載虛擬機。
2). 獲取指定對象的類定義:
有兩種方法可獲得類定義,一是在已知類名的情況使用FindClass來獲取;二是通過對象直接得到類定義GetObjectClass
3). 獲取要調用的方法:
獲得非靜態方法:
jmethodID (JNICALL *GetMethodID)(JNIEnv *env, jclass clazz, const char *name, const char *sig);
獲得靜態方法:
jmethodID (JNICALL *GetStaticMethodID)(JNIEnv *env, jclass class, const char *name, const char *sig);
參數說明:JNIEnv *env初始化是得到的JNI環境;jclass class前面已獲取到的類定義;const char *name方法名;const char *sig方法參數定義
4). 調用JAVA類方法:
函數:CallObjectMethod(JNIEnv *env, jobject obj, jmethodID mid);
函數:CallStaticObjectMethod((JNIEnv *env, jobject obj, jmethodID mid);
5). 獲得類屬性的定義:
jfieldID (JNICALL *GetFieldID) (JNIEnv *env, jclass clazz, const char *name, const char *sig);
靜態屬性:
jfieldID (JNICALL *GetStaticFieldID) (JNIEnv *env, jclass clazz, const char *name, const char *sig);
6). 數組處理:
要創建數組首先要知道類型及長度,JNI提供了一系列的數組類型及操作的函數如:
NewIntArray、NewLongArray、NewShortArray、NewFloatArray、NewDoubleArray、 NewBooleanArray、NewStringUTF、NewCharArray、NewByteArray、NewString,訪問通過 GetBooleanArrayElements、GetIntArrayElements等函數。
7). 異常:
由于調用了Java的方法,會產生異常。這些異常在C/C++中無法通過本身的異常處理機制來捕捉到,但可以通過JNI一些函數來獲取Java中拋出的異常信息。
8).多線程調用
我們知道JAVA是非常消耗內存的,我們希望在多線程中能共享一個JVM虛擬機,真正消耗大量系統資源的是JAVA虛擬機jvm而不是虛擬機環境 env,jvm是允許多個線程訪問的,但是虛擬機環境只能被創建它本身的線程所訪問,而且每個線程必須創建自己的虛擬機環境env。JNI提供了兩個函 數:AttachCurrentThread和DetachCurrentThread。便于子線程創建自己的虛擬機環境。
4.  java與dll交互的技術
    目前java與dll交互的技術主要有3種:jni,jawin和jacob。Jni(Java Native Interface)是sun提供的java與系統中的原生方法交互的技術(在windows\linux系統中,實現java與native method互調)。目前只能由c/c++實現。后兩個都是sourceforge上的開源項目,同時也都是基于jni技術的windows系統上的一個 應用庫。Jacob(Java-Com Bridge)提供了java程序調用microsoft的com對象中的方法的能力。而除了com對象外,jawin(Java/Win32 integration project)還可以win32-dll動態鏈接庫中的方法。就功能而言:jni >> jawin>jacob,其大致的結構如下圖:
圖片點擊可在新窗口打開查看
就易用性而言,正好相反:jacob>jawin>>jni。
    Jvm封裝了各種操作系統實際的差異性的同時,提供了jni技術,使得開發者可以通過java程序(代碼)調用到操作系統相關的技術實現的庫函數,從而與 其他技術和系統交互,使用其他技術實現的系統的功能;同時其他技術和系統也可以通過jni提供的相應原生接口開調用java應用系統內部實現的功能。在 windows系統上,一般可執行的應用程序都是基于native的PE結構,windows上的jvm也是基于native結構實現的。Java應用體 系都是構建于jvm之上。
圖片點擊可在新窗口打開查看
    Jni對于應用本身來說,可以看做一個代理模式。對于開發者來說,需要使用c/c++來實現一個代理程序(jni程序)來實際操作目標原生函數,java程序中則是jvm通過加載并調用此jni程序來間接地調用目標原生函數。
圖片點擊可在新窗口打開查看
5. Android中jni的現有應用
(1).從如何載入.so檔案談起
由于Android的應用層的類都是以Java寫的,這些Java類編譯為Dex型式的Bytecode之后,必須靠Dalvik虛擬機(VM: Virtual Machine)來執行。VM在Android平臺里,扮演很重要的角色。此外,在執行Java類的過程中,如果Java類需要與C組件溝通時,VM就會 去載入C組件,然后讓Java的函數順利地調用到C組件的函數。此時,VM扮演著橋梁的角色,讓Java與C組件能通過標準的JNI介面而相互溝通。應用 層的Java類是在虛擬機(VM: Vitual Machine)上執行的,而C件不是在VM上執行,那么Java程式又如何要求VM去載入(Load)所指定的C組件呢? 可使用下述指令:
System.loadLibrary(*.so的檔案名);
例如,Android框架里所提供的MediaPlayer.java類,含指令:
public class MediaPlayer{
static {
System.loadLibrary("media_jni");
}
}
  這要求VM去載入Android的/system/lib/libmedia_jni.so檔案。載入*.so之后,Java類與*.so檔案就匯合起來,一起執行了。

支持(0中立(0反對(0單帖管理 | 引用 | 回復 回到頂部

返回版面帖子列表

JNI技術與Android應用








簽名
主站蜘蛛池模板: 夜夜爽www | 91九色麻豆 | 国产调教打屁股xxxx网站 | 91久久综合亚洲鲁鲁五月天 | 亚洲精品国产精品国自产 | 少妇激情一区二区三区视频小说 | 污免费视频 | 欧美日韩一区二区三区69堂 | 黑人巨大精品欧美一区二区 | 看免费的毛片 | 久久亚洲天堂网 | 国产精品9x捆绑调教视频 | www久久九| 三级黄视频 | 搡少妇在线视频中文字幕 | 少妇的肉体aa片免费 | 国产av一区二区三区传媒 | 91成人免费 | 新搬来的女邻居麻豆av评分 | 伊人中文字幕无码专区 | 人妻大战黑人白浆狂泄 | 手机午夜视频 | 久久久青草婷婷精品综合日韩 | 精品无码久久久久久国产 | 亚洲午夜剧场 | 最新国产精品精品视频 | 夜夜操导航 | 男人的天堂成人 | 久久深夜 | 国产全肉乱妇杂乱视频男男 | 国产精品xxx大片免费观看 | 久久久亚洲国产美女国产盗摄 | 顶级少妇mm131美女艺术 | 香港三级日本三级a视频 | 日韩黄色片免费看 | 少妇裸体长淫交视频免费观看 | 四虎永久在线精品免费播放 | 超碰99在线 | 中文久久乱码一区二区 | 性欧美video另类hdbbw | 强奷乱码中文字幕熟女一 | 视频一区二区在线 | 日本一区二区在线免费观看 | 国产精品视频一二区 | 欧美精品国产一区二区 | 成人av动漫 | 国模欢欢炮交啪啪150 | 国产亚洲欧美精品久久久久久 | 国产精品1000 | 亚洲色婷婷久久精品av蜜桃久久 | 米奇av| 国产精品一区二区在线观看 | 国产成人久久精品二区三区 | 国产精品欧美一区二区 | 综合激情久久 | 熟女肥臀白浆大屁股一区二区 | 麻豆免费视频 | 午夜精品网站 | 一区二区三区综合 | 清纯唯美一区二区三区 | 狠狠色综合7777久夜色撩人ⅰ | 国产三级国产精品国产普男人 | 在线看日韩| 国产精品一区二区久久精品爱微奶 | 天堂中文8资源在线8 | 久久影院午夜 | 男女做视频md806xyz | 就爱操av| 久久一本久综合久久爱 | 超薄肉色丝袜一区二区 | 国产成人中文字幕 | 国产精品久久久国产盗摄蜜臀 | 欧美疯狂xxxxxbbbbb | 天天操天天透 | av中文字幕免费观看 | 久久精品国产亚洲a | 国产娇小hdxxxx乱 | 亚洲黄色片 | 91亚洲国产成人精品性色 | 成人性生活视频在线播放 | 能免费看黄色的网站 | 一级黄色国产片 | 欧美黄绝喷潮片 | 欧美日韩不卡合集视频 | 亚洲精品传媒 | 国产成人精品综合久久久 | 欧美三级在线 | 国产成人精品国内自产拍免费看 | 欧美精品1区2区3区 欧美精品91爱爱 | 四虎一区二区 | 911看片| 亚洲国产第一 | 一级片视频网站 | 香蕉影院在线观看 | 国产xxx69麻豆国语对白 | 欧美日韩在线观看视频 | 国产精品亚洲一区二区在线观看 | 亚洲香蕉av在线一区二区三区 | 人人澡人人透人人爽 | 6080一级片 | 欧美性插插 | av无码人妻一区二区三区牛牛 | 三级裸体视频 | 三级三级久久三级久久18 | 丰满少妇被猛男猛烈进入久久 | 日韩精品大片 | 五月天av影院 | 久久亚洲国产成人影院 | 爽爽精品dvd蜜桃成熟时电影院 | 日产电影一区二区三区 | 98精品视频 | 亚洲精品久久久久中文字幕m男 | 最新国产在线 | 国产精品久久久久永久免费 | 国产一区二区三区欧美 | 久久久精品2019免费观看 | 国产成人精品日本亚洲专区61 | 久久免费看视频 | 波多野结衣在线视频免费观看 | 免费a级毛片大学生免费观看 | 免费看a级黄色片 | 欧美精品人人做人人爱视频 | 久久久999精品 | 国产成人精品日本亚洲直播 | 国产免费视频在线 | 99久久久国产精品免费消防器 | 久久精品中文字幕免费 | 久久国产精品久久久久久电车 | 成人免费看片98 | 粗大猛烈进出高潮视频 | 亚洲欧洲精品成人久久奇米网 | 羞羞国产一区二区三区四区 | 欧美真人做爰在线观看 | 天天躁日日躁狠狠躁欧美老牛 | 99艹| 老司机黄色影院 | 国产艳情片| 亚洲人成网线在线播放 | 亚洲欧洲视频在线 | 欧美精品一区二区三区一线天视频 | 91成人短视频免费版 | 午夜影院一区二区 | 成人无码视频在线观看网址 | 国产精品久久久久久久午夜片 | 黑人巨大99vs小早川怜子 | 国产精品内射视频免费 | 日本少妇激情25p | 日本在线视频www | 国产精品久久久久野外 | 免费一区二区 | 少妇一边呻吟一边说使劲视频 | 精品国产一区二区三区av 性色 | 免费麻豆国产一区二区三区四区 | 国产精品久久久久久 | 精品熟人一区二区三区四区 | 国产女主播福利 | 亚洲男人天堂网站 | 99国产免费| 国产手机在线 | 欧美激情视频在线 | 香蕉久热| 国产美女激情 | 日韩欧美一区二区三区在线 | 国产涩涩视频在线观看 | 久久精品一 | 日本最新偷拍小便视频 | 欧美一级黄色大片 | gv手机在线观看 | 亚洲中文字幕在线观看 | 国产h自拍| 色网址在线 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 精品国产乱码久久久久久图片 | 97久久精品人人做人人爽 | 国产极品视频 | 中文字幕亚洲综合久久青草 | 国产理论av | 午夜国产在线视频 | 欧美模特做爰xxxⅹxxx | 日产韩产麻豆h | 国产91黄色 | 国产精品一区二区免费 | 亚洲视频手机在线观看 | 国产精品久久久久久久久久尿 | 黄色一节片 | 亚洲成av人在线观看网站 | 国产普通话bbwbbwbbw | 日日噜噜噜噜人人爽亚洲精品 | 亚洲国产精品一 | 四虎4hu| 欧美区一区二 | 玩弄少妇肉体到高潮动态图 | 国产超级va在线观看视频 | 哭悲在线观看免费高清恐怖片段 | 欧美性性性性性色大片免费的 | 国产剧情久久 | 操久久久 | 毛片网站在线观看视频 | 国产亚洲成av人片在线观看下载 | 日本在线免费观看视频 | 亚洲国产午夜精品理论片在线播放 | 国内成人自拍 | 中国少妇内射xxxhd免费 | 国产综合区 | 亚洲美女偷拍 | 色婷婷五月综合亚洲小说 | 日韩资源 | 日产欧产美韩系列在线播放 | 日韩在线无 | 久久精品99久久久久久 | 国产黄色三级网站 | 免费观看午夜视频 | 日本五月天婷久久网站 | www在线观看免费视频 | 日韩精品视频在线播放 | 国产一区二区三区无码免费 | 国产女主播视频一区二区三区 | 国产成人在线一区二区 | 日本激情吻胸吃奶呻吟视频 | 蜜桃av噜噜一区二区三区 | 日本精品久久久久久久 | 少妇高潮流白浆在线观看 | 国产超碰人人爽人人做人人爱 | 手机成人av在线 | 亚洲 欧美 综合 另类 中字 | 全部免费的毛片在线看 | 国产一区二区亚洲精品 | 久久久久有精品国产麻豆 | 色综合久久久无码中文字幕波多 | 欧美精品1 | 正在播放酒店约少妇高潮 | 五月丁香六月综合缴情在线 | 日欧视频 | 国产亚洲99天堂一区 | 波多野结衣精品一区二区三区 | 丁香婷婷激情 | 亚洲国产成人005 | 国产福利萌白酱在线观看视频 | 国产精品毛片大码女人 | 欧美成人免费在线观看 | 国产精品久久久久久久久久久久久 | 不卡三区| 国产成人手机高清在线观看网站 | 国产精品久久久免费视频 | 亚洲在线成人 | 六个黑人玩一个中国少妇视频 | 中国一级片在线观看 | 午夜性刺激免费看视频 | 日本欧美高清视频 | 黑人玩弄人妻中文在线 | 人妻激情偷乱视频一区二区三区 | 国产精品免费一区二区区 | 美女av一区二区 | 97超碰资源站| 亚洲另类中文字幕 | 亚洲黄色一级大片 | 成人黄色在线视频 | 伊人狠狠色丁香婷婷综合 | 欧美亚洲系列 | 特级西西444www大胆免费看 | 狠操av| 加勒比综合 | 久久精品无码一区二区三区免费 | 华人少妇被黑人粗大的猛烈进 | 国产乱人乱精一区二视频 | 香蕉视频网页 | www国产精| 日本a级在线 | 国产女人乱人伦精品一区二区 | 久久久久久久久91 | 日本黄色录相 | 国产精品夜夜夜爽张柏芝 | 99国产精品久久久久久久 | 亚洲一区二区蜜桃 | 蜜桃av网站| 91精品一久久香蕉国产线观看新通道 | 国产精品成人一区二区三区 | 国产91精清纯白嫩高中在线观看 | 欧美黄色影院 | 久久久亚洲裙底偷窥综合 | 日韩欧美第一页 | 欧美天天影院 | 精品国产区 | 亚洲另类中文字幕 | 美女裸体视频永久免费 | 欧美在线一级 | 国精产品一品二品国在线 | 国产a级免费视频 | 国产精品国产三级国产aⅴ无密码 | 女人浣肠av大片 | 中文字幕精品三区 | 国产69精品麻豆 | 四虎影视国产精品免费久久 | 欧美成人资源 | 捏胸吃奶吻胸免费视频大软件 | 国产高清网站 | 成视频年人黄网站免费视频 | 污导航在线观看 | va婷婷在线免费观看 | 欧美午夜一区二区三区 | 成人在线免费视频观看 | 91小宝寻花一区二区三区 | 视频在线一区二区三区 | 亚洲成人精品一区 | 人妻中文字幕在线网站 | 亚洲国产欧美不卡在线观看 | 中文字幕一区二区视频 | 日本无遮羞肉体啪啪大全 | 日韩成人在线视频 | 欧美日韩3p| 亚洲精品字幕在线观看 | 国产午夜无码精品免费看 | 国产又大又粗又猛又爽的视频 | 日本免费一区二区视频 | 影音先锋人妻啪啪av资源网站 | 偷拍区另类欧美激情日韩91 | 日本欧美大码aⅴ在线播放 中文人妻无码一区二区三区在线 | 波多野结衣在线播放 | 国产日产亚洲精品 | 一区二区三区四区五区在线视频 | 一区二区中文字幕在线观看 | 免费高清a级南片在线观看 免费高清成人 | 夜夜导航 | 91看片在线| 大陆女明星乱淫合集 | 视频一区 视频二区 视频三区 视频四区 国产 | 人妻夜夜爽天天爽三区 | www毛片com| 成人18视频免费69 | 三区四区| 暴力强奷在线播放无码 | 91视频xxx| a级高清毛片 | 91美女图片黄在线观看 | 日韩高清网站 | 44382亚洲最大成人网 | 永久91嫩草亚洲精品人人 | 国产日韩视频在线 | 中文字幕大全 | 利智三级露全乳 | 中文毛片无遮挡高潮免费 | 深夜毛片 | 天天摸天天草 | 三上悠亚精品一区二区 | 午夜久久网站 | 亚洲国产精品无码专区 | 亚洲国产成人精品激情在线 | 精品日本一区二区三区在线观看 | 亚洲色图日韩 | 中文字幕一级片 | 免费观看a视频 | 国产粉嫩呻吟一区二区三区 | 中文字幕日韩精品无码内射 | 亚洲美女午夜一区二区亚洲精品 | 日本狠狠操 | 久久久精品人妻一区二区三区蜜桃 | 超碰在线中文字幕 | 亚洲日韩国产精品第一页一区 | 欧美无人区码suv | 国产三级精品三级在线观看 | 日本一区二区三区日本免费 | 亚洲成人免费在线观看 | 色www视频永久免费 国产欧美日韩专区发布 | 综合久久国产九一剧情麻豆 | 欧美在线观看你懂的 | 拍摄av现场失控高潮数次 | 91久久国产综合久久91 | 波多野结衣不卡 | 精品无码专区久久久水蜜桃 | 骚色综合| 国产亚洲综合在线 | 91精品日韩| 91av小视频| 26uuu亚洲国产精品 | 7777精品久久久大香线蕉 | 校园伸入裙底揉捏1v1h | 裸体丰满少妇做受久久99精品 | 亚洲 欧美 中文 日韩a v一区 | 男女性爽大片视频 | 凹凸精品熟女在线观看 | 中文字幕亚洲综合久久菠萝蜜 | 超薄肉色丝袜一二三四区 | 特一级黄色片 | 亚洲欧美日韩愉拍自拍 | 国产视频九色蝌蚪 | 亚洲青青草 | www.第四色| 欧美三级一区二区 | 国产精品高潮呻吟久 | 亚洲v欧美v日韩v国产v | 日韩av伦理 | 免费久久久久久 | 99精品国产一区 | 亚洲综合精品 | 99视频在线精品 | 国产男女猛烈无遮挡免费视频 | 国产成人免费在线 | 波多野结衣视频网址 | 久久久久久香蕉 | 少妇淫片aaaaa毛片叫床爽 | 91成人在线免费 | 一本一道久久久a久久久精品91 | 国产91在线免费 | 成人av免费观看 | 狠狠搞狠狠干 | 国产精品一区久久 | 国产成人无码一区二区在线播放 | 免费黄色亚洲 | 欧美色图网址 | 国产精品久久久国产盗摄 | 国产视频久久久 | 日日日噜噜噜 | 成熟丰满熟妇高潮xxxxx | 亚洲综合无码久久精品综合 | 久久av影院 | 自拍偷拍麻豆 | 久久国产精品网 | 男男毛片 | 狼人av在线 | 风间由美不戴奶罩邻居勃起av | 高清不卡一区 | 亚洲精品久久久久999中文字幕 | 欧洲一级黄色片 | 日韩欧美一区二区三区在线 | 亚洲妓女综合网99 | 人妻熟女一二三区夜夜爱 | 日本xxxx高清 | 久久久aa | 色欧洲 | 国产农村妇女露脸对白视频 | 精品无码一区二区三区爱欲九九 | 毛片网站大全 | 亚洲乱码中文字幕在线 | 亚洲国产一区二区三区日本久久久 | 精品免费久久 | 久久一区二区三区视频 | 少妇理论片 | 国产在线观看中文字幕 | 黄a网站 | 大桥未久av一区二区三区中文 | 久久免费视频网站 | h视频在线免费观看 | 日本免费一区二区三区最新 | 福利视频在线播放 | 中文字幕在线观看 | 老汉色老汉首页a亚洲 | 久久精品在线观看 | 影音先锋中文字幕在线 | 亚洲日韩欧美综合 | 国产麻豆乱码精品一区二区三区 | 国产真实乱人偷精品视频 | 一区二区国产精品 | 秋霞福利片 | 日韩视频免费 | 免费国精产品wnw2544 | 欧美日韩99| 国产大片aaa| 欧美日韩视频无码一区二区三 | 第一色影院 | 亚洲v欧美v国产v在线观看 | 日本h在线观看 | 狠狠色噜噜狠狠狠狠av | 毛片在线视频 | 久久综合久久自在自线精品自 | 亚洲午夜视频在线观看 | 伊人小视频 | 午夜激情影院在线观看 | 国产又大又硬又粗 | 日韩理论在线观看 | 欧美性成人 | 亚洲国产精品久久人人爱 | 日韩成人高清视频在线观看 | 久久亚洲春色中文字幕久久久 | 国产精品xxx在线观看 | 91精品国产99久久久久久久 | 好吊色欧美一区二区三区视频 | 日本性猛交 | 亚洲 另类 在线 欧美 制服 | 一区二区三区国 | 36d大奶| 日韩欧美中文字幕公布 | 四虎4hu| 久久伊人av | 99在线小视频 | 久久久国产一区二区三区四区小说 | 中文国产成人精品久久不卡 | 精久国产一区二区三区四区 | 亚洲综合专区 | 中日韩高清无专码区2021 | 日日摸夜夜添狠狠添久久精品成人 | 日躁夜躁狠狠躁2001 | 丰满老熟女毛片 | 一区二区视频免费看 | 播色网 | 奴性白洁会所调教 | 日本a级黄色 | 天干天干天啪啪夜爽爽av | 国产1区2区| 无码精品人妻一区二区三区漫画 | 欧美综合自拍亚洲综合图片区 | 美女无遮挡免费网站 | 中文字幕av一区二区 | 国色天香精品一卡2卡3卡 | 毛茸茸亚洲孕妇孕交片 | 乌克兰极品少妇ⅴαdeo | 后进极品白嫩翘臀在线播放 | 男女一级片 | 日韩欧美亚洲综合久久 | 久久精品国产99久久久古代 | 国精产品999国精产品蜜臀 | 在线v片免费观看视频 | 中文字幕精品久久 | 国产精品4huwww | 六月丁香啪啪 | 毛片tv网站无套内射tv网站 | 免费观看一级特黄特色大片 | 激情综合久久 | 中文字幕久久久久 | 国产av亚洲精品ai换脸电影 | 97免费看| 精品动漫3d一区二区三区免费版 | av无码久久久久不卡免费网站 | 成年在线观看视频 | 羞羞麻豆国产精品1区2区3区 | 少妇裸体做爰免费视频网站 | 精品粉嫩超白一线天av | 亚洲国产精品久久久久久久 | 欧美精品一区二区三区在线四季 | 国产在线观看免费视频今夜 | 91成人观看 | 欧洲精品欧美精品 | 天堂综合网久久 | 国产精品久久国产三级国 | 天天色宗合 | 久久久久久久久久久大尺度免费视频 | 五月婷婷激情在线 | 久草视频在线看 | 成人免费8888在线视频 | 亚洲国产精品久久久久爰色欲 | 久久久成人精品 | 日本亚洲国产 | 激情丁香网 | 亚洲我射av | 亚洲我不卡 | 亚洲欧美日韩综合俺去了 | 国产精品久久久久久久久免费 | 五月天三级 | 老牛影视av一区二区在线观看 | 亚洲一区二区精品视频 | 国产亚洲精品女人久久久久久 | 欧美性猛交xxxxx按摩欧美 | 天天干在线播放 | 日韩人妻无码中文字幕视频 | 内射女校花一区二区三区 | www.桃色| 成人做爰视频www | cao在线 | 秋霞欧洲| 日韩欧美在线观看一区 | 日本精品久久久久久 | 丰满熟妇偷拍洗澡毛茸茸 | 亲子乱一区二区三区 | 日本不卡视频在线观看 | 巨粗进入警花哭喊求饶在线观看 | 一级在线看 | 欧美激情精品久久久久久免费 | 国产制服丝袜一区 | 在线观看超碰 | 1000又爽又黄禁片在线久 | 四虎4hu永久免费网站影院 | 91久久久久久久 | 又粗又大又黄又硬又爽免费看 | 天天综合日日夜夜 | 又色又爽又高潮免费视频观看酒店 | 成年人视频网站 | 国产熟妇久久777777 | 国产乱子伦精品免费女 | 久久九九免费视频 | 日日婷婷夜日日天干 | 欧美饥渴熟妇高潮喷水水 | 中国少妇内射xxxxⅹhd | 蜜桃一本色道久久综合亚洲精品冫 | 天天色棕合合合合合合合 | 国产高清自拍一区 | 777亚洲 | 欧美一区二区三区四区在线 | 精品国产一区二区三区香蕉 | 男人和女人高潮做爰视频 | 特色黄色片 | 可以直接看av的网址 | av在线一区二区三区 | 成人区精品一区二区婷婷 | 91麻豆精品91aⅴ久久久久久 | 天堂综合网久久 | 性欧美成人播放77777 | 五月色丁香婷婷网蜜臀av | 日本欧美大码aⅴ在线播放 中文人妻无码一区二区三区在线 | 免费看毛片网站 | 乱人伦中文视频在线观看 | 男女肉粗暴进来动态图 | 国产精品欧美一区乱破 | 久久婷婷成人综合色综合 | 激情亚洲色图 | 国产精品无套呻吟在线 | 视频一区 视频二区 视频三区 视频四区 国产 | 亚洲xxx视频 | 91麻豆影院 | 蜜桃视频在线观看免费视频网站www | 在线看黄网址 | 看全色黄大色大片60岁 | 国产传媒在线 | 麻豆一区二区在我观看 | 亚洲线精品一区二区三区 | 特黄特色的大片观看免费视频 | 免费视频网站在线观看入口 |