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

以文本方式查看主題

-  曙海教育集團論壇  (http://m.adgdgn.cn/bbs/index.asp)
--  Android應用開發  (http://m.adgdgn.cn/bbs/list.asp?boardid=45)
----  JNI技術與Android應用  (http://m.adgdgn.cn/bbs/dispbbs.asp?boardid=45&id=2024)

--  作者:wangxinxin
--  發布時間:2010-12-3 11:15:40
--  JNI技術與Android應用
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檔案就匯合起來,一起執行了。

主站蜘蛛池模板: 亚拍精品一区二区三区探花 | 日韩黄网| 中文字幕乱码一区av久久不卡 | 免费高清成人 | 国产裸体写真av一区二区 | 久久综合久久综合九色 | 日韩午夜一区 | 爱福利视频广场 | 日日干天天 | 日本黄色三级视频 | 精品久久国产字幕高潮 | 亚洲自拍偷拍一区二区 | 国产精品永久免费 | 榴莲视频黄色 | 免费精品一区二区 | 秦大爷的性生生活1一7 | 成人动漫视频在线 | 亚洲欧美一区二区三区情侣bbw | 中国 免费 av | 美女裸体十八禁免费网站 | 日本黄色短片 | 国产三级av在线 | 亚洲国产午夜精品理论片妓女 | 欧美高潮在线 | 天天色综合天天 | 国产做爰全免费的视频黑人 | 国产三级国产精品 | 少妇裸交aa大片 | 国产搞逼视频 | 黄色日批 | 伊人精品成人久久综合软件 | 日韩不卡视频在线观看 | 国产又色又爽又刺激在线观看 | 波多野结衣办公室33分钟 | 黄视频在线免费看 | 成人国产精品入口免费视频 | 日韩在线1 | 黄色片久久久 | 丰满的继牳3中文字幕系列 丰满的少妇xxxxx人伦理 | 18禁裸乳无遮挡啪啪无码免费 | 欧美日韩一区视频 | 中文字幕十一区 | 欧美日韩久久久久久 | 欧美性大战久久久久xxx | 狠狠色狠狠色综合久久一 | a级在线看| 五月婷综合网 | 欧美亚洲综合视频 | 国产精品久久久久久久久大全 | 蜜臀免费av | 91麻豆网站 | 爱的色放在线 | 少妇无码av无码专区在线观看 | 日韩美女一区二区三区 | 国产一区二区精品久久岳 | 日韩色av| 日本a级免费 | 污污的视频网站在线观看 | 国产在线拍偷自揄拍无码 | 亚洲ww中文在线 | 成人国产精品久久久春色 | 亚洲黄色三级视频 | 男女的隐私视频播放 | 国产一区二区三区成人久久片老牛 | 亚洲精品999 | 亚洲日韩av无码中文字幕美国 | 欧美精品久 | 欧美性久久 | 天天躁日日躁狠狠躁性色av王爷 | 一级做a视频在线观看 | 亚洲欧美一区二区爽爽爽 | 亚洲福利av | 亚洲综合在线中文字幕 | 天天射中文 | 国产极品91 | 成人黄色一级视频 | 好爽…又高潮了免费毛片 | 久久免费偷拍视频 | 国产中文字幕91 | 天天干网 | 成人性生交免费大片 | 精品人妻人人做人人爽夜夜爽 | 欧美丰满老妇性猛交 | 久久久无码精品亚洲日韩按摩 | 深夜爽爽动态图无遮无挡 | 夜夜欢性恔免费视频 | 日本成熟老妇乱 | 日本做爰全过程免费的叫床 | 最新av网站在线观看 | 亚洲91网 | 国产裸体美女视频全黄 | 国产三男一女4p免费男黑人 | 精品欧洲av无码一区二区14 | 爱爱免费网站 | 小毛片| 乱肉合集乱高h男男双龙视频 | 亚洲精品国产成人 | 好吊色一区二区三区 | 欧美日韩午夜群交多人轮换 | 中文字幕av免费 | 114一级片 | 手机看片99 | 九七超碰在线 | 欧美成人免费在线视频 | 风韵少妇性饥渴推油按摩视频 | 亚洲女同疯狂舌吻唾液口水美女 | 98自拍视频 | 久久午夜夜伦鲁鲁片不卡 | 少妇29p| 国产精品夫妻视频 | 精品夜夜爽欧美毛片视频 | 吞精囗交系列av | 国产欧美一区二区三区四区 | 国产精品久久久久久久久久久久久久 | 国产黄色精品视频 | 8050午夜二级| 午夜资源 | 五月婷婷在线播放 | 五月婷婷色丁香 | 免费无码又爽又黄又刺激网站 | 国产一级α片 | 性丰满白嫩白嫩的hp124 | 日本三级带日本三级带66 | 免费三级黄 | 国内丰满少妇猛烈精品播 | 91精品国产91久久久久久 | 日本女优网址 | 午夜免费视频观看 | 人人妻久久人人澡人人爽人人精品 | 97超碰自拍| 日批视频在线播放 | 91精品国产色综合久久久浪潮 | 四川丰满少妇毛片新婚之夜 | 九一视频在线 | 欧美喷潮久久久xxxxx | 韩国三级hd中文字幕叫床浴室 | 亚洲免费精品网站 | 亚洲成人在线播放视频 | 少妇高潮毛片高清免费播放 | 亚洲自拍中文字幕 | 免费人成年激情视频在线观看 | 国产精品久久久久久久久久直播 | 欧美性猛交久久久乱大交小说 | 自拍 高清 日韩 欧美 另类 | 中国国产黄色片 | 暴力强奷美女孕妇视频 | 国产日韩av一区二区 | 国产极品在线观看 | 亚洲色成人中文字幕网站 | 亚洲国产精品国自产拍av | 久久午夜鲁丝片 | 激情黄色小说视频 | 人与禽交av在线播放 | 天天色综合天天色 | 巨大乳沟h晃动双性总受视频一区 | 青草青青视频 | 麻豆国产人妻欲求不满 | 亚洲国产精品高潮呻吟久久 | 成人日韩在线观看 | 日韩在线免费播放 | 风间由美性色一区二区三区 | 日本三级高清视频 | 毛片一区二区三区 | 欧洲亚洲精品久久久久 | 亚洲4p| 国产又滑又嫩又白 | 亚洲成av人片一区二区梦乃 | 人妻中出受孕 中文字幕在线 | 亚洲香蕉中文网 | 国产午夜福利片 | 国产精品一区二区久久国产 | 精品美女视频 | 波多野结衣美乳人妻hd电影欧美 | 久久99精品久久久久久久久久久久 | 国产一区二区精品 | 中文字幕亚洲一区 | 亚洲专区第一页 | 中午字幕在线观看 | 国产成人无码一区二区三区 | 国产精品美女久久久网av | 久久精品区 | 少妇一区二区视频 | 国产真实精品久久二三区 | 优月まりな乳狂在线观看 | 81国产精品久久久久久久久久 | 三级免费黄录像 | 黄色一级在线观看 | 免费观看bbb毛片大全 | 亚洲人性xxⅹ猛交 | 天堂欧美 | 永久免费d站视频 | 全部毛片永久免费看 | 美玉足脚交一区二区三区图片 | 精品久久久久久无码人妻热 | www成人精品免费网站青椒 | 浓精h攵女乱爱av | 99久久人人爽亚洲精品美女 | 国产综合在线视频 | 精品无码av无码免费专区 | 国产精品国产精品国产专区蜜臀ah | 国产精品久久久久久久白丝制服 | 夜色.com | 久久久精品免费 | 深夜成人福利视频 | 亚洲30p| 欧美精品成人 | 九九精品视频在线观看 | 久草网视频在线观看 | 91网址在线播放 | 一级黄色大片免费观看 | 五月婷丁香 | 亚洲精品视频免费看 | 国产女主播一区二区三区 | av资源站最新av | 国产又猛又黄又爽 | 久久精品午夜 | 国产一区二区免费在线 | 精品乱人码一区二区二区 | 人妻妺妺窝人体色www聚色窝 | 污片网站在线观看 | 国产人妻精品区一区二区三区 | 亚洲精品视频免费在线观看 | 在线看片人成视频免费无遮挡 | 色一涩| 狠狠做深爱婷婷久久综合一区 | 国产爽爽久久影院hd | 精品国产三级a∨在线欧美 一本加勒比hezyo无码专区 | 99久久精品国产同性同志 | 成人性生交大片免费看视 | 国产精品毛片无遮挡高清 | 国产另类ts人妖一区二区 | 久久久久久久久久久久久国产 | 久久久久久一区二区三区 | 一级色网站 | 伊人久久一区二区 | 人妻巨大乳hd免费看 | 视频国产一区 | 少妇性色淫片aaa播放 | xxxx69国产| 蜜桃精品在线 | 亚洲国产超清无码专区 | 91夜色| 麻豆tube| 91亚洲乱码卡一卡二卡新区豆 | 超碰免费人人 | 内射人妻无码色ab麻豆 | 精品无码国产污污污免费 | 天堂网av手机版 | 波多野结衣免费一区视频 | 在线观看精品国产 | 国偷自拍 | 四川妇女偷人毛片大全 | 亚洲一卡一卡二新区无人区 | 欧美久久免费观看 | 亚洲日韩一区二区 | 国产亚洲精品久久久久久无几年桃 | 国产粉嫩尤物极品99综合精品 | 欧美日韩一二三四 | 国产免费一区二区三区免费视频 | 女女同性女同一区二区三区91 | 大奶一区二区 | 亚洲va在线 | 草草免费视频 | 一区二区三区视频免费在线观看 | 国产亚洲精品美女久久久久 | 深夜影院在线观看 | 美利坚合众国av | 久久天天躁夜夜躁狠狠躁2022 | 中国人与牲禽动交精品 | 精品三级在线 | 久久精品人人做人人综合 | 小明www永久免费播放平台 | 欧美野外猛男的大粗鳮台湾同胞 | 成人拍拍视频 | 交换配乱淫东北大坑性事视频 | 亚洲少妇视频 | 黑人邻居太猛中文字幕hd | 精品国产91久久久 | 四虎永久在线精品免费网址 | 无码人妻精品一区二区三区66 | 久久精品中文騷妇女内射 | 天天做天天爱天天爽综合网 | 天天躁日日躁狠狠很躁 | 色视频欧美一区二区三区 | 欧美区一区二 | 西西44rtwww国产精品 | a级毛片蜜桃成熟时2在线播放 | 97超碰人人 | 亚洲精品乱码久久久久久写真 | 一级一片免费播放 | 91羞羞网站| √最新版天堂资源网在线 | 大江大河第3部48集在线观看 | 最新福利在线 | 亚洲专区中文字幕 | 国产jjizz女人多水喷水 | 韩国视频一区 | 伊人久久大香线蕉av色 | 日日碰狠狠躁久久躁综合小说 | 久久精品女人天堂av免费观看 | 亚洲精品免费在线观看 | 婷婷精品国产一区二区三区日韩 | 在线观看www | 爱情岛成人18 | 亚洲欧美日韩一区二区三区四区 | wwwwww日本 | 久久无码人妻一区二区三区午夜 | 久久wwww| 国产麻豆网 | 中文字幕在线观看免费 | 国产精品奇米一区二区三区小说 | 国产一级特黄a高潮片 | 成人a v视频| 奇米影视四色777 | 91精品孕妇哺乳期国产 | 日批免费网站 | 久久久久国产免费 | а√最新版天堂资源 | 国产亚洲精品久久久久久国模美 | 爽爽影院在线免费观看 | 色播在线播放 | av天堂午夜精品一区二区三区 | 久久免费少妇做爰 | 国产福利在线观看 | 女人喂男人奶水做爰视频 | 疯狂做爰的爽文多肉小说王爷 | 明星性猛交ⅹxxx乱大交 | 国产亚州精品女人久久久久久 | 国产少妇露脸精品 | 亚洲色图17p | 国产成人精品视频 | www亚洲天堂com| 全亚洲最大的免费影院 | av在线网页 | 婷婷综合在线观看 | a天堂资源在线观看 | 亚洲骚| 亚洲精品丝袜一区二区三区 | 色校园| 性折磨bdsm虐乳欧美激情另类 | 国产午夜大地久久 | 亚洲国产天堂一区二区三区 | 国产中文区二幕区2021 | 亚洲一区二区无码偷拍 | 潘金莲aa毛片一区二区 | 中文字字幕在线中文乱 | 久久免费看少妇高潮v片特黄 | 国产人妖cd在线看网站 | 美女张开腿黄网站免费下载 | 国产免费xvideos视频入口 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 一级黄色片免费 | 热99视频 | 成人午夜福利视频后入 | 国产成人精品男人的天堂 | 黄色毛片视频校园交易 | 富婆找两个黑人3p在线视频 | 国产精品自在线拍国产手青青机版 | 淫妹妹影院 | 又摸又揉又黄又爽的视频 | 免费观看一区二区三区 | 国产精品一区二区久久乐夜夜嗨 | 麻豆av网| 国产xxxx99真实实拍 | 这里只有久久精品 | 吃奶揉捏奶头高潮视频在线观看 | 国产黑色丝袜呻吟在线91 | 亚洲乱码一区二区三区三上悠亚 | 嫩模啪啪| 国产精品香蕉在线观看 | 久久久久久久久久久福利 | 夜夜爽爽 | 成人综合区 | 国产精品一二 | 182tv福利视频 | 一级淫片免费看 | 国产成人av一区二区三区在线观看 | 欧美日韩在线精品一区二区 | 日日摸夜夜添夜夜添国产2020 | 日本亚州视频在线八a | 国产人免费人成免费视频 | 国产精品一区在线免费观看 | 欧美一区免费观看 | 日韩a级片在线观看 | 欧洲女女同videos | 制服诱惑一区二区 | 亚洲天堂av在线播放 | 国产情侣激情在线对白 | 国产一卡二卡 | 日韩成人免费在线观看 | 亚洲老板91色精品久久 | 欧美精品久久一区 | 日本亚洲欧美在线 | 欧美成人vr18sexvr | 国产一区日韩二区欧美三区 | 91亚洲国产成人久久精品网站 | 精品国产亚洲一区 | 久久国产乱子伦精品 | 蜜桃狠狠色伊人亚洲综合网站 | 久久久综合 | 国产女人叫床高潮大片视频 | 在线免费色 | 中国三级毛片 | 无码中文字幕人妻在线一区二区三区 | 久久无码av中文出轨人妻 | www亚洲com| 西西午夜| 三级三级久久三级久久 | 一区二区三区视频免费看 | 一级视频在线免费观看 | 亚洲成a人蜜臀av在线播放 | 国产精品av久久久久久无 | 三级黄色av | 国产a大片 | 手机看片福利永久 | 依依成人精品视频在线观看 | 夜夜动漫| 中文无码精品一区二区三区 | 波多野结衣不卡视频 | 狠狠网 | 特黄色毛片 | 自拍偷拍第2页 | aaa极品在线 | 亚洲成a | 天天激情 | a级毛片蜜桃成熟时2在线播放 | 国产区精品一区二区不卡中文 | 色噜噜狠狠色综合免费视频 | 国产老女人91精品一区 | 亚洲欧美网站 | 国产a级精品 | 亚洲乱码一区二区三区三上悠亚 | 亚洲欧洲日本无在线码 | 久久免费精品 | 国产精品扒开腿做爽爽爽视频 | 国产精品成人一区二区三区视频 | 毛片在线网| 狠狠色丁香婷婷综合 | 嫩草影院在线观看91麻豆 | 亚洲乱码国产乱码精品精大量 | 97人人精品| 免费乱理伦片在线观看夜 | 在线观看毛片视频 | 国产av国片精品有毛 | 极品美女销魂一区二区三区 | 国产日韩精品中文字无码 | 中出在线| 欧美成人黄色网 | 伊人成人在线 | 777久久久精品一区二区三区 | 毛茸茸熟妇张开腿呻吟 | 99精产国品一二三产区nba | 密色av| 一级国产航空美女毛片内谢 | 久久久久国产精品嫩草影院 | 91九色网 | 成人免费视屏 | 国产欧美在线观看 | 人成在线观看 | 国产精品涩涩屋www在线观看 | 久久成人国产精品 | 综合色视频 | 好吊色在线观看 | 中文字幕91爱爱 | 夜夜夜夜夜夜av夜夜夜夜 | 国产在线不卡一区二区三区 | 91精品无人区麻豆乱码1区2区介绍 | 超碰国产人人 | 农村少妇吞精夜夜爽视频 | 三a级做爰 | 大学生久久香蕉国产线看观看 | 松岛枫av在线一区二区 | 天天鲁在视频在线观看 | 久久久一区二区三区 | 粉嫩小箩莉奶水四溅在线观看 | 一边捏奶头一边高潮视频 | 欧美性猛交xxxx乱大交蜜桃 | 91美女在线| 少妇情欲一区二区影视 | 国产欧美一区二区三区在线看 | 欧美精品福利 | www.伊人.com| 无码人妻一区二区三区免费n鬼沢 | 欧美一区二区三区四区五区 | 久久综合综合久久 | 激情视频网址 | 国内揄拍国内精品少妇 | 国产精品色哟哟 | 91九色蝌蚪 | 极品美妇后花庭翘臀娇吟小说 | 操少妇视频| 久久国产色av免费看 | 亚洲黄色a | 亚洲二区在线观看 | 亚洲第一成网站 | 少妇性i交大片免费看 | 亚洲精品3p | 亚洲一区二区中文 | 少妇高潮惨叫久久久久久 | 欧美爱爱网站 | 性较小国产交xxxxx视频 | 国产精品第一 | 亚洲一区色 | 一二三精品 | 少妇性xxxxxxxxx色野 | 亚洲成人av片 | 久久精品99国产精品亚洲 | 日本免费一区二区三区中文字幕 | 国内精品九九久久久精品 | 亚洲另类图区 | 久久人人添人人爽添人人88v | 毛片视频软件 | 国产交换配乱淫视频a免费 国产精成人品免费观看 | 老司机精品视频一区二区 | 人人看人人爱 | 成人国产精品免费观看视频 | 国产精品久久福利 | 一区二区三区在线观看视频 | 纤纤影视理伦片在线看 | 国产顶级熟妇高潮xxxxx | 超碰男人 | 无码专区人妻系列日韩精品 | 四虎小视频 | 日本三级视频在线播放 | 色婷婷综合久久久中文一区二区 | 热99re久久精品这里都是精品 | 久久久午夜精品 | 99蜜桃臀久久久欧美精品网站 | 黄色小视频入口 | 高清国产一区二区三区四区五区 | 亚洲国产最新 | 欧美三级少妇高潮 | 99热这里只有精品8 99热这里只有精品在线观看 | 国产精品一区二区久久乐下载 | 亚洲欧美日韩天堂 | 男人的天堂视频在线观看 | 少妇人妻无码永久免费视频 | 少妇人妻在线视频 | 麻豆91精品 | 伊人久久大香线蕉午夜 | 精品一区二区日韩 | 国产情侣av自拍 | 国产精品一久久香蕉国产线看观看 | 亚洲自偷自偷在线制服 | 欧美色综合天天久久综合精品 | 国产三级高清 | 大地av | 欧美日韩卡一卡二 | 国产交换配乱淫视频a免费 国产精成人品免费观看 | 狠狠操五月天 | 日韩一区二区三区视频在线 | 欧美日韩国产在线观看 | a级片免费网站 | 亚洲a视频 | 蜜桃黄色网 | 秋霞av亚洲一区二区三 | 国产视频手机在线播放 | 中国少妇毛片 | 黄色毛片在线看 | 真人性生交免费视频 | 欧美三级视频在线观看 | 亚洲不卡av不卡一区二区 | 紧缚捆绑精品一区二区 | 中文字幕 视频一区 | 亚洲宗人网 | 护士奶头又白又大又好摸视频 | fc2-ppv系列 | 亚洲欧美偷拍另类a∨色屁股 | av在线免 | 97成人免费视频 | 91九色丨porny丨朋友 | 亚洲欧美中文日韩v在线观看 | 亚洲中文字幕无码一久久区 | 91社区在线观看高清 | 免费无码a片一区二三区 | 欧美激情亚洲色图 | 日美韩一区二区三区 | 亚洲情侣av| 91精品国产综合久久久蜜臀图片 | 欧美 日韩 国产 精品 | jizz日本视频 | 无人在线观看免费高清视频的优势 | 国产日本一级二级三级 | 五十路av在线 | 欧美射射射 | 久久人妖 | 福利在线免费视频 | 羞羞视频在线观看 | 91资源新版在线天堂成人 | 欧美成人精品高清视频在线观看 | 葵司ssni-879在线播放 | 成人av网站免费 | 一本之道高清狼码 | 欧美天堂在线视频 | 毛片网站在线免费观看 | 国产91热爆ts人妖月奴 | 上原瑞穗av在线播放 | 日本少妇寂寞少妇aaa | 国产成人亚洲综合色婷婷 | 亚洲欧美一级 | 久久亚洲区 | 亚洲最大成人在线观看 | 少妇又紧又色又爽又刺激视频 | 99re这里都是精品 | 天天精品免费视频 | 国产精品久久久久久影视 | 国产精品日本欧美一区二区三区 | 亚洲成人免费影院 | 国产亚洲精品久久久闺蜜 | 日韩中文字幕网站 | 香蕉网在线播放 | 8天堂资源在线 | a午夜| 无码人妻精品一区二区三区下载 | av小说免费在线观看 |