日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android JNI原理分析

發布時間:2025/3/15 Android 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android JNI原理分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引言:分析Android源碼6.0的過程,一定離不開Java與C/C++代碼直接的來回跳轉,那么就很有必要掌握JNI,這是鏈接Java層和Native層的橋梁,本文涉及相關源碼:

frameworks/base/core/jni/AndroidRuntime.cpplibcore/luni/src/main/java/java/lang/System.java libcore/luni/src/main/java/java/lang/Runtime.java libnativehelper/JNIHelp.cpp libnativehelper/include/nativehelper/jni.hframeworks/base/core/java/android/os/MessageQueue.java frameworks/base/core/jni/android_os_MessageQueue.cppframeworks/base/core/java/android/os/Binder.java frameworks/base/core/jni/android_util_Binder.cppframeworks/base/media/java/android/media/MediaPlayer.java frameworks/base/media/jni/android_media_MediaPlayer.cpp

一、JNI概述

JNI(Java Native Interface,Java本地接口),用于打通Java層與Native(C/C++)層。這不是Android系統所獨有的,而是Java所有。眾所周知,Java語言是跨平臺的語言,而這跨平臺的背后都是依靠Java虛擬機,虛擬機采用C/C++編寫,適配各個系統,通過JNI為上層Java提供各種服務,保證跨平臺性。

相信不少經常使用Java的程序員,享受著其跨平臺性,可能全然不知JNI的存在。在Android平臺,讓JNI大放異彩,為更多的程序員所熟知,往往為了提供效率或者其他功能需求,就需要NDK開發。上一篇文章Linux系統調用(syscall)原理,介紹了打通android上層與底層kernel的樞紐syscall,那么本文的目的則是介紹打通android上層中Java層與Native的紐帶JNI。

二、JNI查找方式

Android系統在啟動啟動過程中,先啟動Kernel創建init進程,緊接著由init進程fork第一個橫穿Java和C/C++的進程,即Zygote進程。Zygote啟動過程中會AndroidRuntime.cpp中的startVm創建虛擬機,VM創建完成后,緊接著調用startReg完成虛擬機中的JNI方法注冊。

2.1 startReg

[–>AndroidRuntime.cpp]

