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

PMS安裝APP流程解析

移動開發 Android
PMS(PackageManagerService)是 Android 包管理機制的核心,負責對包進行管理。

PMS(PackageManagerService)是Android包管理機制的核心,負責對包進行管理。

PMS安裝APP流程

  • 獲取APK文件:在應用程序安裝之前,需要先獲取APK文件。APK文件是Android應用程序的安裝包,包含了應用程序的代碼和資源文件。
  • 解析APK文件:PMS需要對APK文件進行解析,以獲取應用程序的信息和組件信息,例如應用程序包名、版本號、權限列表、組件列表(如Activity、Service、Receiver等)。這一步通常由PackageParser類完成。
  • 校驗應用程序簽名:在安裝之前,PMS會校驗應用程序的簽名,以確保應用程序沒有被篡改或偽裝。簽名校驗是保證應用程序安全性的重要步驟。
  • 安裝應用:如果校驗通過,PMS會為應用程序分配一個UID,并繼續進行安裝過程。這通常涉及文件復制、處理安裝參數等步驟。

文件復制

PackageManagerService.java#installStage安裝階段:

  • 創建了一個InstallParams對象
  • 創建并發送了一個INIT_COPY的Message消息。
  • InstallParams繼承自HandlerParams,用來記錄安裝應用的參數。

InstallParams中有一個成員變量mArgs,是一個抽象類型InstallArgs,主要是用來執行APK的復制,真正的實現類包括FileInstallArgs用來完成非ASEC應用的安裝,ASEC全稱是Android Secure External Cache,MoveInstallArgs用來完成已安裝應用的移動安裝。

void installStage(String packageName, File stagedDir, String stagedCid,
    IPackageInstallObserver2 observer, PackageInstaller.SessionParams sessionParams,
    String installerPackageName, int installerUid, UserHandle user,
    Certificate[][] certificates) {
    ...
    final Message msg = mHandler.obtainMessage(INIT_COPY);
    final int installReason = fixUpInstallReason(installerPackageName, installerUid,
        sessionParams.installReason);
    final InstallParams params = new InstallParams(origin, null, observer,
        sessionParams.installFlags, installerPackageName, sessionParams.volumeUuid,
        verificationInfo, user, sessionParams.abiOverride,
        sessionParams.grantedRuntimePermissions, certificates, installReason);
    params.setTraceMethod("installStage").setTraceCookie(System.identityHashCode(params));
    msg.obj = params;
    ...
    //發送信息拷貝INIT_COPY 信息
    mHandler.sendMessage(msg);
}

PackageManagerService.java#PackageHandler包處理:connectToService()用于檢查和復制可移動文件的服務發送MCS_BOUND信息,觸發處理第一個安裝請求。

void doHandleMessage(Message msg) {
    switch (msg.what) {
        case INIT_COPY: 
            HandlerParams params = (HandlerParams) msg.obj;
            int idx = mPendingInstalls.size();
            if (DEBUG_INSTALL) Slog.i(TAG, "init_copy idx=" + idx + ": " + params);
            //mBound用于標識是否綁定了服務,默認值為false
            if (!mBound) { 
                Trace.asyncTraceBegin(TRACE_TAG_PACKAGE_MANAGER, "bindingMCS", System.identityHashCode(mHandler));
                //connectToService里面的DefaultContainerService是用于檢查和復制可移動文件的服務
                if (!connectToService()) {  
                    Slog.e(TAG, "Failed to bind to media container service");
                    params.serviceError();
                    Trace.asyncTraceEnd(TRACE_TAG_PACKAGE_MANAGER, "bindingMCS", System.identityHashCode(mHandler));
                    if (params.traceMethod != null) {
                        Trace.asyncTraceEnd(TRACE_TAG_PACKAGE_MANAGER, params.traceMethod, params.traceCookie);
                    }
                    //綁定服務失敗則return
                    return;
                } else { 
                    //綁定服務成功,將請求添加到ArrayList類型的mPendingInstalls中,等待處理
                    mPendingInstalls.add(idx, params);
                }
            } else {  
                //已經綁定服務
                mPendingInstalls.add(idx, params);
                if (idx == 0) {   //5
                    //發送MCS_BOUND類型的消息,觸發處理第一個安裝請求
                    mHandler.sendEmptyMessage(MCS_BOUND);
                }
            }
            break;
        ....
    }
}

