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

Rss & SiteMap

曙海教育集團論壇 http://www.bjzhda.cn

曙海教育集團論壇
共1 條記錄, 每頁顯示 10 條, 頁簽: [1]
[瀏覽完整版]

標題:JNI技術與Android應用

1樓
wangxinxin 發表于: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檔案就匯合起來,一起執行了。
共1 條記錄, 每頁顯示 10 條, 頁簽: [1]

Copyright © 2000 - 2009 曙海教育集團
Powered By 曙海教育集團 Version 2.2
Processed in .01563 s, 2 queries.
主站蜘蛛池模板: 又湿又紧又大又爽a视频国产 | 日本55丰满熟妇厨房伦 | 寂寞人妻瑜伽被教练日 | 激情大战极品尤物呻吟 | 人人爽人人片人人片av | 国产无遮挡裸体免费视频 | 女同理伦片在线观看禁男之园 | 人与野鲁毛片在线视频 | 在线看中文字幕 | 香港a毛片| 大乳村妇的性需求 | 成人两性视频 | 亚洲 综合 欧美 动漫 丝袜图 | 男女草比视频 | 成人黄色在线观看 | 亚洲一级精品 | 久久福利网站 | 免费毛片a线观看 | 精品久久久久久无码人妻 | 亚洲欧美中文日韩在线v日本 | 五月婷婷一区二区 | 开心五月色婷婷综合开心网 | 国产又粗又猛又黄又爽视频 | 中出内射颜射骚妇 | 天天爱天天色 | 人妻精油按摩bd高清中文字幕 | 国产精品水嫩水嫩 | 18禁黄无码免费网站高潮 | 国产av无码专区亚洲版综合 | 人与性动交aaaabbbb视频 | 窝窝视频在线 | 狠狠色噜噜狠狠狠狠色综合久 | 国产人妻鲁鲁一区二区 | 亚洲精品无码专区 | 成人77777| 少妇久久人人爽人人爽人人片欧美 | 99精品视频免费热播在线观看 | 国产精品v亚洲精品v日韩精品 | 中文无码伦av中文字幕 | 亚洲精品乱码久久久久久国产主播 | 久久久性| 日韩av影片在线观看 | 日韩国产精品一区 | 欧美成人手机在线 | 欧美精品一区在线观看 | 国产欧美日韩精品在线 | 亚洲综合成人亚洲 | 国产精品乱子乱xxxx | 99精品欧美一区二区三区综合在线 | 久艹视频在线观看 | 国产精品色片 | 西西444www无码大胆 | 亚洲综合激情 | 精产国品一二三产品99麻豆 | www.日韩av.com | 夫の部长が调教中文字幕 | 久久国产精品久久久久 | 国产成人一区二区三区 | 成人做爰视频www | 高潮毛片无遮挡高清免费视频 | 成人性生交大片免费卡看 | 精品国精品无码自拍自在线 | 爽天天天天天天天 | 免费一二区 | 中年两口子高潮呻吟 | jizz视频在线观看 | 人妻换人妻仑乱 | 久久人人爽av亚洲精品天堂 | 人人妻人人澡人人爽欧美精品 | 男人靠女人免费视频网站 | 亚洲精品一区二区冲田杏梨 | 日日夜夜草 | 久久国产热 | 性一交一乱一色一视频 | 日本久久中文字幕 | 少妇挑战黑人3p | 美女100%挤奶水视频吃胸 | av涩涩| 色偷偷狠狠色综合网 | 亚洲人成色7777在线观看 | 99国产午夜精品一区二区天美 | 开心久久婷婷综合中文字幕 | 99爱在线 | 国产乱对白刺激视频 | 国产视频手机在线观看 | 长篇乱肉合集乱500小说日本 | 午夜大尺度做爰激吻视频 | 一级特毛片| 国产精品久久久久一区二区三区 | 成人综合区 | 成人无码视频在线观看网址 | 久久久久久久久国产精品 | 日本裸体xx少妇18在线 | 欧美在线中文 | 亚洲黄色av网站 | 亚洲中文字幕无码一久久区 | 日韩欧美极品 | 日本波多野结衣在线 | 免费国产小视频 | 免费看小12萝裸体视频国产 | 亚洲三级网址 | 国产女主播在线 | 91theporn国产在线观看 | 天堂视频免费 | 亚洲黄色免费在线观看 | 国产精品无码素人福利不卡 | 伊人久久精品无码麻豆一区 | 国产正在播放 | 欧美xx视频 | 一二三在线视频 | 国产精品久久久爽爽爽麻豆色哟哟 | 99热在线精品国产观看 | 国产精品伦一区二区三级视频 | 99久久国产综合精品麻豆 | 国产精品久久久久久久久人妻 | 国产精品久久国产精品99 | 国产精品伊人久久 | 婷婷婷色| 久久综合爱 | 成人一区二区三区在线观看 | 国产一区二区三区免费 | 亚洲aⅴ天上人间在线观看 亚洲aⅴ在线 | 日本少妇xxx做受 | 超碰天天操 | 女人被狂躁c到高潮喷水一区二区 | 18禁黄久久久aaa片 | 蜜桃av噜噜一区二区三 | 精品一卡2卡三卡4卡免费网站 | 无码ol丝袜高跟秘书在线观看 | www.天天操 | 91精品视频网站 | 国产婷婷精品av在线 | 装睡被陌生人摸出水好爽 | 精品日产乱码久久久久久仙踪林 | 国产精品99久久久精品 | 深夜在线免费观看 | 国产成人高潮免费观看精品 | 色天天色综合 | 国产成人精品一区二区三区无码 | 毛茸茸成熟亚洲人 | 免费毛片一区二区三区亚女同 | 婷婷久久亚洲 | 成在线人永久免费视频播放 | 伊人69 | 中文日韩av | 久久久受 | 色婷婷狠狠五月综合天色拍 | 韩国黄色网 | 亚洲激情欧美 | 国产性生交xxxxx免费 | 国产精品久久久久久亚洲影视 | 日韩欧美一区二区在线 | 久久精品天天中文字幕人妻 | 亚洲免费砖区 | 亚洲aⅴ天上人间在线观看 亚洲aⅴ在线 | 久久久久久久久免费 | 中文国产字幕 | 国产日韩欧美精品在线观看 | 成人高潮片| 精品黑人一区二区三区久久 | 超碰美女 | 国产一区二区三区黄 | av在线有码| 中文字幕日本最新乱码视频 | 日本不卡在线播放 | 午夜尤物| 成人av免费在线播放 | 最新国产黄色网址 | 国产精品久久人妻无码网站一区 | 主播大秀一区二区三区 | 麻豆超碰 | 伊人黄色网 | 少妇饥渴偷公乱75 | 亚洲精品久久久久avwww潮水 | 精品国产国产综合精品 | 久久久欧美国产精品人妻噜噜 | 天天射网 | 免费无码av一区二区 | 亚洲午夜激情 | 久久久久久亚洲精品不卡4k岛国 | 99久久综合狠狠综合久久止 | 日本老熟欧美老熟妇 | 看片国产 | 国内毛片视频 | 成熟丰满熟妇高潮xxxxx视频 | 日批视频免费播放 | 日本午夜啪啪 | 97网站| 国产视频一二区 | 成人无码精品一区二区三区 | 40岁成熟女人牲交片20分钟 | 毛片免费视频观看 | 美女网站免费观看视频 | 乱码一区二区三区四区 | 一本—道久久a久久精品蜜桃 | 超碰人人在线观看 | 免费成人用春色 | 亚洲国产精品毛片av不卡在线 | 亚洲一区二区视频在线观看 | 天天做天天爱夜夜爽毛片 | 国产五月婷婷 | 欧美激情亚洲色图 | 欧美日韩乱国产 | 97精品人妻一区二区三区香蕉 | 日本大乳高潮xxxxx | 国产高清黄色片 | 午夜av在线免费观看 | 日韩av影音 | 成人小视频免费在线观看 | 7777久久久国产精品 | 啄木系列成人av在线播放 | 狠狠的干性视频 | 特黄三级毛片 | 在线播放av网址 | 92看片淫黄大片看国产片图片 | 亚洲精品乱码久久久久久蜜桃动漫 | 日韩av免费看 | 亚洲在线色 | 精品视频在线一区 | 中文字幕av在线免费观看 | 男人的天堂免费视频 | av午夜久久蜜桃传媒软件 | 精品久久久久久亚洲综合网 | 在线观看亚洲大片短视频 | 国产精品福利视频主播真会玩 | 色欧美88888久久久久久影院 | 国产色婷婷亚洲99精品小说 | 国产精品揄拍一区二区 | 国产资源精品 | 国产成人免费观看视频 | 精品国产乱码一区二区三 | 国产日产欧产美 | 国产精品视频第一区二区三区 | 日本猛少妇色xxxxx | 久久久久av69精品 | 羞羞视频2023 | 亚洲国产一二三精品无码 | 91在线免费看 | 国产精品老牛影院99av | 亚洲欧洲无卡二区视頻 | 人妻被按摩师玩弄到潮喷 | 亚洲国产精品高潮呻吟久久 | 欧美丝袜一区二区 | 香港三级网站 | 91亚洲在线 | 国产日产亚洲系列最新 | 中国女人黄色大片 | 奇米777四色影视在线看 | 欧美色aⅴ欧美综合色 | 免费观看一级特黄特色大片 | 欧美日韩精品 | 国产精品久久久久久久久久新婚 | 中国免费看的片 | av观看免费| 婷婷久久久亚洲欧洲日产国码av | 国产精品99久久久久久一二区 | 伊人激情av一区二区三区 | 插入综合网 | 欧美综合国产精品久久丁香 | 久操网站 | 国产在线精品一区二区三区直播 | 国产农村妇女毛片精品久久 | 中文字幕在线视频免费视频 | 正在播放酒店约少妇高潮 | 91成人国产综合久久精品 | 九九香蕉视频 | 午夜久久视频 | 久久aⅴ国产紧身牛仔裤 | 天天综合天天做天天综合 | 亚洲熟妇av一区二区三区漫画 | 亚洲国产精品一区二区尤物区 | 一本大道无码av天堂 | 99国产精品自在自在久久 | 日本aaaaa高潮免费 | 黄色美女视频网站 | 夜夜高潮夜夜爽国产伦精品 | 国产精品久久久久久久久久99 | 亚洲精品久久久久久久久久吃药 | 免费中文字幕 | 亚洲精品久久久久av无码 | 国产在线播放网站 | 外国黄色网 | 国产综合视频一区二区三区 | 一级片视频播放 | www.国产免费 | 成人同人动漫免费观看 | 少妇又紧又色又爽又黄又刺激 | 三级全黄做爰视频在线手机观看 | 操操操操操操操操操 | 日本aa大片在线播放免费看 | 91亚洲精品在线 | 亚洲 激情 小说 另类 欧美 | 人人插人人 | 欧美日b视频 | 亚洲欧洲免费 | 久久久国产视频 | 女人裸体性做爰视频 | 69婷婷国产精品入口 | wwwcom毛片 | 国产午夜一级一片免费播放 | 四月婷婷 | 久久久无码精品国产一区 | 超h高h污肉校园np在线观看 | 波多野结衣高清一区二区三区 | 毛片88| 成人网在线免费观看 | 日日干夜夜干 | 国产精品国产三级国产a | 久久午夜夜伦鲁鲁片不卡 | 日日骑| 精品福利视频一区二区 | 激情成人av | 亚洲日韩乱码中文无码蜜桃臀 | 奴色虐av一区二区三区 | 国产噜噜噜噜久久久久久久久 | 极品无码av国模在线观看 | 图片区小说区激情区偷拍区 | 小嫩女直喷白浆 | 男女爽爽爽视频 | 成人美女黄网站色大色费全看在线观看 | 国产精品久久久久久久久久 | 欧美在线视频免费播放 | 风韵少妇性饥渴推油按摩视频 | 99久久久国产精品无码免费 | 波多野结衣在线观看一区二区 | 天堂在线中文字幕 | 992tv在线影院| 亚洲精品乱码久久久久久蜜桃91 | 久久福利网站 | 天天看片黄色 | 亚洲欧美小视频 | 99久久免费精品国产男女高不卡 | 亚洲精品乱码久久久久久按摩观 | 老子午夜精品无码 | 一区二区高清视频 | 91麻豆自制传媒国产之光 | 日韩av毛片在线观看 | 亚洲国产一区二区a毛片 | 成人性生交大片免费视频 | 男人天堂中文字幕 | 日日摸日日碰夜夜爽av | 国产女女 | 国产精品三级三级三级 | 久久国产精品视频 | 狠狠色 综合色区 | 狼人综合网| 美女啪啪无遮挡 | 亚洲黄a | 欧美交换配乱吟粗大 | 国产在线无码精品电影网 | 欧美毛片视频 | 黄片毛片视频 | 日韩成人精品一区二区 | 日产成品片a直接观看 | 国产免费内射又粗又爽密桃视频 | 国产成人精品亚洲男人的天堂 | 1000又爽又黄禁片在线久 | 日韩色小说 | 色老板精品凹凸在线视频观看 | 日韩色av| 1000部无遮挡拍拍拍免费视频观看 | 日本aaa级片 | 欧美一级免费观看 | 欧美激情在线 | 日日夜夜天天 | 亚洲清纯国产 | 免费一级特黄特色的毛片 | 国产内射爽爽大片 | 永久免费看片 | 午夜网页 | 嫩草综合 | 拔插拔插海外华人免费视频 | 日本人做爰大片免费网站 | 中国美女乱淫免费看视频 | 国产精品成人免费精品自在线观看 | 丰满白嫩尤物一区二区 | 在线综合色| 2019天天干天天操 | 久久国产成人午夜av影院 | 亚洲美女操 | 欧美成人午夜视频 | 亚洲视频综合网 | 国产第一页在线 | 亚洲欧美激情另类校园 | 136微拍宅男导航在线 | 成人性生交大片xbxb | 久草在线手机视频 | 人人干人人玩 | 三级黄色免费 | 亚洲视频网 | 人人九九精品 | 91久久久精品国产一区二区蜜臀 | 能免费看黄色的网站 | 久久久精品中文 | 日本内谢少妇xxxxx8老少交 | 一级片美女 | 精品一区在线 | 高潮毛片无遮挡高清视频播放 | 91av爱爱| 精品欧美一区免费观看α√ | www.成人在线视频 | 又爽又黄又无遮挡的视频 | 国产成人精品综合在线观看 | 色人人 | 六月丁香婷婷色狠狠久久 | av永久免费网站 | 18欧美乱大交hd1984 | 波多野结衣办公室双飞 | 欧美久久久久久久久中文字幕 | 九色国产精品视频 | 精品一区二区久久久久久久网站 | 日产国产亚洲精品系列 | 一区二区三区www | 国产美女精品人人做人人爽 | 最新国产aⅴ精品无码 | 国产深夜福利 | 色偷偷噜噜噜亚洲男人的天堂 | 久久影院中文字幕 | 成人在线免费网站 | 国产 日韩 欧美在线 | 欧美性jizz18性欧美 | 夜夜躁天天躁很躁mba | 一本色道av | 看片在线 | 国产aaaaa毛片| 91不卡视频 | 天天躁日日躁狠狠很躁 | 午夜国产精品成人 | 久久综合久久自在自线精品自 | 777国产成人入口 | 少妇一级淫免费放 | 精品国产第一区二区三区的特点 | 国产精品污www在线观看17c | 国产真人真事毛片 | 国产一级内谢一级一内高请 | 久久久久久久久久一区二区三区 | 欧美精品一二 | 日本不卡视频在线播放 | 午夜视频国产 | 精品国产一区二区三区粉芽 | 久久久久久亚洲精品 | 激情欧美一区二区三区 | 97在线超碰 | 亚洲日本香蕉视频 | 欧美一级特黄aaaaaa大片在线观看 | 奴性女会所调教 | 邻居少妇与水电工啪啪 | 日韩毛片网站 | 精品国产亚洲一区二区三区 | 和寂寞少妇做爰bd | 女女同恋一区二区在线观看 | 中文字幕一区二区在线播放 | 少妇又紧又色又爽又刺激的视频 | 成人在线黄色 | 亚洲a级在线观看 | 欧美一区二区影视 | 在线成人欧美 | 无码人妻少妇久久中文字幕 | 韩国久久久久久 | 国产青青在线 | 日本大乳奶做爰洗澡三级 | 国产乱妇乱子视频在播放 | 伊人涩| 国产精品爱久久久久久久电影蜜臀 | 丰腴饱满的极品熟妇 | 国产人妻黑人一区二区三区 | 狠狠色噜噜狠狠狠8888米奇 | 久久伊人亚洲 | 亚洲 另类 在线 欧美 制服 | 波多野结衣影院 | 国产精品777777 | 黄色大片网 | 91精品视频在线播放 | 天天干天天爱天天操 | 中日韩在线 | 欧美性受xxxx白人性爽 | 黄色成人小视频 | 亚洲一区av无码少妇电影 | 色麻豆国产原创av色哟哟 | 一级少妇精品久久久久久久 | 国产一区二区三区免费播放 | 在线播放色 | 亚洲欧美在线观看视频 | 国内av一区二区 | 欧美精品一区二区三区久久久 | 国产亚洲精品久久久91 | 欧美性猛交xxxx富婆 | 午夜无码国产理论在线 | 色老头一区 | 国产精品久久久久久久久久免费看 | 亚洲成人一区在线观看 | 久草在线资源网 | 一区二区视频在线播放 | 久久久久久久久久久久久女过产乱 | 欧美黑人性暴力猛交喷水 | 131mm少妇做爰视频 | 国产一级二级在线观看 | jzzijzzij日本成熟少妇 | 久久综合久久网 | 色拍拍在线精品视频 | 青青草久久伊人 | 老女人一区| 永久免费不卡在线观看黄网站 | 免费看成人毛片 | 久久蜜桃av一区精品变态类天堂 | 国产成人久久av免费看 | 亚洲国产欧美日韩在线 | 亚洲精品久久久久久宅男 | 欧美体内谢she精2性欧美 | a级毛片 黄 免费a级毛片 | 99热播精品 | 少妇又色又紧又爽又刺激视频 | 日本丰满大乳乳奶 | 亚洲va国产日韩欧美精品色婷婷 | 免费无码肉片在线观看 | 日日摸日日添日日碰9学生露脸 | 日本免费黄色网址 | 蜜臀av性久久久久av蜜臀妖精 | 丰满白嫩欧洲美女图片 | 一区二区三区美女视频 | 亚洲码无人客一区二区三区 | 99国产精品欧美久久久久的广告 | 女邻居丰满的奶水 | 在线观看吃瓜av网站 | 麻豆网址 | 国产精品一级无遮挡毛片 | 91精产国品一二三产区区别网站 | 东方欧美色图 | 无遮挡做爰激吻国产999 | 国产91看片 | 亚洲人色婷婷成人网站在线观看 | 国产精品亚洲综合一区在线观看 | 不卡的中文字幕 | 色牛影院 | 亚洲欧美视频在线播放 | 久久三级网站 | 人妖另类巨茎双性人欧美视频 | 北条麻妃在线一区二区免费播放 | 成人av一区二区亚洲精 | 亚洲欧洲无码av电影在线观看 | 国产v在线观看 | 青青成人网 | 在线观看精品视频 | 天天狠天天操 | 草草影院1 | h亚洲| 中文字幕专区高清在线观看 | 国产精品日韩av | 国产在线视频99 | av中文在线 | 91玉足脚交白嫩脚丫在线播放 | 国产又黄又湿 | 国产成人av一区二区三区 | 精品久久久久久久久久岛国gif | 国产乱码精品一区二区三区五月婷 | 18videosex性vr日| 中文字幕第22页 | 18女下面流水不遮图 | 国产又黄又硬又湿又黄的播出时间 | 欧美成人性视频在线播放 | 亚洲成人一二三区 | 国产精品亚洲综合色区韩国 | 青青伊人网| 川上奈美侵犯中文字幕在线 | 久久久久久久久久久91 | 国产周晓琳在线另类视频 | 污污网站在线免费观看 | 加勒比中文无码久久综合色 | 国产精品无码久久久久成人影院 | 亚洲最新无码中文字幕久久 | 最新91在线 | 九色视频丨porny丨丝袜 | 精品人妻av区波多野结衣 | 国产91精品久久久 | 国产黄色一区二区 | 久久综合综合久久综合 | 日本高清二区 | 天天躁夜夜躁天干天干2022 | 亚洲嫩 | 国产成人精品一区二区三区视频 | 91在线| 久久免费小视频 | 999久久久国产精品消防器材 | 成熟少妇一区二区三区 | 久久精品这里热有精品 | 人妻换人妻仑乱 | 正在播放欧美 | 精品偷自拍另类在线观看 | 不卡视频国产 | 日韩性生活视频 | 久久婷婷五月综合色精品 | 久操国产精品 | 72成人网 | 日本高清视频网站 | 亚洲成a人片在线观看日本 国产精品无码成人午夜电影 | 国产在线无码视频一区二区三区 | 欧美一级淫片bbb一84 | 激情小说av | 台湾黄色网址 | av资源新版在线天堂 | 久久无码精品一区二区三区 | 九九九精品视频 | 欧美一区二区三区啪啪 | 中文字幕精品在线视频 | 日韩国产精品视频 | 美女黄频视频大全免费的国内 | 五月婷婷久 | 免费看国产曰批40分钟 | 国产在线免费 | 日本久久网 | 中国黄色一级片 | 一本一本久久a久久综合精品 | 久久久久久久综合 | 亚洲人成电影网站色 | 麻豆精品一区综合av在线 |