int AndroidRuntime::startReg(JNIEnv* env) {//設置線程創建方法為javaCreateThreadEtcandroidSetCreateThreadFunc((android_create_thread_fn) javaCreateThreadEtc);env->PushLocalFrame(200);//進程NI方法的注冊if (register_jni_procs(gRegJNI, NELEM(gRegJNI), env) < 0) {env->PopLocalFrame(NULL);return -1;}env->PopLocalFrame(NULL);return 0; }

register_jni_procs(gRegJNI, NELEM(gRegJNI), env)這行代碼的作用就是就是循環調用gRegJNI數組成員所對應的方法。

static int register_jni_procs(const RegJNIRec array[], size_t count, JNIEnv* env) {for (size_t i = 0; i < count; i++) {if (array[i].mProc(env) < 0) {return -1;}}return 0; }

gRegJNI數組,有100多個成員變量,定義在AndroidRuntime.cpp:

static const RegJNIRec gRegJNI[] = {REG_JNI(register_android_os_MessageQueue),REG_JNI(register_android_os_Binder),... };

該數組的每個成員都代表一個類文件的jni映射,其中REG_JNI是一個宏定義,在Zygote中介紹過,該宏的作用就是調用相應的方法。

2.2 如何查找native方法

當大家在看framework層代碼時,經常會看到native方法,這是往往需要查看所對應的C++方法在哪個文件,對應哪個方法?下面從一個實例出發帶大家如何查看java層方法所對應的native方法位置。

2.2.1 實例(一)

當分析Android消息機制源碼,遇到MessageQueue.java中有多個native方法,比如:

private native void nativePollOnce(long ptr, int timeoutMillis);

步驟1:
MessageQueue.java的全限定名為android.os.MessageQueue.java,方法名:android.os.MessageQueue.nativePollOnce(),而相對應的native層方法名只是將點號替換為下劃線,可得android_os_MessageQueue_nativePollOnce()。
Tips:?nativePollOnce ==> android_os_MessageQueue_nativePollOnce()

步驟2:
有了native方法,那么接下來需要知道該native方法所在那個文件。前面已經介紹過Android系統啟動時就已經注冊了大量的JNI方法,見AndroidRuntime.cpp的gRegJNI數組。這些注冊方法命令方式:

register_[包名]_[類名]

那么MessageQueue.java所定義的jni注冊方法名應該是register_android_os_MessageQueue,的確存在于gRegJNI數組,說明這次JNI注冊過程是有開機過程完成的。 該方法在AndroidRuntime.cpp申明為extern方法:

extern int register_android_os_MessageQueue(JNIEnv* env);

這些extern方法絕大多數位于/framework/base/core/jni/目錄,大多數情況下native文件命名方式:

[包名]_[類名].cpp [包名]_[類名].h

Tips:?MessageQueue.java ==> android_os_MessageQueue.cpp

打開android_os_MessageQueue.cpp文件,搜索android_os_MessageQueue_nativePollOnce方法,這便找到了目標方法:

static void android_os_MessageQueue_nativePollOnce(JNIEnv* env, jobject obj,jlong ptr, jint timeoutMillis) {NativeMessageQueue* nativeMessageQueue = reinterpret_cast<NativeMessageQueue*>(ptr);nativeMessageQueue->pollOnce(env, obj, timeoutMillis); }

到這里完成了一次從Java層方法搜索到所對應的C++方法的過程。

2.2.2 實例(二)

對于native文件命名方式,有時并非[包名]_[類名].cpp,比如Binder.java

Binder.java所對應的native文件:android_util_Binder.cpp

public static final native int getCallingPid();

根據實例(一)方式,找到getCallingPid ==> android_os_Binder_getCallingPid(),并且在AndroidRuntime.cpp中的gRegJNI數組中找到register_android_os_Binder。

按實例(一)方式則native文名應該為android_os_Binder.cpp,可是在/framework/base/core/jni/目錄下找不到該文件,這是例外的情況。其實真正的文件名為android_util_Binder.cpp,這就是例外,這一點有些費勁,不明白為何google要如此打破規律的命名。

static jint android_os_Binder_getCallingPid(JNIEnv* env, jobject clazz) {return IPCThreadState::self()->getCallingPid(); }

有人可能好奇,既然如何遇到打破常規的文件命令,怎么辦?這個并不難,首先,可以嘗試在/framework/base/core/jni/中搜索,對于binder.java,可以直接搜索binder關鍵字,其他也類似。如果這里也找不到,可以通過grep全局搜索android_os_Binder_getCallingPid這個方法在哪個文件。

2.2.3 實例(三)

前面兩種都是在Android系統啟動之初,便已經注冊過JNI所對應的方法。 那么如果程序自己定義的jni方法,該如何查看jni方法所在位置呢?下面以MediaPlayer.java為例,其包名為android.media:

public class MediaPlayer{static {System.loadLibrary("media_jni");native_init();}private static native final void native_init();... }

通過static靜態代碼塊中System.loadLibrary方法來加載動態庫,庫名為media_jni, Android平臺則會自動擴展成所對應的libmedia_jni.so庫。 接著通過關鍵字native加在native_init方法之前,便可以在java層直接使用native層方法。

接下來便要查看libmedia_jni.so庫定義所在文件,一般都是通過Android.mk文件定義LOCAL_MODULE:= libmedia_jni,可以采用grep或者mgrep來搜索包含libmedia_jni字段的Android.mk所在路徑。

搜索可知,libmedia_jni.so位于/frameworks/base/media/jni/Android.mk。用前面實例(一)中的知識來查看相應的文件和方法名分別為:

android_media_MediaPlayer.cpp android_media_MediaPlayer_native_init()

再然后,你會發現果然在該Android.mk所在目錄/frameworks/base/media/jni/中找到android_media_MediaPlayer.cpp文件,并在文件中存在相應的方法:

static void android_media_MediaPlayer_native_init(JNIEnv *env) {jclass clazz;clazz = env->FindClass("android/media/MediaPlayer");fields.context = env->GetFieldID(clazz, "mNativeContext", "J");... }

Tips:MediaPlayer.java中的native_init方法所對應的native方法位于/frameworks/base/media/jni/目錄下的android_media_MediaPlayer.cpp文件中的android_media_MediaPlayer_native_init方法。

2.3 小結

JNI作為連接Java世界和C/C++世界的橋梁,很有必要掌握。看完本文,至少能掌握在分析Android源碼過程中如何查找native方法。首先要明白native方法名和文件名的命名規律,其次要懂得該如何去搜索代碼。 JNI方式注冊無非是Android系統啟動過程中Zygote注冊以及通過System.loadLibrary方式注冊,對于系統啟動過程注冊的,可以通過查詢AndroidRuntime.cpp中的gRegJNI是否存在對應的register方法,如果不存在,則大多數情況下是通過LoadLibrary方式來注冊。

三、 JNI原理分析

再進一步來分析,Java層與native層方法是如何注冊并映射的,繼續以MediaPlayer為例。

在文件MediaPlayer.java中調用System.loadLibrary("media_jni")把libmedia_jni.so動態庫加載到內存。接下來,以loadLibrary為起點展開JNI注冊流程的過程分析。

3.1 loadLibrary

[System.java]

public static void loadLibrary(String libName) {//接下來調用Runtime方法Runtime.getRuntime().loadLibrary(libName, VMStack.getCallingClassLoader()); }

[Runtime.java]

void loadLibrary(String libraryName, ClassLoader loader) {//loader不會空,則進入該分支if (loader != null) {//查找庫所在路徑String filename = loader.findLibrary(libraryName);if (filename == null) {throw new UnsatisfiedLinkError(loader + " couldn't find \"" +System.mapLibraryName(libraryName) + "\"");}//加載庫String error = doLoad(filename, loader);if (error != null) {throw new UnsatisfiedLinkError(error);}return;}//loader為空,則會進入該分支String filename = System.mapLibraryName(libraryName);List<String> candidates = new ArrayList<String>();String lastError = null;for (String directory : mLibPaths) {String candidate = directory + filename;candidates.add(candidate);if (IoUtils.canOpenReadOnly(candidate)) {//加載庫String error = doLoad(candidate, loader);if (error == null) {return;//加載成功}lastError = error;}}if (lastError != null) {throw new UnsatisfiedLinkError(lastError);}throw new UnsatisfiedLinkError("Library " + libraryName + " not found; tried " + candidates); }

真正加載的工作是由doLoad(),該方法內部增加同步鎖,保證并發時一致性。

private String doLoad(String name, ClassLoader loader) {...synchronized (this) {return nativeLoad(name, loader, ldLibraryPath);} }

nativeLoad()這是一個native方法,再進入ART虛擬機java_lang_Runtime.cc,再細講就要深入剖析虛擬機內部,這里就不再往下深入了,后續博主有空再展開art虛擬機系列的文章,這里直接說結論:

  • 調用dlopen函數,打開一個so文件并創建一個handle;
  • 調用dlsym()函數,查看相應so文件的JNI_OnLoad()函數指針,并執行相應函數。

總之,System.loadLibrary()的作用就是調用相應庫中的JNI_OnLoad()方法。接下來說說JNI_OnLoad()過程。

3.2 JNI_OnLoad

[-> android_media_MediaPlayer.cpp]

jint JNI_OnLoad(JavaVM* vm, void* reserved) {JNIEnv* env = NULL;//【見3.3】 注冊JNI方法if (register_android_media_MediaPlayer(env) < 0) {goto bail;}... }

3.3 register_android_media_MediaPlayer

[-> android_media_MediaPlayer.cpp]

static int register_android_media_MediaPlayer(JNIEnv *env) {//【見3.4】return AndroidRuntime::registerNativeMethods(env,"android/media/MediaPlayer", gMethods, NELEM(gMethods)); }

其中gMethods,記錄java層和C/C++層方法的一一映射關系。

static JNINativeMethod gMethods[] = {{"prepare", "()V", (void *)android_media_MediaPlayer_prepare},{"_start", "()V", (void *)android_media_MediaPlayer_start},{"_stop", "()V", (void *)android_media_MediaPlayer_stop},{"seekTo", "(I)V", (void *)android_media_MediaPlayer_seekTo},{"_release", "()V", (void *)android_media_MediaPlayer_release},{"native_init", "()V", (void *)android_media_MediaPlayer_native_init},... };

這里涉及到結構體JNINativeMethod,其定義在jni.h文件:

typedef struct {const char* name; //Java層native函數名const char* signature; //Java函數簽名,記錄參數類型和個數,以及返回值類型void* fnPtr; //Native層對應的函數指針 } JNINativeMethod;

關于函數簽名signature在下一小節展開說明。

3.4 registerNativeMethods

[-> AndroidRuntime.cpp]

int AndroidRuntime::registerNativeMethods(JNIEnv* env,const char* className, const JNINativeMethod* gMethods, int numMethods) {//【見3.5】return jniRegisterNativeMethods(env, className, gMethods, numMethods); }

jniRegisterNativeMethods該方法是由Android JNI幫助類JNIHelp.cpp來完成。

3.5 jniRegisterNativeMethods

[-> JNIHelp.cpp]

extern "C" int jniRegisterNativeMethods(C_JNIEnv* env, const char* className,const JNINativeMethod* gMethods, int numMethods) {JNIEnv* e = reinterpret_cast<JNIEnv*>(env);scoped_local_ref<jclass> c(env, findClass(env, className));if (c.get() == NULL) {e->FatalError("");//無法查找native注冊方法}//【見3.6】 調用JNIEnv結構體的成員變量if ((*env)->RegisterNatives(e, c.get(), gMethods, numMethods) < 0) {e->FatalError("");//native方法注冊失敗}return 0; }

3.6 RegisterNatives

[-> jni.h]

struct _JNIEnv {const struct JNINativeInterface* functions;jint RegisterNatives(jclass clazz, const JNINativeMethod* methods,jint nMethods){ return functions->RegisterNatives(this, clazz, methods, nMethods); }... }

functions是指向JNINativeInterface結構體指針,也就是將調用下面方法:

struct JNINativeInterface {jint (*RegisterNatives)(JNIEnv*, jclass, const JNINativeMethod*,jint);... }

再往下深入就到了虛擬機內部吧,這里就不再往下深入了。 總之,這個過程完成了gMethods數組中的方法的映射關系,比如java層的native_init()方法,映射到native層的android_media_MediaPlayer_native_init()方法。

虛擬機相關的變量中有兩個非常重要的量JavaVM和JNIEnv:

  • JavaVM:是指進程虛擬機環境,每個進程有且只有一個JavaVM實例
  • JNIEnv:是指線程上下文環境,每個線程有且只有一個JNIEnv實例,

四、JNI資源

JNINativeMethod結構體中有一個字段為signature(簽名),再介紹signature格式之前需要掌握各種數據類型在Java層、Native層以及簽名所采用的簽名格式。

4.1 數據類型

4.1.1 基本數據類型

Signature格式 Java Native
B byte jbyte
C char jchar
D double jdouble
F float jfloat
I int jint
S short jshort
J long jlong
Z boolean jboolean
V void void

4.1.2 數組數據類型

數組簡稱則是在前面添加[:

Signature格式 Java Native
[B byte[] jbyteArray
[C char[] jcharArray
[D double[] jdoubleArray
[F float[] jfloatArray
[I int[] jintArray
[S short[] jshortArray
[J long[] jlongArray
[Z boolean[] jbooleanArray

4.1.3 復雜數據類型

對象類型簡稱:L+classname +;

Signature格式 Java Native
Ljava/lang/String; String jstring
L+classname +; 所有對象 jobject
[L+classname +; Object[] jobjectArray
Ljava.lang.Class; Class jclass
Ljava.lang.Throwable; Throwable jthrowable

4.1.4 Signature

有了前面的鋪墊,那么再來通過實例說說函數簽名:?(輸入參數...)返回值參數,這里用到的便是前面介紹的Signature格式。

Java函數 對應的簽名
void foo() ()V
float foo(int i) (I)F
long foo(int[] i) ([I)J
double foo(Class c) (Ljava/lang/Class;)D
boolean foo(int[] i,String s) ([ILjava/lang/String;)Z
String foo(int i) (I)Ljava/lang/String;

4.2 其他

(一)垃圾回收?對于Java開發人員來說無需關系垃圾回收,完全由虛擬機GC來負責垃圾回收,而對于JNI開發人員,對于內存釋放需要謹慎處理,需要的時候申請,使用完記得釋放內容,以免發生內存泄露。在JNI提供了三種Reference類型,Local Reference(本地引用), Global Reference(全局引用), Weak Global Reference(全局弱引用)。其中Global Reference如果不主動釋放,則一直不會釋放;對于其他兩個類型的引用都是釋放的可能性,那是不是意味著不需要手動釋放呢?答案是否定的,不管是這三種類型的那種引用,都盡可能在某個內存不再需要時,立即釋放,這對系統更為安全可靠,以減少不可預知的性能與穩定性問題。

另外,ART虛擬機在GC算法有所優化,為了減少內存碎片化問題,在GC之后有可能會移動對象內存的位置,對于Java層程序并沒有影響,但是對于JNI程序可要小心了,對于通過指針來直接訪問內存對象是,Dalvik能正確運行的程序,ART下未必能正常運行。

(二)異常處理
Java層出現異常,虛擬機會直接拋出異常,這是需要try..catch或者繼續往外throw。但是對于JNI出現異常時,即執行到JNIEnv中某個函數異常時,并不會立即拋出異常來中斷程序的執行,還可以繼續執行內存之類的清理工作,直到返回到Java層時才會拋出相應的異常。

另外,Dalvik虛擬機有些情況下JNI函數出錯可能返回NULL,但ART虛擬機在出錯時更多的是拋出異常。這樣導致的問題就可能是在Dalvik版本能正常運行的程序,在ART虛擬機上由于沒有正確處理異常而崩潰。

總結

本文主要通過實例,基于Android 6.0源碼來分析JNI原理,講述JNI核心功能:

  • 介紹了如何查找JNI方法,讓大家明白如何從Java層跳轉到Native層;
  • 分析了JNI函數注冊流程,進一步加深對JNI的理解;
  • 列舉Java與native以及函數簽名方式。

原文地址:http://gityuan.com/2016/05/28/android-jni/

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Android JNI原理分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

久青草影院 | 四虎www. | 日韩精品一区二区三区中文字幕 | 日韩高清不卡一区二区三区 | 精品国产免费av | 激情深爱.com| 91视频在线播放视频 | 中文字幕亚洲高清 | 不卡av电影在线观看 | 国产在线精品区 | 中文字幕的| 久久免费视频2 | 国产理论一区二区三区 | 久久久久久久久久久久国产精品 | 免费久久精品视频 | 黄色成人免费电影 | 在线观看av免费观看 | 一本一本久久a久久精品综合妖精 | 国产色黄网站 | 99这里只有精品视频 | 久久久精品视频成人 | av成人免费| 国产中文字幕精品 | 99中文字幕视频 | 国产成人一区二 | 日韩av一区二区三区四区 | 国产欧美在线一区二区三区 | 免费av网址大全 | 九九热av | 亚洲国产精品久久久久久 | 正在播放五月婷婷狠狠干 | 欧美久久久 | 91成品人影院 | 91精品网站 | 国产精品一区二区三区四区在线观看 | 欧美在线一级片 | 五月天综合激情网 | 99久久精品国产亚洲 | 婷婷丁香九月 | 狠狠躁日日躁狂躁夜夜躁 | 亚洲1区在线 | 日韩激情网 | 欧美日韩aa | 亚洲成人网av | 99精品免费在线 | 青草视频在线免费 | 视频在线一区 | 国产韩国日本高清视频 | 国产视频日韩视频欧美视频 | 一级片观看 | 欧美亚洲久久 | 国产精品 999| 成人免费共享视频 | 99久久99久久精品免费 | 99免在线观看免费视频高清 | 免费网站黄色 | 国产在线a | 国产一区二区三区网站 | 日日夜夜网 | 久久99最新地址 | 欧美91精品国产自产 | 狠狠躁夜夜躁人人爽超碰91 | 亚洲第一色 | 日韩久久精品一区二区 | 99久久久久久久久 | 中文字幕亚洲不卡 | 五月婷婷免费 | 国产精品一区免费观看 | 亚洲国产成人久久综合 | 久久五月情影视 | 国产精品一区二区在线 | 深爱婷婷网 | 久久久久久国产精品 | 丁香 婷婷 激情 | 中文字幕在线观看视频一区 | 欧美另类美少妇69xxxx | 久久97超碰 | 午夜精品在线看 | 日韩精品视频免费专区在线播放 | 黄色精品久久 | 日韩视频免费观看高清 | 91麻豆精品国产91久久久久 | 久久99精品久久久久久清纯直播 | 欧美一二区在线 | 欧美日韩视频在线一区 | 99久久精 | 91久久国产自产拍夜夜嗨 | 久久成人免费电影 | 免费日韩视 | 一本大道久久精品懂色aⅴ 五月婷社区 | 免费一区在线 | 欧美性做爰猛烈叫床潮 | www.一区二区三区 | 91精品久久久久久粉嫩 | 九九爱免费视频在线观看 | 久草在线资源视频 | 91网免费看 | 亚洲国产精彩中文乱码av | 天天干天天操天天射 | 激情开心色 | 成人久久18免费网站 | 91毛片在线观看 | 国产黄色av网站 | 91九色精品国产 | 91av在线播放视频 | 日韩av成人在线观看 | 日韩理论电影在线观看 | 久久精品国产99国产 | 日韩理论片中文字幕 | 婷香五月 | 91九色国产视频 | 日韩欧美电影在线观看 | 成人久久精品视频 | 国产免费小视频 | 亚洲乱亚洲乱亚洲 | 九九九九免费视频 | 精品国产伦一区二区三区观看方式 | 天天射天天 | 国产拍揄自揄精品视频麻豆 | 精品国产乱码一区二区三区在线 | 国偷自产中文字幕亚洲手机在线 | 国产一级片毛片 | 亚洲黄色激情小说 | 天天综合网 天天 | 久草影视在线 | 成 人 黄 色 片 在线播放 | 91av色| 欧美aa在线| 最近中文字幕国语免费av | 黄色成年 | 久久精彩免费视频 | 国产精品永久 | 国产在线精品区 | 97成人在线 | 成人av一区二区三区 | 国产精品igao视频网网址 | 国产精品久久久久久久久久直播 | 天天插天天射 | 亚洲人成网站精品片在线观看 | 国产精品久久久久影院 | 99久久久| 亚洲春色综合另类校园电影 | 99中文在线| 日本系列中文字幕 | 国产自制av | 国产色视频一区二区三区qq号 | 91视频观看免费 | 超碰人人草人人 | 欧美久草视频 | 国产一区二区午夜 | 96精品高清视频在线观看软件特色 | 久久久黄色 | 一区二区网 | 在线精品视频在线观看高清 | 午夜精品影院 | 操操操com| 五月婷婷精品 | 中文字幕永久免费 | 成人国产精品电影 | 色婷婷狠狠五月综合天色拍 | 久久国产精品色婷婷 | 国产高清中文字幕 | 四虎永久免费网站 | 欧美日韩一级在线 | 日本狠狠干| 免费观看全黄做爰大片国产 | 色无五月 | 天天天天天操 | 久久精品视频国产 | 国产 日韩 欧美 中文 在线播放 | 亚洲综合在线发布 | 国产999精品久久久久久麻豆 | 欧美黑人性猛交 | 亚洲永久精品一区 | 91精品国产综合久久福利 | 日韩av一区二区在线播放 | 日韩一级片大全 | 久草在线 | 99久久精品免费看国产一区二区三区 | 五月天电影免费在线观看一区 | 色综合小说 | 丁香视频 | 亚州国产精品视频 | 亚洲一级电影在线观看 | 国产精品网红福利 | 青草视频在线 | 久久久久久久久黄色 | 六月激情久久 | 久久免费视频网 | 天天操天天干天天操天天干 | 四虎国产精 | 亚洲最新视频在线播放 | 在线观看日韩专区 | 黄色一级网 | 欧美资源 | 久久久综合精品 | 国产精品久久久久婷婷二区次 | 亚洲天堂网在线播放 | 人人爽人人澡 | 色综合天天狠天天透天天伊人 | 日韩系列在线 | 区一区二区三在线观看 | 日韩精品免费在线视频 | 国产视频999| 国产色婷婷| 国产精品乱码在线 | 欧美日产在线观看 | 四虎永久网站 | 亚洲一区二区三区毛片 | 国产精品视频观看 | 国产日本亚洲高清 | 国产麻豆精品传媒av国产下载 | 毛片激情永久免费 | 国产一区在线观看视频 | 日韩av免费一区二区 | 91高清视频免费 | 精品综合久久 | 亚洲三级在线播放 | 国产精品永久免费 | www国产精品com | 一区在线观看 | 成 人 免费 黄 色 视频 | 91麻豆精品一区二区三区 | 韩国av电影网 | 伊人久久五月天 | 日本精品一 | 五月天国产精品 | 中文字幕成人av | 国产手机在线观看 | 蜜臀久久99静品久久久久久 | 久草电影免费在线观看 | 国产成人av一区二区三区在线观看 | 射久久久 | 成人午夜性影院 | 国产爽视频 | 中文字幕你懂的 | 日一日干一干 | 久久久久国产一区二区 | av中文字幕av | 国产中文视频 | 久久五月婷婷综合 | 国产精品嫩草在线 | 国产精品欧美一区二区三区不卡 | 国产高清中文字幕 | 在线视频日韩 | 黄色特一级片 | 亚洲高清不卡av | 色在线观看网站 | 国产伦精品一区二区三区在线 | 黄色av成人在线观看 | 免费看三级黄色片 | 92精品国产成人观看免费 | 国产高清免费视频 | 久久伊人色综合 | www.香蕉视频 | 日韩精品一区在线观看 | 色com| 成人中文字幕在线 | 国产视频在线免费观看 | 欧美日韩免费视频 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 97色婷婷成人综合在线观看 | 美女一二三区 | 久久免费看a级毛毛片 | 亚州成人av在线 | 国产区精品视频 | 国产一区二区精品 | av网站在线观看免费 | 国产精品久久久久久99 | 久久久精品欧美一区二区免费 | 69人人| 国产精品视频免费在线观看 | 中文字幕在线有码 | 日韩视频一区二区在线观看 | 日韩精品在线视频 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 日韩精品一区二区三区第95 | 日韩免费播放 | 久久精品最新 | 黄色免费网站下载 | 国产精品一区二区免费看 | 玖玖在线看| 色综合天天干 | 色婷婷av在线 | 亚洲精品玖玖玖av在线看 | 美女网站视频免费黄 | av在线播放免费 | 欧美激情视频在线免费观看 | 国产精品久久久久久麻豆一区 | 午夜精品一二区 | 九色91在线| 色噜噜在线观看 | 五月天中文在线 | 人人草在线视频 | 成人黄色中文字幕 | 日本黄色免费看 | 婷婷中文字幕 | 黄色国产高清 | 91av国产视频| 超碰人人av | 婷婷色av| 欧美成人xxxxxxxx | 国产第一页在线观看 | 亚洲视频免费 | 国产高清无线码2021 | 麻豆视频国产在线观看 | 97国产超碰在线 | 13日本xxxxxⅹxxx20 | 欧美日韩成人 | 特级黄色片免费看 | 91av视频在线播放 | 国产高清久久 | 看国产黄色片 | 91精品国产成 | 亚洲国产精品影院 | 青草视频在线看 | 亚洲精品国产精品国自产观看 | 黄色视屏av | 午夜精品一二区 | 中文字幕在线观看第一页 | 91桃色免费观看 | 久久久精品免费看 | 在线 精品 国产 | 很黄很黄的网站免费的 | 婷婷亚洲综合五月天小说 | 一级一片免费看 | 日韩精品一区二区三区中文字幕 | 日本中文在线播放 | 97操碰 | 亚洲一区免费在线 | 国产精品视频不卡 | 色天天综合网 | 国产一区在线视频 | 日韩久久一区 | 91在线九色 | 成人av中文字幕在线观看 | 9幺看片 | 美女网站视频一区 | 欧美一级片在线观看视频 | 美女免费电影 | 黄色网在线免费观看 | 91精选在线 | 日韩中文字幕a | 色就色,综合激情 | 99久久99久久 | 最近2019年日本中文免费字幕 | 日韩高清网站 | 视频国产在线 | 国产精品乱码久久久久久1区2区 | 亚洲美女视频网 | 免费在线观看视频一区 | 中文字幕资源在线 | 亚洲最新精品 | 国产剧情在线一区 | 黄色中文字幕在线 | 又爽又黄又刺激的视频 | 欧美一区免费在线观看 | 麻豆视频国产精品 | 久草免费福利在线观看 | 国产一区观看 | 97在线成人 | 国产伦精品一区二区三区四区视频 | 免费一级特黄毛大片 | 高清有码中文字幕 | 91在线中文 | 国产午夜三级一二三区 | 欧美一级视频一区 | 国产在线观看免 | 中文字幕在线播放视频 | 国产精品爽爽久久久久久蜜臀 | 久草观看| 久久久精品网站 | 99精品视频在线观看视频 | 国产成人精品一区二区在线观看 | 久久国产精品一区二区三区四区 | 黄色a视频免费 | 久久亚洲欧美日韩精品专区 | 久久久精品一区二区三区 | 久久国产精品精品国产色婷婷 | 波多野结衣一区二区 | 69久久久久久久 | 亚洲欧洲精品在线 | 国产免费精彩视频 | 天天操操| av在线之家电影网站 | 黄色大片日本 | 成人在线播放视频 | 黄色毛片网站在线观看 | 激情av在线资源 | 久久不卡日韩美女 | 亚洲视频中文 | 国产 一区二区三区 在线 | 五月婷婷色丁香 | 免费av看片 | 国产精品99久久久久久有的能看 | 色全色在线资源网 | 中文国产在线观看 | 午夜在线国产 | 中文字幕av全部资源www中文字幕在线观看 | 韩国一区二区av | 国产一级在线播放 | 国产黄色大片免费看 | av国产网站 | 在线电影日韩 | 视频在线一区二区三区 | 久久久www免费电影网 | 日本不卡123区 | 久草男人天堂 | 国产精品一区专区欧美日韩 | 天天艹天天| 97超级碰碰 | 国产精品毛片一区二区 | 在线有码中文字幕 | 91成年视频| 日韩精品一区电影 | 88av色| 中文字幕日韩av | 久久国产精品99久久久久久进口 | 97伊人网| 狠狠色噜噜狠狠狠狠2021天天 | www.xxx.性狂虐 | 久久久久久伊人 | 亚洲综合激情 | 九色视频网站 | 97免费公开视频 | 国产精品一区二区久久国产 | 久久免费中文视频 | 国产午夜精品视频 | 日日久视频 | 欧美小视频在线 | 天天插天天干 | 中文字幕成人在线 | 99 色 | 蜜臀91丨九色丨蝌蚪老版 | 亚洲午夜久久久久久久久久久 | 狠狠色丁香婷婷综合欧美 | 婷婷夜夜| free,性欧美 九九交易行官网 | 狠狠干在线播放 | 久久超碰97| 69国产盗摄一区二区三区五区 | 一区 二区 精品 | 久草在线免费在线观看 | 友田真希av | 欧美激情综合色 | 久久99精品波多结衣一区 | 国产91综合一区在线观看 | 日韩高清一区在线 | 日韩最新在线视频 | av中文在线观看 | 日韩在线二区 | 国产精品久久久久久久久久ktv | 国产在线色视频 | 大胆欧美gogo免费视频一二区 | 视频 天天草 | 98涩涩国产露脸精品国产网 | 久久免费播放视频 | 毛片视频网址 | 日韩高清不卡在线 | 探花视频在线版播放免费观看 | 亚洲精品久久久久久国 | 久久综合桃花 | 欧美日韩一区二区三区不卡 | av韩国在线 | 丁香六月在线观看 | 国产在线a视频 | 成人黄色在线播放 | 在线观看蜜桃视频 | 91在线入口| 少妇按摩av | 欧美a级一区二区 | av高清影院| 在线视频 国产 日韩 | 欧美 日韩 久久 | 国产高清视频色在线www | 美女国内精品自产拍在线播放 | 欧美成人猛片 | 久久国产热视频 | 成人污视频在线观看 | 992tv在线| 毛片无卡免费无播放器 | 精品国偷自产在线 | 四虎在线免费观看 | 奇米777777| 69视频国产| 鲁一鲁影院 | 天天天天天天天天操 | 亚洲精品永久免费视频 | 在线之家免费在线观看电影 | 国内精品在线观看视频 | 欧美另类网站 | 黄色软件在线观看免费 | 色欧美日韩 | 婷婷激情av | 日韩电影在线视频 | 久久国产精品视频免费看 | 日韩久久精品一区二区 | 男女激情片在线观看 | 日韩午夜精品 | 国产成人精品综合久久久 | 国产一级视频在线观看 | 色婷五月| 最近中文字幕免费av | 久久电影色| 国产精品亚洲综合久久 | 婷婷网址| 欧美三人交 | 夜夜爽88888免费视频4848 | 最新婷婷色 | 精品视频久久久 | 66av99精品福利视频在线 | 午夜影院三级 | 久久久久久麻豆 | 亚洲激情视频在线 | 丰满少妇久久久 | 精品资源在线 | 久久久综合精品 | 中文字幕在线观看日本 | 人成免费网站 | 99r精品视频在线观看 | 国产麻豆视频免费观看 | 国内精品久久久久影院优 | 99在线视频播放 | a视频在线播放 | 久久免费在线观看视频 | 国产美女搞久久 | 亚洲另类视频 | 久久精品成人热国产成 | 中文字幕丝袜一区二区 | 免费看黄色毛片 | 国产在线观看你懂得 | 天天插天天爱 | adn—256中文在线观看 | 免费成人av在线 | 欧美综合色在线图区 | 欧美另类美少妇69xxxx | 超碰久热| 美国人与动物xxxx | 五月婷婷激情网 | 日韩精品一区二区三区免费观看视频 | 美女视频是黄的免费观看 | 国产精品国产三级国产不产一地 | 国产男女无遮挡猛进猛出在线观看 | 欧美成人一区二区 | 高清有码中文字幕 | 黄色大全视频 | 亚洲不卡123 | 一区二区三区在线观看 | av一级一片| 久草在线费播放视频 | 国产精品午夜在线观看 | 99r在线 | 去看片| 国产精品theporn | 久久精品国产精品亚洲 | 麻豆视频国产在线观看 | 亚洲精品伦理在线 | 一区二区三区四区久久 | 亚洲综合视频在线观看 | 香蕉免费 | 韩国一区在线 | 97在线看片 | 久久久久久久影院 | 日本精品午夜 | 久久久久久久久久免费 | 日韩在观看线 | 欧洲精品一区二区 | 99热99| 99自拍视频在线观看 | 亚洲一区二区精品 | a午夜在线 | 亚洲婷婷综合色高清在线 | 日日爽天天操 | 亚洲成人av影片 | 国产精品va在线观看入 | 2020天天干夜夜爽 | 人人超碰在线 | 就要干b | 人人爽人人爽人人片 | 97热在线观看 | 狠狠色丁香婷婷综合久小说久 | 中文字幕黄网 | 黄色网www | 天天干天天爽 | 91综合色 | 在线观看一级视频 | 色综合婷婷 | 国产视频一级 | 国产精品亚洲综合久久 | 91精品对白一区国产伦 | 日韩欧美视频在线免费观看 | 国产成人黄色 | 91九色蝌蚪在线 | 色哟哟国产精品 | 视频在线观看入口黄最新永久免费国产 | 探花视频免费观看高清视频 | 中文字幕久久精品一区 | 天天干天天操天天操 | 一级黄色片在线免费看 | 99热精品在线观看 | 激情网综合 | 97av在线视频免费播放 | 波多野结衣视频网址 | 四虎影院在线观看av | 四虎在线影视 | 国产99久久久国产 | 国产精品专区h在线观看 | 国产尤物一区二区三区 | 国产玖玖精品视频 | 国产一区二区在线播放视频 | 天天操天天操天天操天天操天天操 | 天天射天天做 | 国产成人精品在线观看 | 最近最新mv字幕免费观看 | 精品av网站 | 国产一区视频在线观看免费 | 国产精品theporn | 韩国av一区二区三区 | a天堂一码二码专区 | 国产精品com | 99精品免费网 | 亚洲片在线资源 | www色片| 热久久免费国产视频 | 久久99久久99精品免视看婷婷 | 黄色免费视频在线观看 | 色999五月色 | 91在线精品播放 | 色中色资源站 | 久久tv| 欧美黄在线 | www.com久久久 | 国产一区在线不卡 | 五月天婷亚洲天综合网精品偷 | 欧洲激情在线 | 干狠狠 | 天天色天天上天天操 | 开心激情综合网 | 日韩色视频在线观看 | 欧美久久久久 | 日韩在线视频网 | 久久夜色精品国产欧美一区麻豆 | 三级黄色大片在线观看 | 九九九毛片 | 91精品综合在线观看 | 在线观看黄色国产 | 岛国一区在线 | 久久久麻豆精品一区二区 | 日本久久高清视频 | 激情导航 | 在线视频 精品 | 日韩高清一区二区 | 久久国产精品免费观看 | av在线播放免费 | 在线天堂v | 国产一区视频在线观看免费 | 91丨九色丨国产女 | a久久久久久 | 国产区 在线| 久久久久久久影视 | 国产精品99久久久久久武松影视 | 婷婷色综 | 精品嫩模福利一区二区蜜臀 | 99九九热只有国产精品 | 91麻豆精品国产91久久久久久久久 | 国产亚洲精品久久久久久网站 | 丁香婷婷网| 国产精品久久嫩一区二区免费 | 日日爱av| 五月天综合色 | 免费欧美 | 午夜三级毛片 | 在线免费视频a | www久久精品 | 日韩在线影视 | 精品久久综合 | 国产三级精品三级在线观看 | 国产高清视频免费在线观看 | 国产超碰97 | 久久黄色a级片 | 免费的国产精品 | 欧美日韩国产一二 | 亚洲精品国偷自产在线99热 | 色综合天天天天做夜夜夜夜做 | 91av在线精品 | 91免费高清在线观看 | 成人黄色免费在线观看 | 久久免费的视频 | 韩日电影在线观看 | 狠狠色噜噜狠狠狠狠2022 | 能在线观看的日韩av | 久草在线资源观看 | 国产91成人在在线播放 | av女优中文字幕在线观看 | 国产精品成人一区二区三区 | 特黄特黄的视频 | 免费在线播放av电影 | 免费在线观看国产精品 | 亚洲经典在线 | 成人国产一区二区 | 亚洲丁香久久久 | 国产综合福利在线 | 日韩精品久久久久久中文字幕8 | 成人午夜精品福利免费 | 国产精品九九久久久久久久 | 成人91在线| 日日夜夜婷婷 | 81精品国产乱码久久久久久 | 91超级碰 | 99精品久久久久久久久久综合 | 激情图片qvod | 激情综合网五月婷婷 | 国产成人精品综合 | 永久免费看av | 综合久久综合久久 | 精品乱码一区二区三四区 | 久久久久久黄色 | 免费国产在线精品 | 久久国产精品网站 | 国产 视频 高清 免费 | 中文字幕在线观看视频一区二区三区 | 91av色| 三级av中文字幕 | 91视频麻豆视频 | 中文字幕 二区 | 中中文字幕av| 国产高清在线一区 | 免费成人短视频 | 国内视频在线 | 香蕉视频日本 | 五月天婷婷免费视频 | 欧美精品一区二区在线播放 | 亚洲高清在线视频 | 国产色视频123区 | 国产精品一区二区吃奶在线观看 | 在线免费国产视频 | 久久视频免费在线观看 | 中文理论片 | 久久久免费毛片 | 欧美黄色成人 | 麻豆成人在线观看 | 麻豆视频免费播放 | 亚洲国产精品电影在线观看 | 国产人成看黄久久久久久久久 | 黄色成人影视 | 中文字幕人成不卡一区 | 99久热在线精品 | 久久精品成人 | 日本婷婷色 | 欧美日韩国产色综合一二三四 | 成人va在线观看 | 亚洲欧美激情插 | 午夜视频99| 久久久免费网站 | 最新在线你懂的 | 日狠狠| 中文字幕在线观看视频网站 | 91久久精 | 一二三精品视频 | 成人一级在线 | 黄色网中文字幕 | 色婷婷精品大在线视频 | 蜜臀久久99静品久久久久久 | 久久精品免费观看 | 日韩电影久久久 | 黄色影院在线免费观看 | 国产精品视频线看 | 精品亚洲va在线va天堂资源站 | 天天操天天操天天操天天操 | 天天综合色 | 国产精品一区二区久久久 | 男女视频91 | 日韩欧美在线免费观看 | 91精品久久久久久综合乱菊 | 国产中文字幕网 | 久久久久久麻豆 | 国产黄视频在线观看 | 日韩高清二区 | 国产福利免费在线观看 | 亚洲精品久久激情国产片 | 久久精品亚洲国产 | 国产精品乱码久久久久 | 黄免费在线观看 | 欧美一区二区三区四区夜夜大片 | 久草在线免费新视频 | 亚洲天堂va | 日韩午夜小视频 | 亚洲永久精品在线 | 中文字幕在线视频网站 | 久久视讯 | 久久精品日韩 | 激情久久久久久久久久久久久久久久 | 韩国一区二区三区视频 | 久草在线欧美 | 天天综合网久久 | 日韩高清免费在线观看 | 色综合咪咪久久网 | 在线国产99| 日韩电影中文,亚洲精品乱码 | 综合久久一本 | 天天操天天添天天吹 | 色窝资源 | 日本精a在线观看 | 欧美日韩精品免费观看视频 | 久久亚洲人 | 狠狠婷婷| 综合网成人 | 一区二区三区四区五区在线视频 | 欧美一级视频免费看 | 日韩免费小视频 | 免费亚洲视频 | 日日干夜夜草 | 色欲综合视频天天天 | 成人av在线一区二区 | 在线精品一区二区 | 成人网页在线免费观看 | 狠狠干成人 | 在线看片a | 日日夜夜精品免费视频 | 日韩无在线 | 99婷婷狠狠成为人免费视频 | 伊人久久精品久久亚洲一区 | 狠狠操欧美 | 欧美影片 | 日本黄色a级大片 | 日本精品在线看 | 国产精品久久在线观看 | 五月激情五月激情 | 国产视频资源 | 激情伊人五月天久久综合 | 成人免费观看电影 | 亚洲理论在线观看 | 狠狠成人 | 日韩成人精品一区二区三区 | 亚洲va欧美 | 亚洲视频在线观看免费 | 亚洲综合狠狠干 | 久久午夜电影网 | 久久久国产日韩 | 天天色天天艹 | 九九在线精品视频 | 久久资源总站 | 啪一啪在线 | 国产精品欧美一区二区 | 色婷婷88av视频一二三区 | 91av在线视频播放 | 激情久久一区二区三区 | 久草青青在线观看 | 美女一区网站 | 99视频久 | 2022中文字幕在线观看 | 黄色的网站在线 | 国产精品私人影院 | 天天曰天天 | 久草免费在线视频 | 国产国语在线 | 91入口在线观看 | 在线国产不卡 | 99精品国产一区二区三区麻豆 | 日韩在线首页 | 欧美精品一二三 | 久草在线网址 | 久久综合导航 | 天天操综合 | 午夜免费在线观看 | 国产精品一区二区久久久久 | 在线草 | 天天操天天舔天天爽 | 日日爱影视| 激情婷婷网 | 国产日韩欧美在线播放 | 国产原创在线 | 色综合久久久网 | 伊人春色电影网 | 国产精品成人久久久 | 三级av黄色 | 欧美另类视频 | 91传媒免费在线观看 | 亚洲精品久久久久中文字幕二区 | 色综合天天视频在线观看 | 激情欧美一区二区三区免费看 | 天天综合狠狠精品 | 日韩av一区二区在线影视 | 中文字幕 国产 一区 | 天天射天天干天天插 | 亚洲精品日韩一区二区电影 | 色噜噜日韩精品欧美一区二区 | 国产无遮挡又黄又爽在线观看 | 青草草在线视频 | 欧美综合色在线图区 | 九九涩涩av台湾日本热热 | 精品国产一区二区三区久久久久久 | 精品1区2区| 91精品夜夜 | 片黄色毛片黄色毛片 | 国产九色在线播放九色 | 国产在线精品一区二区 | 国内视频1区| 国产精品高潮呻吟久久久久 | 国产免费久久久久 | av 一区二区三区 | 97涩涩视频 | 成人午夜黄色影院 | 亚洲综合在线观看视频 | 日韩理论电影在线 | 超碰97成人| 欧美福利久久 | 一区二区三区久久精品 | 成人在线免费视频观看 | 蜜臀av在线一区二区三区 | 高清色免费| 99热在线免费观看 | 在线视频 成人 | 国产1区在线观看 | 日韩av在线免费播放 | 一级黄色免费网站 | 夜夜躁日日躁狠狠躁 | 亚洲国产av精品毛片鲁大师 | 丁香花在线视频观看免费 | 女人魂免费观看 | 亚洲精品国产综合99久久夜夜嗨 | 色爱区综合激月婷婷 | 成人免费xyz网站 | 久久精品视频99 | 人人干人人添 | 久视频在线 | 香蕉网站在线观看 | 97电影院在线观看 | 国产成人精品一区二区三区免费 | 欧美一级免费黄色片 | 日韩精品久久久免费观看夜色 | 日日干日日色 | 午夜视频导航 | 成人在线视频在线观看 | 国产一性一爱一乱一交 | 免费一级特黄毛大片 | 欧美性黑人 | 成人aaa毛片 | 免费看成年人 | 成年人电影免费在线观看 | 亚洲成人免费在线 | 国产精品久久久久久久久久妇女 | 日韩综合一区二区 | 免费在线一区二区 | 九九免费在线观看 | 国产成人综合精品 | 久热久草在线 | 国产精品福利午夜在线观看 | 国产 日韩 欧美 中文 在线播放 | 日韩免费一级电影 | 特级黄色视频毛片 | 日韩一级电影网站 | 国产精品一区二区精品视频免费看 | 亚洲伊人av| adc在线观看 | 久久 一区 | 日韩免费网址 | 亚洲欧美精品一区二区 | 日韩在线色 | 综合天天久久 | 午夜精品婷婷 | av福利在线看 | 久久情爱 | 性色av一区二区三区在线观看 | 天天做综合网 | 欧美激情视频三区 | 激情av在线资源 | 伊人中文网| 亚洲精品中文字幕在线观看 | 香蕉蜜桃视频 | 九九免费在线观看 | 国产激情久久久 | 91欧美视频网站 | 日日爽夜夜爽 | 日韩在线视频网站 | 黄色毛片在线看 | 中文av免费 | 欧美一级日韩免费不卡 | 一级特黄aaa大片在线观看 | 久久99精品久久久久久久久久久久 | 欧美日韩免费观看一区二区三区 | 日韩剧情 | 国产最新视频在线 | 日韩婷婷| 综合精品在线 | 亚洲精品毛片一级91精品 | 亚洲黄色a | 精品国产乱码久久久久久三级人 | 国产爽视频 | 亚洲黄色一级大片 | 99精品免费在线观看 | 永久免费毛片 | 中文字幕在线免费看 | 一区二区三区三区在线 | 久久9精品| 国产日韩欧美在线 | 99热在线免费观看 | 国产成人福利在线 |