MCS_BOUND 流程處理:

case MCS_BOUND: 
    if (mContainerService == null) {         //判斷是否已經綁定了服務
        if (!mBound) {            //綁定服務的標識位,沒有綁定成功
            Slog.e(TAG, "Cannot bind to media container service");
            for (HandlerParams params : mPendingInstalls) {
                params.serviceError();
                Trace.asyncTraceEnd(TRACE_TAG_PACKAGE_MANAGER, "queueInstall", System.identityHashCode(params));
                if (params.traceMethod != null) {
                    Trace.asyncTraceEnd(TRACE_TAG_PACKAGE_MANAGER, params.traceMethod, params.traceCookie);
                }
                return;
            }   
            //綁定失敗,清空安裝請求隊列
            mPendingInstalls.clear();
        } else {             // 綁定成功
            //繼續等待綁定服務
            Slog.w(TAG, "Waiting to connect to media container service");
        }
    } else if (mPendingInstalls.size() > 0) {        //安裝APK的隊列
        HandlerParams params = mPendingInstalls.get(0);   //安裝隊列有參數
        if (params != null) {
            Trace.asyncTraceEnd(TRACE_TAG_PACKAGE_MANAGER, "queueInstall", System.identityHashCode(params));
            Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "startCopy");
            if (params.startCopy()) {               //HandlerParams開始拷貝
                if (DEBUG_SD_INSTALL) Log.i(TAG, "Checking for more work or unbind...");
                    //如果APK安裝成功,刪除本次安裝請求
                    if (mPendingInstalls.size() > 0) {
                        mPendingInstalls.remove(0);
                    }
                    if (mPendingInstalls.size() == 0) {  //安裝隊列沒有參數
                        if (mBound) {            //已經綁定服務,需要發送一個解綁MCS_UNBIND的message
                            //如果沒有安裝請求了,發送解綁服務的請求
                            if (DEBUG_SD_INSTALL) Log.i(TAG, "Posting delayed MCS_UNBIND");
                                removeMessages(MCS_UNBIND);
                                Message ubmsg = obtainMessage(MCS_UNBIND);
                                sendMessageDelayed(ubmsg, 10000);
                            }
                        } else {
                            if (DEBUG_SD_INSTALL) Log.i(TAG, "Posting MCS_BOUND for next work");
                                //如果還有其他的安裝請求,接著發送MCS_BOUND消息繼續處理剩余的安裝請求       
                                mHandler.sendEmptyMessage(MCS_BOUND);
                            }
                        }
                        Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
                    }else {
                        Slog.w(TAG, "Empty queue");
                    }
            break;

DefaultContainerService: 真正處理復制APP文件的類

PackageManagerService.java#HandlerParams#startCopy開始復制:

  • 嘗試安裝次數是否超過4次,超過就移除安裝的列表數據
  • handleStartCopy : //復制APK文件
  • handleReturnCode : //開始安裝APK
final boolean startCopy() {
    boolean res;
    try {
        if (DEBUG_INSTALL) Slog.i(TAG, "startCopy " + mUser + ": " + this);
        //startCopy方法嘗試的次數,超過了4次,就放棄這個安裝請求
        if (++mRetries > MAX_RETRIES) {
            Slog.w(TAG, "Failed to invoke remote methods on default container service. Giving up");
            mHandler.sendEmptyMessage(MCS_GIVE_UP);  //發送放棄安裝信息
            handleServiceError();
            return false;
        } else {
            handleStartCopy();      //復制APK文件
            res = true;
        }
    } catch (RemoteException e) {
        if (DEBUG_INSTALL) Slog.i(TAG, "Posting install MCS_RECONNECT");
            mHandler.sendEmptyMessage(MCS_RECONNECT);
            res = false;
        }
        handleReturnCode();   //處理復制APK后的安裝APK邏輯
        return res;
    }
}

PackageManagerService.java#InstallParams#handleStartCopy復制apk文件:

  • 獲取APP的部分安裝信息
  • 獲取APP的安裝位置
  • InstallArgs復制APP----> FileInstallArgs復制APP---->DefaultContainerService復制APP

InstallArgs做為抽象類,FileInstallArgs和MoveInstallArgs繼承InstallArgs FileInstallArgs對data/data/包名(系統應用),MoveInstallArgs用于處理已安裝APK的移動:

public void handleStartCopy() throws RemoteException {
    ...
    //確定APK的安裝位置。onSd:安裝到SD卡, onInt:內部存儲即Data分區,ephemeral:安裝到臨時存儲(Instant Apps安裝)            
    final boolean onSd = (installFlags & PackageManager.INSTALL_EXTERNAL) != 0;
    final boolean onInt = (installFlags & PackageManager.INSTALL_INTERNAL) != 0;
    final boolean ephemeral = (installFlags & PackageManager.INSTALL_INSTANT_APP) != 0;
    PackageInfoLite pkgLite = null;
    if (onInt && onSd) {
        // APK不能同時安裝在SD卡和Data分區
        Slog.w(TAG, "Conflicting flags specified for installing on both internal and external");
        ret = PackageManager.INSTALL_FAILED_INVALID_INSTALL_LOCATION;
        //安裝標志沖突,Instant Apps不能安裝到SD卡中
    } else if (onSd && ephemeral) {
        Slog.w(TAG,  "Conflicting flags specified for installing ephemeral on external");
        ret = PackageManager.INSTALL_FAILED_INVALID_INSTALL_LOCATION;
    } else {
        //獲取APK的少量的信息
        pkgLite = mContainerService.getMinimalPackageInfo(origin.resolvedPath, installFlags, packageAbiOverride);
        if (DEBUG_EPHEMERAL && ephemeral) {
            Slog.v(TAG, "pkgLite for install: " + pkgLite);
        }
        ...
        if (ret == PackageManager.INSTALL_SUCCEEDED) {
            //判斷安裝的位置
            int loc = pkgLite.recommendedInstallLocation;
            if (loc == PackageHelper.RECOMMEND_FAILED_INVALID_LOCATION) {
               ret = PackageManager.INSTALL_FAILED_INVALID_INSTALL_LOCATION;
            } else if (loc == PackageHelper.RECOMMEND_FAILED_ALREADY_EXISTS) {
               ret = PackageManager.INSTALL_FAILED_ALREADY_EXISTS;
            } 
            ...
        }else {
            loc = installLocationPolicy(pkgLite);     //確定APP安裝的位置
             ...
        }
    }
    //根據InstallParams創建InstallArgs對象
    final InstallArgs args = createInstallArgs(this);    InstallArgs作用時:復制和重命名APK
    mArgs = args;
    if (ret == PackageManager.INSTALL_SUCCEEDED) {
        ...
        if (!origin.existing && requiredUid != -1 && isVerificationEnabled(verifierUser.getIdentifier(), installFlags, installerUid)) {
           ...
        } else{
            ret = args.copyApk(mContainerService, true);     // InstallArgs開始復制APP
        }
    }
    mRet = ret;
}

private int doCopyApk(IMediaContainerService imcs, boolean temp) throws RemoteException {
    ...
    try {
        final boolean isEphemeral = (installFlags & PackageManager.INSTALL_INSTANT_APP) != 0;
        //創建臨時文件存儲目錄
        final File tempDir = mInstallerService.allocateStageDirLegacy(volumeUuid, isEphemeral);
        codeFile = tempDir;
        resourceFile = tempDir;
    } catch (IOException e) {
        Slog.w(TAG, "Failed to create copy file: " + e);
        return PackageManager.INSTALL_FAILED_INSUFFICIENT_STORAGE;
    }
    ...
    int ret = PackageManager.INSTALL_SUCCEEDED;
    ret = imcs.copyPackage(origin.file.getAbsolutePath(), target);
    ...
    return ret;
}

安裝APK

  • 在安裝前檢查是否環境的可靠,如果不可靠會清除復制的APK文件。
  • installPackageTracedLI其內部會調用PMS的installPackageLI方法,進行APP安裝。
  • 處理安裝后操作,如果安裝不成功,刪除掉安裝相關的目錄與文件。
final boolean startCopy() {
    ......
    handleStartCopy();  //APP文件復制拷貝
    .....
    //開始安裝APP
    handleReturnCode();
}
   
void handleReturnCode() {
    ........
    if (mArgs != null) {
        processPendingInstall(mArgs, mRet);
    }
}

private void processPendingInstall(final InstallArgs args, final int currentStatus) {
    mHandler.post(new Runnable() {
        public void run() {
            mHandler.removeCallbacks(this);
            PackageInstalledInfo res = new PackageInstalledInfo();
            res.setReturnCode(currentStatus);
            res.uid = -1;
            res.pkg = null;
            res.removedInfo = null;
            if (res.returnCode == PackageManager.INSTALL_SUCCEEDED) {
                //安裝前處理
                args.doPreInstall(res.returnCode);
                synchronized (mInstallLock) {
                    //開始安裝
                    installPackageTracedLI(args, res);
                }
                //安裝后收尾
                args.doPostInstall(res.returnCode, res.uid);
            }
            ...
        }
    });
}
責任編輯:趙寧寧 來源: 沐雨花飛蝶
相關推薦

2018-05-13 16:00:22

主播APP視頻

2010-06-28 16:12:43

ARP協議

2010-08-04 13:23:29

Flex事件

2010-08-09 11:14:36

Flex事件處理

2022-08-08 19:35:37

HDF驅動開發鴻蒙

2011-09-09 13:23:17

Widget

2016-12-27 09:08:34

HBase數據流程

2010-09-26 14:55:46

JVM內存監控

2011-01-19 17:13:44

Sylpheed

2025-05-28 08:35:00

Nacos服務訂閱流程開發

2013-01-15 10:38:06

iOSAppAppCan

2021-10-15 08:51:09

Linux內存 Kmalloc

2010-01-06 15:16:58

Ubuntu啟動流程

2025-06-03 08:25:00

Nacos開發服務

2024-05-28 00:00:20

ElasticseaJava開發

2011-06-28 15:09:38

Qt Maemo

2011-06-16 15:17:16

2018-01-15 14:50:49

APP轉讓App賬號

2021-09-13 06:43:36

UPS電源安裝

2018-11-28 15:15:52

大數據AI安防
點贊
收藏

51CTO技術棧公眾號

国产精品综合在线视频| 日韩专区精品| 日韩欧美主播在线| 视频在线99| 国产成人精品一区二区无码呦| 亚洲调教视频在线观看| 亚洲天堂精品在线| 亚洲熟妇一区二区| 婷婷激情一区| 一区二区三区日韩欧美精品| 欧美日韩在线观看一区二区三区| 国产老女人乱淫免费| 欧美亚洲网站| 色综合久综合久久综合久鬼88| 精品无码人妻一区| 欧美成年网站| 色www精品视频在线观看| 日本成人在线不卡| 狠狠色伊人亚洲综合网站l| 国产精品一区一区三区| 国产精品视频26uuu| 精品一区在线视频| 亚洲天堂免费| 最近更新的2019中文字幕| 亚洲激情 欧美| 国产精品中文| 欧美无乱码久久久免费午夜一区 | 亚洲综合丝袜美腿| 日韩欧美亚洲日产国产| 免费看av毛片| 国产成人综合自拍| 国产日韩欧美另类| 在线视频一区二区三区四区| 国内激情久久| 久久在线免费视频| 青青草自拍偷拍| 蜜臀av免费一区二区三区| 精品日韩99亚洲| 国产在线观看中文字幕| 国产精品久久久久久久久免费高清| 精品国产福利在线| 成人免费a级片| 午夜av在线播放| 亚洲男人的天堂一区二区| 亚洲精品一区二区三区樱花| 国产51人人成人人人人爽色哟哟| 91毛片在线观看| 好看的日韩精品视频在线| 亚洲精品中文字幕成人片| 国产激情一区二区三区| 99精品在线直播| 国产欧美日韩成人| 国产一区二区三区高清播放| 亚洲va码欧洲m码| 国产成人精品无码高潮| 国产成人精品www牛牛影视| 91pron在线| 狠狠人妻久久久久久综合麻豆| 国产·精品毛片| 国产日韩一区欧美| 欧美日本韩国一区二区| 久久久久久久久久久久久夜| 欧美一级片免费观看| 麻豆app在线观看| 国产欧美日韩三级| 正在播放91九色| a篇片在线观看网站| 一区二区三区精品在线观看| 男人天堂av片| 美女搞黄视频在线观看| 色先锋久久av资源部| 午夜免费福利在线| 中文字幕日韩亚洲| 精品成a人在线观看| 右手影院亚洲欧美| 97精品一区| 精品中文字幕在线| 青青操免费在线视频| 久久午夜影视| 成人妇女免费播放久久久| 国产aⅴ爽av久久久久成人| 国产99久久久国产精品免费看| 国产一区二区视频在线免费观看| 黄色网址在线播放| 成人免费在线视频| 无码精品a∨在线观看中文| **欧美日韩在线观看| 欧美一区二区三区免费大片| 岛国精品一区二区三区| 九色成人国产蝌蚪91| 北条麻妃在线一区二区| 欧美人妻精品一区二区三区 | 黄大色黄女片18第一次| 日韩欧美中文字幕在线视频| 日韩高清欧美高清| 中文字幕91视频| 国产精品黄色| 国产精品中文字幕在线观看| 午夜免费福利视频| 久久蜜桃一区二区| 在线观看17c| 一二三四视频在线中文| 91精品视频网| 91视频免费观看网站| 亚洲激情久久| 欧美一级淫片丝袜脚交| 国产精品无码一区二区桃花视频| 99久久久精品| 青青草免费在线视频观看| 爱情电影社保片一区| 欧美久久久久久蜜桃| aa片在线观看视频在线播放| 亚欧美无遮挡hd高清在线视频 | www.亚洲色图| ijzzijzzij亚洲大全| 电影亚洲精品噜噜在线观看| 日韩精品一区二区三区视频播放| 国产一区在线观看免费| 亚洲激情成人| 97中文在线| 午夜视频在线观看网站| 色先锋资源久久综合| 人妻 日韩 欧美 综合 制服| 99久久亚洲精品| 国产精品第一页在线| 香蕉视频网站在线| 亚洲一区二区三区四区在线免费观看 | 久久久亚洲av波多野结衣| 国产精品www994| 91午夜理伦私人影院| av在线首页| 欧洲色大大久久| 97人妻精品一区二区免费| 国产亚洲激情| 国产日韩精品一区观看| 精品精品导航| 精品国产一区二区三区久久影院 | 欧美色涩在线第一页| 国产熟妇久久777777| 亚洲欧美清纯在线制服| 国产一级特黄a大片99| 蜜臀av在线| 欧美精品一区二区三区蜜桃视频| 国产精品不卡av| 国产ts人妖一区二区| 日韩一区二区高清视频| 国产精品超碰| 6080yy精品一区二区三区| 天堂av手机版| 精品久久久久久久中文字幕| 成人免费无码大片a毛片| 亚洲美女啪啪| 欧美日韩一区综合| h1515四虎成人| 在线丨暗呦小u女国产精品| 亚洲无码精品国产| 中文字幕一区二区在线播放| 天天操狠狠操夜夜操| 香蕉视频国产精品| av免费观看久久| а√在线天堂官网| 亚洲美女喷白浆| 91黑人精品一区二区三区| 中文字幕免费在线观看视频一区| 手机在线成人免费视频| 一区二区电影在线观看| 粉嫩高清一区二区三区精品视频| av午夜在线观看| 亚洲美女精品久久| 91福利免费视频| 亚洲一区二区在线播放相泽| 久久精品综合视频| 麻豆国产91在线播放| 欧美交换配乱吟粗大25p| 偷拍自拍一区| 国产在线日韩在线| 77thz桃花论族在线观看| 亚洲人永久免费| 国产精品主播一区二区| 亚洲成av人片在www色猫咪| 无码人妻精品一区二区三区温州| 丝袜a∨在线一区二区三区不卡| 一区二区成人国产精品| 精品淫伦v久久水蜜桃| 日本伊人精品一区二区三区介绍| 毛片网站在线免费观看| 亚洲第一在线视频| 免费又黄又爽又猛大片午夜| 亚洲欧美日韩在线| 波多野结衣av在线观看| 韩国精品久久久| 亚洲爆乳无码专区| 一本到12不卡视频在线dvd| 欧美日韩一区二 | 久久久久麻豆v国产| 成人看片黄a免费看在线| 一级在线免费视频| 亚洲成人资源| 中文字幕黄色大片| 九九热爱视频精品视频| 不卡视频一区二区| 久久影视精品| 日本亚洲欧洲色| 波多野结衣中文字幕久久| 自拍偷拍亚洲在线| 亚州av在线播放| 日韩一区二区三区免费观看| 亚洲色成人www永久网站| 亚洲电影一区二区| 国产喷水在线观看| 国产欧美日韩亚州综合| 亚洲精品在线视频免费观看| 国产传媒日韩欧美成人| 性生活免费在线观看| 久久精品成人| 日韩人妻无码精品久久久不卡| 欧美激情偷拍自拍| 欧美下载看逼逼| 加勒比久久高清| 亚洲自拍偷拍在线| 欧美天堂一区| 国产精品久久精品| 黑人巨大精品| 日本精品性网站在线观看| 白浆在线视频| 欧美国产日韩中文字幕在线| 福利视频在线| 久久人人爽人人爽爽久久| 1区2区3区在线观看| 亚洲人成人99网站| 欧美日韩在线精品一区二区三区激情综 | 国产精品无圣光一区二区| 偷拍夫妻性生活| 久久综合久久99| 日本黄色网址大全| 91视频你懂的| 亚洲第一黄色网址| 94色蜜桃网一区二区三区| 美女久久久久久久久| 不卡的电视剧免费网站有什么| 免费观看污网站| www.亚洲精品| 成年人在线观看av| 国产天堂亚洲国产碰碰| 天天躁夜夜躁狠狠是什么心态| 久久先锋影音av鲁色资源网| 成人网站免费观看| 久久久噜噜噜久噜久久综合| 日韩人妻无码精品综合区| 久久久99精品久久| 毛片久久久久久| 亚洲欧洲性图库| 亚洲国产精品免费在线观看| 亚洲精品日产精品乱码不卡| 久久精品www| 亚洲va国产va欧美va观看| 日本一级淫片色费放| 欧美性高潮在线| 久久精品国产亚洲av麻豆蜜芽| 欧美性高清videossexo| 亚洲最新av网站| 日韩一区二区三区电影在线观看 | 国产午夜精品全部视频在线播放 | 污片在线免费看| 国产一区二区不卡老阿姨| 精品人妻二区中文字幕| 91影院在线观看| 亚洲天堂最新地址| 亚洲欧美日韩综合aⅴ视频| 日韩aaaaaa| 在线观看成人小视频| 国产三级小视频| 亚洲国产成人久久综合| 成人在线播放视频| 欧美第一黄色网| 欧美片第1页| 91系列在线播放| 色婷婷精品视频| 一区国产精品| 国产农村妇女精品一区二区| 91看片在线免费观看| 成人网在线播放| 亚洲色图欧美色| 亚洲一区成人在线| 国产美女www| 欧美第一区第二区| 国产美女性感在线观看懂色av| 九九热这里只有在线精品视| 深夜成人影院| 91九色在线观看| 欧美军人男男激情gay| 久久艹国产精品| 美国一区二区三区在线播放| 精品人妻在线视频| 亚洲国产精品激情在线观看| 久久久国产精华液| 欧美网站大全在线观看| 天天插天天干天天操| 日韩亚洲一区二区| 亚洲欧洲自拍| 91pron在线| 999久久久国产精品| 欧美日韩成人免费视频| 狠狠狠色丁香婷婷综合久久五月| 少妇精品一区二区三区| 夜夜嗨av一区二区三区网页| 亚洲怡红院av| 亚洲偷欧美偷国内偷| 国产高清自产拍av在线| 91亚洲国产成人久久精品网站| 精品日本12videosex| 青青草精品视频在线| 国产精一区二区三区| 国产馆在线观看| 欧美性色xo影院| 日本高清视频网站| 免费97视频在线精品国自产拍| 国产精品麻豆成人av电影艾秋| 狠狠爱一区二区三区| 精品电影一区| 国产艳妇疯狂做爰视频| 亚洲免费观看高清完整版在线观看熊 | 亚洲free嫩bbb| 欧美艳星介绍134位艳星| 91猫先生在线| 99久久精品国产麻豆演员表| 欧美三级在线免费观看| 欧美精品xxxxbbbb| 在线观看完整版免费| 国产精品美女呻吟| 国产乱码精品一区二区亚洲| 久久精品免费一区二区| 99精品欧美一区二区蜜桃免费| 精国产品一区二区三区a片| 欧美日韩国产经典色站一区二区三区| 成人在线免费观看| 国产精品免费久久久久影院| av在线不卡顿| 五月婷婷六月合| 国产精品欧美久久久久无广告| 波多野结衣人妻| 一本色道久久88综合日韩精品| 天天综合网站| 视频一区国产精品| 蜜臀va亚洲va欧美va天堂| 日本猛少妇色xxxxx免费网站| 在线免费亚洲电影| 成年人视频免费在线观看| 国产精品福利在线观看| 精品国产午夜| 污污的视频免费| 亚洲乱码国产乱码精品精的特点 | 亚洲欧美色婷婷| 欧美va在线| 樱花www成人免费视频| 韩国三级中文字幕hd久久精品| 日本妇女毛茸茸| 精品日本一线二线三线不卡| a级片免费在线观看| 免费看成人片| 蜜桃av噜噜一区二区三区小说| 亚洲精品一区二区三区在线播放| 69堂成人精品免费视频| 亚洲综合图区| 久久精品国产精品青草色艺| 视频一区二区三区入口| 91大神福利视频| 精品久久久久久久人人人人传媒| 热色播在线视频| 手机成人在线| 国内国产精品久久| 国产一级片久久| 国产小视频国产精品| 伊人久久大香| 大伊香蕉精品视频在线| 国产欧美日韩三级| 国产黄色高清视频| 日韩免费在线视频| 久久精品欧美一区| 97人妻精品一区二区三区免| 欧美色电影在线| 精灵使的剑舞无删减版在线观看| 精品综合在线| 激情五月激情综合网| 亚洲免费激情视频| 日韩在线观看免费全| 久久成人福利| 亚洲涩涩在线观看| 天天色综合天天| 日本免费在线观看| 精品国产乱码久久久久久郑州公司| 日韩不卡手机在线v区| 国产一级片视频| 日日骚久久av| 亚州av一区| 日本黄色一级网站| 在线中文字幕不卡| 91桃色在线| 国产免费xxx| 国产女主播一区|