99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

第 51 章:AI、AppFunctions 與計(jì)算機(jī)控制

第 51 章:AI、AppFunctions 與計(jì)算機(jī)控制 Android 已經(jīng)從一個(gè)僅能運(yùn)行應(yīng)用的平臺(tái),演進(jìn)為能夠理解應(yīng)用行為的平臺(tái)。一系列端側(cè)智能服務(wù)將用戶意圖與應(yīng)用行為關(guān)聯(lián)起來:AppFunctions 框架允許助手通過強(qiáng)類型 RPC 契約調(diào)用應(yīng)用的任意功能;計(jì)算機(jī)控制(Computer Control)為 AI 代理提供虛擬顯示器,可在其上完成點(diǎn)擊、滑動(dòng)、截圖操作;OnDeviceIntelligence 在隔離沙箱中運(yùn)行大機(jī)器學(xué)習(xí)模型 —— 大語言模型以及其他生成式或大規(guī)模推理負(fù)載;NNAPI 向所有原生工作負(fù)載暴露硬件加速器。結(jié)合 AppSearch、內(nèi)容捕獲(Content Capture)、AdServices 以及聯(lián)邦學(xué)習(xí),這些子系統(tǒng)共同構(gòu)成了 Android 的 AI 神經(jīng)體系。本章逐層梳理完整調(diào)用鏈路:從公開 SDK 類,經(jīng)由 AIDL 接口、system_server 服務(wù)實(shí)現(xiàn),一直到另一端沙箱進(jìn)程或 HAL 進(jìn)程。每一條代碼路徑均對(duì)應(yīng)當(dāng)前 AOSP 源碼樹中的真實(shí)源文件。51.1 AOSP AI 全景概覽在深入任一框架細(xì)節(jié)之前,先整體瀏覽 AOSP 全部 AI/ML 相關(guān)組件。下圖列出主要子系統(tǒng)、跨進(jìn)程邊界以及組件之間的數(shù)據(jù)流。Mainline 模塊 HAL / 驅(qū)動(dòng)進(jìn)程 隔離 / 沙箱進(jìn)程 目標(biāo)應(yīng)用進(jìn)程 system_server 應(yīng)用進(jìn)程 Binder IPC bindService Binder IPC 隔離 bind 調(diào)用 Binder IPC Binder IPC Binder IPC Binder IPC Binder IPC第三方 / 系統(tǒng)應(yīng)用 AppFunctionManager OnDeviceIntelligenceManager NNAPI C API ComputerControlExtensions AppSearchManager TextClassifierManager ContentCaptureManager AppPredictionManager TopicsManagerAppFunctionManagerServiceImpl OnDeviceIntelligenceManagerService VirtualDeviceManager ComputerControlSession Service ContentCaptureManagerService TextClassificationManagerService AppPredictionManagerServiceAppFunctionService OnDeviceSandboxedInferenceService IsolatedTrainingService NNAPI HAL (IDevice) GPU / DSP / NPUAppSearch 模塊 NeuralNetworks 模塊 OnDevicePersonalization 模塊 AdServices 模塊51.1.1 AOSP 智能子系統(tǒng)分類表子系統(tǒng)API 等級(jí)是否 Mainline 模塊用途AppFunctions16(引入),Android 17 趨于成熟否(框架內(nèi)置)強(qiáng)類型跨應(yīng)用函數(shù)調(diào)用,支持運(yùn)行時(shí)注冊(cè)與狀態(tài)觀測(cè)Computer Control16(Android 16)否(框架 + 擴(kuò)展庫)基于虛擬顯示器實(shí)現(xiàn) AI 驅(qū)動(dòng)的 UI 自動(dòng)化OnDeviceIntelligence15 及以上NeuralNetworks 模塊沙箱化的大語言模型 / 機(jī)器學(xué)習(xí)推理NNAPI8.1 及以上NeuralNetworks 模塊神經(jīng)網(wǎng)絡(luò)推理硬件加速AppSearch12 及以上AppSearch 模塊端側(cè)全文檢索與索引Content Capture10 及以上否(框架內(nèi)置)為智能服務(wù)實(shí)時(shí)捕獲 UI 結(jié)構(gòu)TextClassifier8.0 及以上否(框架內(nèi)置)實(shí)體識(shí)別、語言檢測(cè)AppPrediction10 及以上否(框架內(nèi)置)基于使用行為的應(yīng)用排序OnDevicePersonalization14 及以上ODP 模塊聯(lián)邦計(jì)算、隔離訓(xùn)練AdServices13 及以上AdServices 模塊隱私保護(hù)廣告定向(Topics、FLEDGE)51.1.2 跨子系統(tǒng)通用設(shè)計(jì)思路所有 AI 子系統(tǒng)都復(fù)用若干架構(gòu)設(shè)計(jì)范式:進(jìn)程隔離智能服務(wù)運(yùn)行在隔離或沙箱進(jìn)程。OnDeviceSandboxedInferenceService設(shè)置android:isolatedProcess="true"。IsolatedTrainingService在獨(dú)立進(jìn)程加載 TFLite。即使 ComputerControlSession 也基于與主顯示器隔離的虛擬顯示器工作。優(yōu)先使用強(qiáng)類型契約,而非無約束 BundleAppFunctions 使用 AppSearch 提供的GenericDocument作為參數(shù)序列化格式。ODI 使用PersistableBundle承載特性與請(qǐng)求元數(shù)據(jù)。二者均鼓勵(lì) SDK 層封裝強(qiáng)類型包裝類。AppSearch 作為通用元數(shù)據(jù)存儲(chǔ)AppFunction 元數(shù)據(jù)、應(yīng)用預(yù)測(cè)數(shù)據(jù)、內(nèi)容捕獲智能數(shù)據(jù),全部匯聚到 AppSearch 完成索引與檢索。權(quán)限管控 + 白名單機(jī)制AppFunctions 執(zhí)行受EXECUTE_APP_FUNCTIONS(或EXECUTE_APP_FUNCTIONS_SYSTEM)權(quán)限約束,同時(shí)配合平臺(tái)AllowlistManager維護(hù)簽名代理白名單。Computer Control 需要ACCESS_COMPUTER_CONTROL權(quán)限。ODI 需要USE_ON_DEVICE_INTELLIGENCE。AdServices 需要ACCESS_ADSERVICES_TOPICS。支持取消信號(hào)傳遞幾乎全部異步 API 都會(huì)跨 Binder 傳遞ICancellationSignal,調(diào)用方可終止長(zhǎng)時(shí)間推理或函數(shù)執(zhí)行。51.2 AppFunctions 框架AppFunctions 框架在 Android 16 以 Beta 特性面世,Android 17 正式廣泛可用。它提供一套標(biāo)準(zhǔn)化機(jī)制,讓 AI 助手(代理)可以發(fā)現(xiàn)并調(diào)用任意目標(biāo)應(yīng)用暴露的功能。例如助手收到指令 “把 XYZ 保存到我的筆記”,框架會(huì)將請(qǐng)求路由至對(duì)應(yīng)的AppFunctionService實(shí)現(xiàn),助手無需在編譯期依賴筆記應(yīng)用。Android 17 對(duì)該框架做了大幅增強(qiáng),不再局限于最初僅通過 Manifest 靜態(tài)聲明的模式。本章后續(xù)會(huì)詳細(xì)介紹以下核心新增能力:運(yùn)行時(shí)(動(dòng)態(tài))函數(shù)注冊(cè):應(yīng)用可在 Activity 或 Service 中運(yùn)行時(shí)注冊(cè) AppFunction 回調(diào),不再必須聲明獨(dú)立AppFunctionService組件(registerAppFunction,受FLAG_ENABLE_DYNAMIC_APP_FUNCTIONS標(biāo)記控制)。完備的發(fā)現(xiàn)、狀態(tài)與觀測(cè) API,新增至AppFunctionManager:searchAppFunctions、getAppFunctionStates、getAppFunctionActivityStates、observeAppFunctions。訪問管理框架:維護(hù)(代理,目標(biāo)應(yīng)用)二元組訪問狀態(tài)與標(biāo)志位;提供面向用戶的管理 UI;代理白名單交由平臺(tái)AllowlistManager維護(hù),不再使用 DeviceConfig 字符串。新增權(quán)限:DISCOVER_APP_FUNCTIONS(僅發(fā)現(xiàn),不可執(zhí)行)、EXECUTE_APP_FUNCTIONS_SYSTEM(特權(quán)系統(tǒng)代理,繞過白名單校驗(yàn)),保留原有EXECUTE_APP_FUNCTIONS。Android 17 源碼目錄概覽:frameworks/base/core/java/android/app/appfunctions/ AppFunctionManager.java -- 客戶端系統(tǒng)服務(wù)入口 AppFunctionService.java -- 靜態(tài)目標(biāo)應(yīng)用抽象基類 AppFunction.java -- 運(yùn)行時(shí)函數(shù)回調(diào)接口 RegisterAppFunctionRequest.java -- 運(yùn)行時(shí)注冊(cè)請(qǐng)求Parcelable ExecuteAppFunctionRequest.java -- 執(zhí)行請(qǐng)求Parcelable ExecuteAppFunctionResponse.java -- 執(zhí)行響應(yīng)Parcelable AppFunctionException.java -- 分層異常錯(cuò)誤體系 AppFunctionMetadata.java -- 靜態(tài)+運(yùn)行時(shí)函數(shù)元數(shù)據(jù) AppFunctionName.java -- (包名,標(biāo)識(shí)符)函數(shù)唯一標(biāo)識(shí) AppFunctionState.java -- 運(yùn)行時(shí)啟用/可見狀態(tài) AppFunctionActivityId.java -- Activity作用域函數(shù)鍵值 AppFunctionSearchSpec.java -- 檢索查詢條件 AppFunctionObserver.java -- 變更觀測(cè)回調(diào) AppFunctionAccessServiceInterface.java -- 訪問校驗(yàn)本地服務(wù) IAppFunctionManager.aidl -- system_server AIDL接口 IAppFunctionService.aidl -- 靜態(tài)目標(biāo)應(yīng)用AIDL(oneway) IAppFunctionExecutor.aidl -- 動(dòng)態(tài)注冊(cè)執(zhí)行器AIDL IExecuteAppFunctionCallback.aidl -- 異步結(jié)果回調(diào)AIDL ICancellationCallback.aidl -- 取消信號(hào)傳輸AIDL ... frameworks/base/services/appfunctions/ java/com/android/server/appfunctions/ AppFunctionManagerService.java -- SystemService封裝 AppFunctionManagerServiceImpl.java -- IAppFunctionManager.Stub實(shí)現(xiàn) RemoteServiceCallerImpl.java -- Service綁定邏輯 CallerValidatorImpl.java -- 權(quán)限+白名單校驗(yàn) MetadataSyncAdapter.java -- AppSearch元數(shù)據(jù)同步 AppFunctionsLoggerWrapper.java -- statsd埋點(diǎn)日志 allowlist/SystemAppFunctionAllowlistReader.java -- AllowlistManager白名單讀取 dynamic/MultiUserDynamicAppFunctionRegistry.java -- 運(yùn)行時(shí)注冊(cè)管理 reader/AppFunctionMetadataReader.java -- 靜態(tài)/動(dòng)態(tài)元數(shù)據(jù)讀取 observer/AppFunctionMetadataObserver.java -- AppSearch變更觀測(cè)器 ... frameworks/base/services/permission/java/com/android/server/permission/access/appfunction/ AppFunctionAccessService.kt -- 持久化(代理,目標(biāo))訪問狀態(tài)51.2.1 架構(gòu)概覽51.2.2 客戶端:AppFunctionManagerAppFunctionManager以系統(tǒng)服務(wù)注冊(cè),服務(wù)名稱Context.APP_FUNCTION_SERVICE。@FlaggedApi(FLAG_ENABLE_APP_FUNCTION_MANAGER) @SystemService(Context.APP_FUNCTION_SERVICE) public final class AppFunctionManager {核心 API 為executeAppFunction(),接收四個(gè)入?yún)?。Android17 要求調(diào)用方具備兩項(xiàng)執(zhí)行權(quán)限之一;應(yīng)用調(diào)用自身暴露的函數(shù)無需權(quán)限。@FlaggedApi(FLAG_ENABLE_APP_FUNCTION_PERMISSION_V2) @RequiresPermission( anyOf = { Manifest.permission.EXECUTE_APP_FUNCTIONS, Manifest.permission.EXECUTE_APP_FUNCTIONS_SYSTEM }, conditional = true) @UserHandleAware public void executeAppFunction( @NonNull ExecuteAppFunctionRequest request, @NonNull @CallbackExecutor Executor executor, @NonNull CancellationSignal cancellationSignal, @NonNull OutcomeReceiverExecuteAppFunctionResponse, AppFunctionException callback) {內(nèi)部實(shí)現(xiàn)會(huì)將上層請(qǐng)求封裝為ExecuteAppFunctionAidlRequest,補(bǔ)充調(diào)用者身份、時(shí)間戳信息。ExecuteAppFunctionAidlRequest aidlRequest = new ExecuteAppFunctionAidlRequest( request, mContext.getUser(), mContext.getPackageName(), /* requestTime= */ SystemClock.elapsedRealtime(), /* requestWallTime= */ System.currentTimeMillis());Binder 調(diào)用返回ICancellationSignal傳輸對(duì)象,綁定至客戶端CancellationSignal,實(shí)現(xiàn)跨進(jìn)程取消。ICancellationSignal cancellationTransport = mService.executeAppFunction( aidlRequest, new IExecuteAppFunctionCallback.Stub() { @Override public void onSuccess(ExecuteAppFunctionResponse result) { executor.execute(() - callback.onResult(result)); } @Override public void onError(AppFunctionException exception) { executor.execute(() - callback.onError(exception)); } }); if (cancellationTransport != null) { cancellationSignal.setRemote(cancellationTransport); }51.2.3 啟用狀態(tài)管理每個(gè) AppFunction 具備三態(tài)生命周期:常量數(shù)值含義APP_FUNCTION_STATE_DEFAULT0恢復(fù)默認(rèn)狀態(tài)(通常為啟用)APP_FUNCTION_STATE_ENABLED1顯式啟用APP_FUNCTION_STATE_DISABLED2顯式禁用應(yīng)用通過setAppFunctionEnabled()控制自身函數(shù)狀態(tài)。@UserHandleAware public void setAppFunctionEnabled( @NonNull String functionIdentifier, @EnabledState int newEnabledState, @NonNull Executor executor, @NonNull OutcomeReceiverVoid, Exception callback) {啟用狀態(tài)以AppFunctionRuntimeMetadata文檔持久化在 AppSearch,與描述函數(shù) Schema 的AppFunctionStaticMetadata相互獨(dú)立。setAppFunctionEnabled()僅對(duì)靜態(tài)AppFunctionService對(duì)應(yīng)的函數(shù)生效。通過registerAppFunction注冊(cè)的運(yùn)行時(shí)函數(shù),生命周期與注冊(cè)會(huì)話綁定,啟用狀態(tài)由registerAppFunction/AppFunctionRegistration.unregister控制;對(duì)動(dòng)態(tài)函數(shù)調(diào)用本方法會(huì)拋出IllegalArgumentException。Android17 完整對(duì)外暴露運(yùn)行時(shí)狀態(tài),不僅僅是啟用位。AppFunctionStateParcelable 包含AppFunctionName、啟用標(biāo)記、可見性;可通過AppFunctionManager.getAppFunctionStates(...)批量讀取。51.2.4 訪問控制模型AppFunctions 訪問模型分為三層校驗(yàn):訪問標(biāo)志位是以(代理,目標(biāo)應(yīng)用)為單位存儲(chǔ)的位掩碼,常量定義在AppFunctionManager。標(biāo)志位數(shù)值含義ACCESS_FLAG_PREGRANTED1系統(tǒng)預(yù)授權(quán)訪問ACCESS_FLAG_UPGRADE_GRANTED1 1系統(tǒng)版本升級(jí)時(shí)授予ACCESS_FLAG_USER_GRANTED1 2用戶通過 UI 顯式授權(quán)ACCESS_FLAG_USER_DENIED1 3用戶通過 UI 顯式拒絕(優(yōu)先級(jí)高于 PREGRANTED)ACCESS_FLAG_OTHER_GRANTED1 4ADB 或其他方式授權(quán)ACCESS_FLAG_OTHER_DENIED1 5ADB 或主動(dòng)撤銷拒絕Android17 代理白名單不再使用 DeviceConfig 字符串,改為平臺(tái)AllowlistManager。它以SignedPackage(包名 + 證書摘要)為 Key,記錄該代理允許訪問的目標(biāo)包集合,支持通配符代表全部目標(biāo)包。AppFunctions 服務(wù)通過SystemAppFunctionAllowlistReader讀取,內(nèi)部使用 LruCache 按代理緩存結(jié)果。public class SystemAppFunctionAllowlistReader implements AppFunctionAllowlistReader { private final LruCacheSignedPackage, ArraySetString mCache; private final AllowlistManager mAllowlistManager; @Override public CompletableFutureBoolean isAllowlisted( String agentPackage, String targetPackageName, int userId) { ... } }CallerValidatorImpl執(zhí)行前同時(shí)校驗(yàn)運(yùn)行時(shí)權(quán)限與白名單。持有EXECUTE_APP_FUNCTIONS_SYSTEM的特權(quán)系統(tǒng)代理會(huì)跳過白名單;僅持有EXECUTE_APP_FUNCTIONS的代理必須出現(xiàn)在目標(biāo)應(yīng)用對(duì)應(yīng)的白名單內(nèi)。51.2.5 AIDL 接口定義框架定義兩組 AIDL 接口:一組面向客戶端,一組面向目標(biāo)應(yīng)用。IAppFunctionManager(客戶端 → system_server)Android17 接口大幅擴(kuò)充,增加發(fā)現(xiàn)、觀測(cè)、運(yùn)行時(shí)注冊(cè)、訪問管理相關(guān)接口。interface IAppFunctionManager { ICancellationSignal executeAppFunction( in ExecuteAppFunctionAidlRequest request, in IExecuteAppFunctionCallback callback); // 發(fā)現(xiàn)與觀測(cè) void observeAppFunctions( in AppFunctionAidlSearchSpec aidlSearchSpec, in IObserveAppFunctionChangesCallback callback); void unregisterAppFunctionObserver( in String callingPackage, in UserHandle userHandle, in IObserveAppFunctionChangesCallback callback); void getAppFunctionStates( in ListAppFunctionName appFunctionNames, in String callingPackageName, int targetUserId, in IGetAppFunctionStatesCallback callback); void getAppFunctionActivityStates( in ListAppFunctionActivityId activityIds, in String callingPackageName, int targetUserId, in IGetAppFunctionActivityStatesCallback callback); // 啟用狀態(tài)生命周期 void isAppFunctionEnabled( in String callingPackage, in String targetPackage, in String functionIdentifier, in UserHandle userHandle, in IIsAppFunctionEnabledCallback callback); void setAppFunctionEnabled( in String callingPackage, in String functionIdentifier, in UserHandle userHandle, int enabledState, in ISetAppFunctionEnabledCallback callback); // 運(yùn)行時(shí)動(dòng)態(tài)注冊(cè) void registerAppFunctions(in String packageName, in ListString functionIds, in IAppFunctionExecutor executor, in IBinder activityToken); void unregisterAppFunctions(in String packageName, in ListString functionIds, in IAppFunctionExecutor executor); // 訪問管理 int getAccessRequestState(in String agentPackageName, int agentUserId, in String targetPackageName, int targetUserId); int getAccessFlags(in String agentPackageName, int agentUserId, in String targetPackageName, int targetUserId); boolean updateAccessFlags(in String agentPackageName, int agentUserId, in String targetPackageName, int targetUserId, int flagMask, int flags); void revokeSelfAccess(in String targetPackageName); ListString getValidAgents(int userId); ListString getValidTargets(int targetUserId); Intent createRequestAccessIntent(in String targetPackageName); void addOnAccessChangedListener(IOnAppFunctionAccessChangeListener listener, int userId); void removeOnAccessChangedListener(IOnAppFunctionAccessChangeListener listener, int userId); }注意區(qū)分查詢回調(diào)IIsAppFunctionEnabledCallback和修改回調(diào)ISetAppFunctionEnabledCallback。運(yùn)行時(shí)注冊(cè)傳遞IAppFunctionExecutor,由系統(tǒng)直接調(diào)用,不再綁定獨(dú)立組件。IAppFunctionService(system_server → 目標(biāo)應(yīng)用,oneway)oneway interface IAppFunctionService { void executeAppFunction( in ExecuteAppFunctionRequest request, in String callingPackage, in android.content.pm.SigningInfo callingPackageSigningInfo, in ICancellationCallback cancellationCallback, in IExecuteAppFunctionCallback callback); }oneway修飾至關(guān)重要:system_server 不會(huì)阻塞等待目標(biāo)應(yīng)用執(zhí)行完成,結(jié)果全部經(jīng)由IExecuteAppFunctionCallback回調(diào)返回。51.2.6 目標(biāo)端:AppFunctionService目標(biāo)應(yīng)用繼承AppFunctionService,實(shí)現(xiàn)唯一抽象方法:@MainThread public abstract void onExecuteFunction( @NonNull ExecuteAppFunctionRequest request, @NonNull String callingPackage, @NonNull SigningInfo callingPackageSigningInfo, @NonNull CancellationSignal cancellationSignal, @NonNull OutcomeReceiverExecuteAppFunctionResponse, AppFunctionException callback);服務(wù)內(nèi)部做調(diào)用者校驗(yàn):僅擁有BIND_APP_FUNCTION_SERVICE權(quán)限的 system_server 可以調(diào)用。if (context.checkCallingPermission(BIND_APP_FUNCTION_SERVICE) == PERMISSION_DENIED) { throw new SecurityException("Can only be called by the system server."); }Manifest 聲明示例,必須指定綁定權(quán)限:service android:name=".YourService" android:permission="android.permission.BIND_APP_FUNCTION_SERVICE" intent-filter action android:name="android.app.appfunctions.AppFunctionService" / /intent-filter /service51.2.7 請(qǐng)求與響應(yīng)序列化格式ExecuteAppFunctionRequest與ExecuteAppFunctionResponse均使用 AppSearch 的GenericDocument作為參數(shù)載體。該設(shè)計(jì)使函數(shù)參數(shù)可以用 Schema 描述,而 AppSearch 原生支持索引與查詢?cè)?Schema。請(qǐng)求結(jié)構(gòu)體:public final class ExecuteAppFunctionRequest implements Parcelable { @NonNull private final String mTargetPackageName; @NonNull private final String mFunctionIdentifier; @NonNull private final Bundle mExtras; @NonNull private final GenericDocumentWrapper mParameters; @Nullable private final AppInteractionAttribution mAttribution;響應(yīng)結(jié)構(gòu)體:public final class ExecuteAppFunctionResponse implements Parcelable { public static final String PROPERTY_RETURN_VALUE = "androidAppfunctionsReturnValue"; @NonNull private final GenericDocumentWrapper mResultDocumentWrapper; @NonNull private final Bundle mExtras; @NonNull private final ListAppFunctionUriGrant mUriGrants;返回值存放在結(jié)果GenericDocument的PROPERTY_RETURN_VALUE鍵。Jetpack AppFunction SDK 提供強(qiáng)類型封裝,負(fù)責(zé)打包、解析該文檔。51.2.8 歸因與交互日志每一次執(zhí)行可以攜帶AppInteractionAttribution,描述觸發(fā)本次調(diào)用的交互來源。Android17 將該類型從 appfunctions 包提升至android.app包,供整個(gè)應(yīng)用交互 API 復(fù)用,開關(guān)標(biāo)記為FLAG_ENABLE_APP_INTERACTION_API。public static final int INTERACTION_TYPE_OTHER = 0; // 需要自定義字符串 public static final int INTERACTION_TYPE_USER_QUERY = 1; public static final int INTERACTION_TYPE_USER_SCHEDULED = 2;歸因包含交互類型、可選自定義類型字符串(類型為INTERACTION_TYPE_OTHER時(shí)使用)、可選交互 Uri,指向原始上下文。隱私 UI 依靠該信息向用戶解釋函數(shù)執(zhí)行緣由。Android17 不會(huì)持久化每次調(diào)用的歷史數(shù)據(jù)庫,而是把每一次執(zhí)行寫入平臺(tái) metrics 流水線 statsd。system_server 中的AppFunctionsLoggerWrapper運(yùn)行在共享后臺(tái)執(zhí)行器,為每一次成功或失敗輸出結(jié)構(gòu)化事件,歸一化處理歸因常量并標(biāo)記函數(shù)類型。static final int FUNCTION_TYPE_UNSPECIFIED = 0; static final int FUNCTION_TYPE_STATIC = 1; // AppFunctionService實(shí)現(xiàn) static final int FUNCTION_TYPE_DYNAMIC_GLOBAL = 2; // registerAppFunction(Service/全局) static final int FUNCTION_TYPE_DYNAMIC_ACTIVITY = 3;// registerAppFunction(Activity作用域) void logAppFunctionSuccess( ExecuteAppFunctionAidlRequest request, ExecuteAppFunctionResponse response, int callingUid, long executionStartTimeMillis, @AppFunctionMetadata.AppFunctionType int appFunctionType) { ... }日志事件記錄調(diào)用 UID、目標(biāo)包、請(qǐng)求中提取的交互類型、函數(shù)類型(靜態(tài) / 動(dòng)態(tài)、全局 / Activity 域)、響應(yīng)碼,以及綁定服務(wù)完成之后統(tǒng)計(jì)的執(zhí)行耗時(shí)。51.2.9 錯(cuò)誤處理AppFunctionException定義了分類錯(cuò)誤碼體系:// 請(qǐng)求類錯(cuò)誤 1000?1999 public static final int ERROR_DENIED = 1000; public static final int ERROR_INVALID_ARGUMENT = 1001; public static final int ERROR_DISABLED = 1002; public static final int ERROR_FUNCTION_NOT_FOUND = 1003; // 系統(tǒng)類錯(cuò)誤 2000?2999 public static final int ERROR_SYSTEM_ERROR = 2000; public static final int ERROR_CANCELLED = 2001; public static final int ERROR_ENTERPRISE_POLICY_DISALLOWED = 2002; // 應(yīng)用類錯(cuò)誤 3000?3999 public static final int ERROR_APP_UNKNOWN_ERROR = 3000;getErrorCategory()將錯(cuò)誤碼區(qū)間映射為錯(cuò)誤分類:public int getErrorCategory() { if (mErrorCode = 1000 mErrorCode 2000) return ERROR_CATEGORY_REQUEST_ERROR; if (mErrorCode = 2000 mErrorCode 3000) return ERROR_CATEGORY_SYSTEM; if (mErrorCode = 3000 mErrorCode 4000) return ERROR_CATEGORY_APP; return ERROR_CATEGORY_UNKNOWN; }51.2.10 System Server 實(shí)現(xiàn)薄的SystemService:AppFunctionManagerService.java,負(fù)責(zé)發(fā)布 Binder 服務(wù)到Context.APP_FUNCTION_SERVICE,轉(zhuǎn)發(fā)用戶生命周期。業(yè)務(wù)邏輯主體在AppFunctionManagerServiceImpl,繼承IAppFunctionManager.Stub,協(xié)調(diào)各個(gè)協(xié)作類。public class AppFunctionManagerServiceImpl extends IAppFunctionManager.Stub { private final RemoteServiceCallerIAppFunctionService mRemoteServiceCaller; private final CallerValidator mCallerValidator; private final AppFunctionsLoggerWrapper mLoggerWrapper; private final IUriGrantsManager mUriGrantsManager; private final UriGrantsManagerInternal mUriGrantsManagerInternal; private final MultiUserDynamicAppFunctionRegistry mDynamicAppFunctionRegistry; private final AppFunctionMetadataReader mAppFunctionMetadataReader; private final AppFunctionMetadataObserver mAppFunctionMetadataObserver; private final VisibilityHelper mVisibilityHelper; private final ActivityTaskManagerInternal mActivityTaskManagerInternal; // 訪問校驗(yàn)委托給權(quán)限子系統(tǒng) private final AppFunctionAccessServiceInterface mAppFunctionAccessService; ...關(guān)鍵支撐類說明:類名職責(zé)RemoteServiceCallerImpl綁定目標(biāo)AppFunctionService,管理連接生命周期CallerValidatorImpl強(qiáng)制校驗(yàn)EXECUTE_APP_FUNCTIONS/EXECUTE_APP_FUNCTIONS_SYSTEM權(quán)限,校驗(yàn)白名單MetadataSyncAdapter應(yīng)用包變更時(shí),同步靜態(tài)函數(shù)元數(shù)據(jù)至 AppSearchAppFunctionPackageMonitor監(jiān)聽?wèi)?yīng)用安裝 / 更新 / 卸載事件MultiUserDynamicAppFunctionRegistry保存每個(gè)用戶下registerAppFunction運(yùn)行時(shí)注冊(cè)項(xiàng)AppFunctionMetadataReader讀取靜態(tài)(AppSearch)與動(dòng)態(tài)元數(shù)據(jù),用于發(fā)現(xiàn)與狀態(tài)查詢AppFunctionMetadataObserver基于 AppSearch 變更事件驅(qū)動(dòng)observeAppFunctions回調(diào)SystemAppFunctionAllowlistReader通過AllowlistManager解析簽名代理白名單AppFunctionsLoggerWrapper為每一次執(zhí)行輸出 statsd 埋點(diǎn)事件AppFunctionAccessService(權(quán)限子系統(tǒng))持久化(代理,目標(biāo))訪問狀態(tài)與標(biāo)志位51.2.11 通過 AppSearch 實(shí)現(xiàn)函數(shù)發(fā)現(xiàn)應(yīng)用安裝、更新或設(shè)備開機(jī)時(shí),MetadataSyncAdapter從目標(biāo)應(yīng)用AppFunctionService提取函數(shù)元數(shù)據(jù),作為AppFunctionStaticMetadata文檔索引存入 AppSearch。代理應(yīng)用通過查詢 AppSearch 完成函數(shù)發(fā)現(xiàn)。51.2.12 SafeOneTimeExecuteAppFunctionCallback關(guān)鍵防御封裝,保證回調(diào)有且僅有一次被交付。public class SafeOneTimeExecuteAppFunctionCallback { private final AtomicBoolean mOnResultCalled = new AtomicBoolean(false); @NonNull private final IExecuteAppFunctionCallback mCallback; @Nullable private final CompletionCallback mCompletionCallback; @Nullable private final BeforeCompletionCallback mBeforeCompletionCallback; private final AtomicLong mExecutionStartTimeAfterBindMillis = new AtomicLong(); public void onResult(@NonNull ExecuteAppFunctionResponse result) { if (!mOnResultCalled.compareAndSet(false, true)) { Log.w(TAG, "Ignore subsequent calls to onResult/onError()"); return; } try { if (mBeforeCompletionCallback != null) { mBeforeCompletionCallback.beforeOnSuccess(result); } mCallback.onSuccess(result); if (mCompletionCallback != null) { mCompletionCallback.finalizeOnSuccess( result, mExecutionStartTimeAfterBindMillis.get()); } } catch (RemoteException ex) { Log.w(TAG, "Failed to invoke the callback", ex); } } public void onError(@NonNull AppFunctionException error) { if (!mOnResultCalled.compareAndSet(false, true)) { Log.w(TAG, "Ignore subsequent calls to onResult/onError()"); return; } try { mCallback.onError(error); if (mCompletionCallback != null) { mCompletionCallback.finalizeOnError( error, mExecutionStartTimeAfterBindMillis.get()); } } catch (RemoteException ex) { Log.w(TAG, "Failed to invoke the callback", ex); } }該設(shè)計(jì)模式必要性:目標(biāo)應(yīng)用屬于第三方代碼,可能錯(cuò)誤多次調(diào)用回調(diào)。AtomicBoolean.compareAndSet()保證僅第一次調(diào)用生效。捕獲RemoteException:如果回調(diào)進(jìn)程在結(jié)果返回前已死亡,異常僅打日志,不會(huì)崩潰 system_server。完成鉤子:BeforeCompletionCallback與CompletionCallback允許 system_server 在回調(diào)交付前后執(zhí)行附加邏輯(埋點(diǎn)日志、URI 授權(quán)、訪問歷史記錄)。public interface CompletionCallback { void finalizeOnSuccess( ExecuteAppFunctionResponse result, long executionStartTimeMillis); void finalizeOnError( AppFunctionException error, long executionStartTimeMillis); } public interface BeforeCompletionCallback { void beforeOnSuccess(ExecuteAppFunctionResponse result); }耗時(shí)統(tǒng)計(jì):mExecutionStartTimeAfterBindMillis記錄服務(wù)綁定完成之后的執(zhí)行開始時(shí)刻,區(qū)分綁定開銷與真正業(yè)務(wù)執(zhí)行耗時(shí)。禁用機(jī)制:提供disable(),請(qǐng)求被取消或超時(shí)時(shí)阻止后續(xù)回調(diào)交付。51.2.13 executeAppFunction 實(shí)現(xiàn)深度解析system_server 的executeAppFunction是整個(gè)框架最核心路徑,逐行解析從 AIDL 入口到綁定目標(biāo)服務(wù)的完整鏈路。步驟 1:入口與初始校驗(yàn)@Override public ICancellationSignal executeAppFunction( @NonNull ExecuteAppFunctionAidlRequest requestInternal, @NonNull IExecuteAppFunctionCallback executeAppFunctionCallback) { int callingUid = Binder.getCallingUid(); int callingPid = Binder.getCallingPid(); final SafeOneTimeExecuteAppFunctionCallback safeExecuteAppFunctionCallback = initializeSafeExecuteAppFunctionCallback( requestInternal, executeAppFunctionCallback, callingUid); String validatedCallingPackage; try { validatedCallingPackage = mCallerValidator.validateCallingPackage(requestInternal.getCallingPackage()); mCallerValidator.verifyTargetUserHandle( requestInternal.getUserHandle(), validatedCallingPackage); } catch (SecurityException exception) { safeExecuteAppFunctionCallback.onError( new AppFunctionException( AppFunctionException.ERROR_DENIED, exception.getMessage())); return null; }SafeOneTimeExecuteAppFunctionCallback包裝,保證無論目標(biāo)應(yīng)用多次應(yīng)答還是崩潰,只返回一次成功 / 錯(cuò)誤。步驟 2:線程池異步執(zhí)行,不阻塞 Binder 線程ICancellationSignal localCancelTransport = CancellationSignal.createTransport(); THREAD_POOL_EXECUTOR.execute( () - { try { executeAppFunctionInternal( requestInternal, callingUid, callingPid, localCancelTransport, safeExecuteAppFunctionCallback, executeAppFunctionCallback.asBinder()); } catch (Exception e) { safeExecuteAppFunctionCallback.onError( mapExceptionToExecuteAppFunctionResponse(e)); } }); return localCancelTransport; }任務(wù)提交至THREAD_POOL_EXECUTOR,避免占用 Binder 線程池。步驟 3:權(quán)限與狀態(tài)基礎(chǔ)校驗(yàn)(工作線程)@WorkerThread private void executeAppFunctionInternal(...) { // 企業(yè)策略校驗(yàn) if (!mCallerValidator.verifyEnterprisePolicyIsAllowed(callingUser, targetUser)) { safeExecuteAppFunctionCallback.onError( new AppFunctionException( AppFunctionException.ERROR_ENTERPRISE_POLICY_DISALLOWED, ...)); return; } // 目標(biāo)包名校驗(yàn)非空 if (TextUtils.isEmpty(targetPackageName)) { safeExecuteAppFunctionCallback.onError( new AppFunctionException( AppFunctionException.ERROR_INVALID_ARGUMENT, ...)); return; }步驟 4:鏈?zhǔn)?Future 完成權(quán)限校驗(yàn) + AppSearch 讀取啟用狀態(tài)實(shí)現(xiàn)使用AndroidFuture.thenCompose()做非阻塞權(quán)限校驗(yàn),緊接著查詢 AppSearch 獲取函數(shù)啟用狀態(tài)。mCallerValidator .verifyCallerCanExecuteAppFunction( callingUid, callingPid, targetUser, requestInternal.getCallingPackage(), targetPackageName, requestInternal.getClientRequest().getFunctionIdentifier()) .thenCompose(canExecuteResult - { if (canExecuteResult == CAN_EXECUTE_APP_FUNCTIONS_DENIED) { return AndroidFuture.failedFuture( new SecurityException("Caller does not have permission")); } return isAppFunctionEnabled( functionIdentifier, targetPackageName, getAppSearchManagerAsUser(userHandle), THREAD_POOL_EXECUTOR) .thenApply(isEnabled - { if (!isEnabled) { throw new DisabledAppFunctionException("Disabled"); } return canExecuteResult; }); })步驟 5:服務(wù)解析與綁定.thenAccept(canExecuteResult - { int bindFlags = Context.BIND_AUTO_CREATE; if (canExecuteResult == CAN_EXECUTE_APP_FUNCTIONS_ALLOWED_HAS_PERMISSION) { bindFlags |= Context.BIND_FOREGROUND_SERVICE; } Intent serviceIntent = mInternalServiceHelper.resolveAppFunctionService( targetPackageName, targetUser); // 授予隱式可見性,允許目標(biāo)看到調(diào)用方 mPackageManagerInternal.grantImplicitAccess( grantRecipientUserId, serviceIntent, grantRecipientAppId, callingUid, /* direct= */ true); bindAppFunctionServiceUnchecked( requestInternal, serviceIntent, targetUser, localCancelTransport, safeExecuteAppFunctionCallback, bindFlags, callerBinder, callingUid); })關(guān)鍵點(diǎn):調(diào)用方具備EXECUTE_APP_FUNCTIONS權(quán)限時(shí),使用BIND_FOREGROUND_SERVICE提升目標(biāo)服務(wù)進(jìn)程優(yōu)先級(jí)。自調(diào)用(同一包名)不會(huì)獲得該優(yōu)先級(jí)提升。51.2.14 RemoteServiceCaller 模式RemoteServiceCallerImpl實(shí)現(xiàn)一次性 Service 綁定模式:public class RemoteServiceCallerImplT implements RemoteServiceCallerT { public boolean runServiceCall( Intent intent, int bindFlags, UserHandle userHandle, long cancellationTimeoutMillis, CancellationSignal cancellationSignal, RunServiceCallCallbackT callback, IBinder callerBinder) { OneOffServiceConnection serviceConnection = new OneOffServiceConnection(intent, bindFlags, userHandle, cancellationTimeoutMillis, cancellationSignal, callback, callerBinder); return serviceConnection.bindAndRun(); }OneOffServiceConnection是自定義ServiceConnection,行為:調(diào)用Context.bindServiceAsUser()連接目標(biāo)服務(wù)設(shè)置取消監(jiān)聽器,超時(shí)后執(zhí)行 unbind監(jiān)聽調(diào)用方 Binder 死亡,調(diào)用方進(jìn)程死亡則自動(dòng)取消回調(diào)完成后自動(dòng)解綁private class OneOffServiceConnection implements ServiceConnection, ServiceUsageCompleteListener { public boolean bindAndRun() { boolean bindServiceResult = mContext.bindServiceAsUser(mIntent, this, mFlags, mUserHandle); if (bindServiceResult) { mCancellationSignal.setOnCancelListener(() - { mCallback.onCancelled(); mHandler.postDelayed(mCancellationTimeoutRunnable, mCancellationTimeoutMillis); }); mDirectServiceVulture = () - { Slog.w(TAG, "Caller process onDeath signal received"); mCancellationSignal.cancel(); }; mCallerBinder.linkToDeath(mDirectServiceVulture, 0); } return bindServiceResult; }該模式保證資源一定被清理,無論調(diào)用方崩潰、目標(biāo)應(yīng)用崩潰或者用戶主動(dòng)取消。51.2.15 多用戶支持實(shí)現(xiàn)完整支持多用戶。每個(gè)用戶擁有:獨(dú)立 AppSearch 數(shù)據(jù)庫,保存靜態(tài)函數(shù)元數(shù)據(jù)獨(dú)立PackageMonitor監(jiān)聽包變更MultiUserDynamicAppFunctionRegistry中獨(dú)立分片保存運(yùn)行時(shí)注冊(cè)項(xiàng)權(quán)限子系統(tǒng)持久化獨(dú)立的(代理,目標(biāo))訪問狀態(tài)與標(biāo)志位public void onUserUnlocked(TargetUser user) { if (enableDynamicAppFunctions()) { mAppFunctionMetadataObserver.registerAppSearchObserverForUser(user); } else { registerAppSearchObserver(user); } trySyncRuntimeMetadata(user.getUserHandle(), ...); PackageMonitor pkgMonitorForUser = AppFunctionPackageMonitor.registerPackageMonitorForUser( mContext, user, mAppFunctionMetadataObserver); mPackageMonitors.append(user.getUserIdentifier(), pkgMonitorForUser); mDynamicAppFunctionRegistry.onUserUnlocked(user, ...); } public void onUserStopping(@NonNull TargetUser user) { if (enableDynamicAppFunctions()) { mAppFunctionMetadataObserver.unregisterAppSearchObserverForUser(user); } else { MetadataSyncPerUser.removeUserSyncAdapter(user.getUserHandle()); } mPackageMonitors.get(user.getUserIdentifier()).unregister(); mPackageMonitors.delete(user.getUserIdentifier()); } public void onUserStopped(@NonNull TargetUser user) { mDynamicAppFunctionRegistry.onUserStopped(user); }動(dòng)態(tài)函數(shù)標(biāo)記開啟時(shí),每個(gè)用戶的 AppSearch 觀察者由AppFunctionMetadataObserver持有,變更事件同時(shí)分發(fā)給內(nèi)部元數(shù)據(jù)緩存以及客戶端observeAppFunctions回調(diào)。運(yùn)行時(shí)注冊(cè)表以 userId 為 key;當(dāng)用戶停止,該用戶下全部注冊(cè)項(xiàng)被銷毀。51.2.16 代理白名單架構(gòu)Android17 代理白名單不再是 DeviceConfig 與 Settings.Secure 字符串拼接,改用平臺(tái)AllowlistManager,白名單 ID 為ALLOWLIST_ID_APP_FUNCTION。輸入簽名代理包,返回該代理可訪問的目標(biāo)包集合。AppFunctions 服務(wù)通過SystemAppFunctionAllowlistReader消費(fèi)該能力。讀取器將代理最新簽名證書哈希封裝為SignedPackage,向AllowlistManager查詢合法目標(biāo)包;查詢結(jié)果放入 LruCache 緩存,相同代理重復(fù)執(zhí)行可省去一次 IPC。@Override public CompletableFutureBoolean isAllowlisted( String agentPackageName, String targetPackageName, int userId) { if (agentPackageName.equals(targetPackageName)) { return AndroidFuture.completedFuture(true); // 自身函數(shù)永遠(yuǎn)允許 } SignedPackage agentSignedPackage = new SignedPackage(agentPackageName, /* certificate digest */ ...); maybeStartAllowlistListener(); return getValidTargetPackages(agentSignedPackage) .thenApply(allowlistTargets - allowlistTargets.contains(WILDCARD_PACKAGE_NAME) || allowlistTargets.contains(targetPackageName)); }三條關(guān)鍵行為:自訪問隱式放行:代理與目標(biāo)包相同,應(yīng)用永遠(yuǎn)可以調(diào)用自身函數(shù)。通配符目標(biāo):白名單配置通配符包名,代理可訪問全部目標(biāo)。變更監(jiān)聽:首次使用注冊(cè)O(shè)nAllowlistChangedListener;白名單更新時(shí)緩存自動(dòng)失效,不再只在開機(jī)階段讀取配置字符串。51.2.17 AppFunction 響應(yīng)中的 URI 授權(quán)當(dāng)目標(biāo)應(yīng)用在響應(yīng)中返回 content URI,框架可以為調(diào)用代理授予臨時(shí) URI 權(quán)限。private final IUriGrantsManager mUriGrantsManager; private final UriGrantsManagerInternal mUriGrantsManagerInternal; private final IBinder mPermissionOwner; // 構(gòu)造函數(shù)中初始化 mPermissionOwner = mUriGrantsManagerInternal.newUriPermissionOwner("appfunctions");響應(yīng)中的AppFunctionUriGrant指明需要向代理授予哪些 URI。授權(quán)經(jīng)由mUriGrantsManager.grantUriPermissionFromOwner完成,綁定到 AppFunctions 專屬 permission owner。權(quán)限有效期直到 owner 釋放或者設(shè)備重啟。51.2.18 Shell 命令支持服務(wù)實(shí)現(xiàn)onShellCommand(),用于開發(fā)者調(diào)試。@Override public void onShellCommand( FileDescriptor in, FileDescriptor out, FileDescriptor err, @NonNull String[] args, ShellCallback callback, @NonNull ResultReceiver resultReceiver) { new AppFunctionManagerServiceShellCommand(mContext, this) .exec(this, in, out, err, args, callback, resultReceiver); }adb 命令:adb shell cmd app_function51.2.19 服務(wù)啟動(dòng)與生命周期本框架屬于SystemService。AppFunctionManagerService.onStart(),當(dāng)AppFunctionManagerConfiguration.isSupported(context)為 true 時(shí),把 Binder 服務(wù)發(fā)布到Context.APP_FUNCTION_SERVICE;開啟 App Interaction API 標(biāo)記時(shí),額外發(fā)布本地服務(wù)AppInteractionService。@Override public void onStart() { if (AppFunctionManagerConfiguration.isSupported(getContext())) { publishBinderService(Context.APP_FUNCTION_SERVICE, mServiceImpl); } if (Flags.enableAppInteractionApi()) { publishLocalService(AppInte
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
91免费试看| 怡红院院久久| 天天 青草 制服丝袜 在线| 五月天激情综合网| 色 色 色综合com| 六月婷婷综合激情| 亚洲激情六月| 99久久久99久久91熟女| 99激情在线| 五月婷婷激情四季| 亚洲成人AV在线播放| 伊人99热| 99热国产精品| 丁香五月人妻| 色欲AV导航| 久99热| 国外亚洲成AV人片在线观看| 亚洲色久| 色色AV色色色东莞| 超碰成人电影| 91激情五月开心| 免费视频WWW在线观看网站| ji'qi'luan'ren'lun| 久久丝丝热| 五月婷婷婷色| 丁香九月色| 丁香五月婷婷网| 丁香五月天成人网站| 丁香五月AV综合| 亚洲午夜Av| 香蕉婷婷| 99热99在线| 天天干天天爽天天操| 97色在线视频| 9|无码久久久久久| 色偷偷色婷婷| 99视频35精品视频在线观看| 久久在线92| 奇米色大香蕉| 亚洲殴洲精品Av在线| 成人精品视频99在线观看免费| 高清av在线国产| 婷婷激情五月| 97国产精品女人碰碰| 99人人干| 五月婷婷久久综合| 亚洲综合色网| 成人亚洲精品久久久久 | WWW.五月天9999| 99色日本| 丁香婷婷色色| 色噜噜综合网| 精品国产va久久久久| 一月婷婷色色| 天天干,天天舔| 伊人婷婷大香蕉| 久久一级AV| 五月丁香六月综合激情| 成人国产欧美大片一区| 婷婷伊人综合| 秋霞网在线免费基地五月婷婷丁香| 久久久婷婷五月天| 欧美人人超级碰| 精品国产a| 中文字幕视频色婷婷| 亚洲精品久久久久久久久久吃药| 亚洲免费综合一区| 国产小网站| 免费观看日韩成人av| 91在线观看九区| 日本操天堂| 无码激情AAAAA片-区区| 天堂网色婷婷| 色婷婷狠狠爱| 玖玖资源站蜜臀| 色色99色色| 久久视频这里都是精品| 丁香五月天啪啪激情综和网| 五月婷婷深深爱| 97超碰在线免费观看| 亚洲色五月| 人妻视频在线| 爱射综合| 欧美日韩一区二区三区四区| 婷婷五月色播网| 狠狠色丁香久久久婷| 综合综合色色| 激情伊人五月婷婷久久| 99爱视频| 国产亚洲成AV人片在线观黄桃| αv中文字幕在线观| 大香蕉懂9| 区美毛片子| 国产激情综合| 欧洲激情五月天| 99思思| 激情五月丁香婷婷| 激情网五月天| 桃色五月婷婷| 婷婷丁香97| 丁香六月婷婷综合麻豆| 在线另类视频| 日本色色视频| peg 2区三区四区的| 久久这里只有国产视频| AV性爱网| 综合激情在线视频| 热思思| 色婷婷综合网站| 婷婷五月香蕉| 色九月丁香婷婷蜜桃在线观看| 色99色| 99re久热只有精品6在线直播| 影音先锋人妻出差| www.99在线| 狠狠婷婷日韩| 思思99精品视频在线观看| 久久小视频免费| 婷婷十月丁香| 精品国产AV色一区二区深夜久久| aaaaa黄色| 热99热9| 操久久网| WWW色色色COm| 另类图片五月天| 性av| 操操操av| 五月婷婷大香蕉| 国产av天天插天天操天天爽| 天天插综合在线| 婷婷五月天激情开心网| 91久久久久| 日本99视频| 亚洲成人五月| 97超级操操| 人人爽人人爽人人爽人人爽| 精品亚洲国产成人A片在线鸭王| 婷婷性爱视频在线| 色婷狠狠| 99热 在线播放| 少妇激情基地| 超碰91在线| 久久婷婷的综合色丁香五月| 99热99色| 91成人看| 色播五月| 99爱爱网| 99热国产免费| 狠狠色九月| 99色播| 99热.com| 99'无码| 99ri在线观看视频| 丁香婷婷五月天校园春色| 色久一| 国产精品香蕉| 激情丁香五月AV| 婷婷五点亚洲| 国产精品国产| 综合久久婷婷| 五月婷婷丁香五月亚洲色| 日本丁香五月| hd五月婷婷在线| 2017狠狠干| 9久久久| 婷婷五月天黄色小说| 色青青电影色五月| 婷婷va| 色9999综合久久| 久久这里有精品视频| 亚洲狠9| 99人人操人人摸| 激情五月丁香婷婷| 精品人妻久久久| 国产偷人爽久久久久久老妇APP| 青青操avbb| 99热精品在线| 噜噜网免费视频| 欧美婷婷丁香社区在线播放| 五月婷婷综合网| 亚洲色色五月天| 久久99操| 深爱激情五月天婷婷网| 五月天婷综合| 极品少妇XXXX精品少妇偷拍| 丁香五月天激情视频| 婷婷五月花| 色五月婷婷狠狠撸| 久久五月天影院| 十月丁香九月婷婷综合| 久热九九| 婷婷五月丁香激情图片 | 中文久久久人妻| 欧亚成人A片一区二区| 99热 免费| 亚洲欧美日韩VIP| 五月丁香狠狠| 五月婷婷色| 九九成人视频| 综合激情五月婷婷| 伊人在线婷婷草| 九热视频免费观看| 丁香五月婷婷啪啪| 六月天丁婷婷| 日本九九九九| 狠狠色噜噜狠狠亚洲A∨| 另类 在线| 九九99在线观看视频| 一点色成人网| 亚洲无码成人| 99精品在这里| 99免费视频精品| enecarbon-materials.com污K127封锁请涟系@wip1688 | 成人视频婷婷| 午夜理论片最新午夜理论剧| AV网站免费在线| 少妇大叫太大太粗太爽了A片| 日本熟女内射| 五月丁香六月婷婷中合网| www.色欲丁香婷婷| 日本狠狠干| 激情深爱五月| 亚洲激情亚洲激情| 91九色 婷婷| 激情婷婷五月天| 天天摸天天透天天舔| 99色色网站| 久久丁香九| 天天综合精品| 99爱视频免费| 色欲av伊人久久大香线蕉影院| 人人色AV| 十月丁香婷婷| 婷婷五月天直播| 97在线/亚洲| 碰超亚洲| 久久免费少妇高潮99精品| 99热免| 日韩婷婷五月天| 91要啪| 91精选国| 亚洲一二三网| 色九九中文字幕| 国产这里只有精品| 99热精品中文字幕| 丁香五月性| 五月婷深深爱激情网| 五月天色色色| 久久这里精彩免费在线观看| 99啪啪视频| 九九一区| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 99re热精品在线视频| 97香蕉人人在线观看| 国产精品久久久久9999小说| 国自产拍偷拍精品啪啪一区二区| 五月开心网| 婷婷五月天亚洲| 久久色五月| 青青草激情网| 婷婷激情五月| 婷婷六月久久综合导航| 99热精品在线观看| 最近中文字幕在线中文视频| 免费超碰在线观看| 五月激情婷婷偷拍| 亚洲精品成人片在线播| Www99热| 亚洲一区二区无遮挡A片| 丁香9月婷婷| 以及AA大片看看| 蜜桃人妻无码AV天堂三区| 激情五月婷婷| 久久婷婷五月丁香网| 99热99美国在线观看| 色天五月天在线观看视频| 精品无码99| 五月婷婷丁香在线| 色激情五月| 在热视频精品| 色婷婷裸体色性在线| 丁香婷婷色六月| 五月丁香婷婷激情澎湃四射| 五月丁香成年黄色| 99ri在线视频| 色噜噜狠狠狠狠色综合久欧美| www.cao.com久久| 曰韩五月丁香色婷婷无码| 免费无码毛片一区二区A片| 午夜69成人做爰视频| 激情五月婷婷网| 五月婷丁香| 97亚洲视频在线| 97人碰人操| 婷婷中文字暮| 久99热| 99操视频| 狠色狠色综合久久| 久久激情五月婷婷| 麻豆AV一区二区三区| 黄色片avv| WWW.久久久久久久| 伊人五月人妻精品| 成人综合AV| 亚洲不卡| 欧美色激情四射| 激情亭亭五月| 五月天婷婷六月| 激情五月色播五月| 亚洲激情久久| 日韩美女羞羞网站在线观看| 2020久久婷婷五月| 中文字幕AV网址| 天天干天天插| 婷婷丁香五月色偷偷| 五月婷婷与六月丁香图片激情| 另类视频丁香五月| 天天色播| AV成人在线播放| 狠狠色噜噜狠狠色噜噜噜999| 国语精品探花| 天天干天天做| 色五月激情网| 丁香激情五月| 99精彩视频在线观看| 综合97五月| 亚洲婷婷丁香五月亚洲| 色播丁香| 婷婷欧美激情| 五月天停停成人网| 99噜噜噜在线播放| 婷婷综合在线| www.色婷婷| 五月婷婷爽爽爽| 亚洲愉拍99热成人精品| www.五月丁香| 99久久五月婷婷| 99热这里只有精品国产免费| 国产成人+综合亚洲+天堂| 久久久久久人妻| 久人操| 日日射天天射| 乱岳熟女50岁| 日韩成人无码人妻| 五月婷六月| 色亭亭九月| 蜜桃婷婷丁香五月天狠狠久久综合| 激情五月婷婷五月| 伊人大香蕉综合在线| 日韩欧美四五区| 开心激情婷婷| 99热色无码| 亚洲AV成人无码久久精品老人法拉利| 公的粗大挺进了我的密道| 婷婷色播婷婷| 天天肏夜夜肏| AV大香蕉| 亚洲综合激情五月久久| 综合欧美五月婷婷| 狠狠综合网| 久久资源网五月婷| 五月激情六月综合| 女人露出p毛视频www网站| 亚洲黄色精品| 久九色| 伊人www22综合色| 亚洲电影中文字幕| 综合婷婷都市激情| 九热免费视频| 香蕉综合网| 操操综合网婷婷| 五月天婷婷激情小说| 五月丁香啪啪| 天天在线天天综合网色| 黄色中文字目| 五月伊人婷婷| 婷婷五月丁香花综合| 天天撸夜夜爽| 五月色情婷婷| 婷婷婷久久久| 色色99| 久久综合丁香激情五月| 九九成人高清视频| 天天综合天综合久久网| 婷婷五月色播放| 天天狠狠综合精区| 五月天激情丁香| 天堂网啪啪| 99ri精品在线| 伦乱美欧| 天天噜噜| 97人妻碰碰碰碰碰久久久久久| 99亚洲视频| www.久久婷婷| AV在线观看网站| 大香蕉久久久久| 99热精品在线| 一本综合丁香日日狠狠色| 大香蕉视频99| 中文字幕在线不卡| 激情婷婷五月天在线观看| 热婷婷av| 五月色影院| 99热在线99| 日本婷婷激情四射中文字幕在线观看| 97色啪| 久久久婷婷婷| 99热欧美| 精品丁香五月天在线播放| 中文字幕永久免费| 久99久视频精品| av人人干| 久久性爱网站| www,久久久| AA片在线观看视频在线播放| 丁香婷婷91在线观看视频| 无码地址| 色婷婷91| 99ER热精品视频| 久久久久思思热| 五月丁香六月婷婷久久肏| 婷婷五月花| 欧美一级操逼视频| 丁香婷婷六月激情| 一起草Av| a毛片二逼wwwwwwwwww| 亚洲操人| 日日干天天| 欧美精品久久久久久视频观看| 色婷大香蕉| 天天干天天插| 激情久久久久久久久| 久久狠狠色| 99热免费精品| 丁香五月九九| 日本激情综合| 91久久久久久久久18| 欧美成人精品A片免费一区99| 在线,国产,色,热视频| 亚洲成人av在线播放| 久久精品一区二区三区四区| 精品人妻久久久久久| av色色国产| 婷婷六月丁香1| 最新久久网址| 久久最新色| 色综色网| 老美AA片| 疯狂做受XXXX高潮A片动画| 综合久久久| 99国产小视频| 亚洲视频在线观看99| 九月影院義母在线播放| 六月丁香停| 色五月美女| 国产亚洲精品久久久久久牛牛| www.91操| √天堂资源在线人妻熟女| 99热.com| 激情深爱五月| 五月天国产婷婷精品视频在线| 99色视频在线观看| 久久五月丁香六月婷| 婷婷丁香六月综合激情站| 插逼综合网| 伊人网啪啪| 91婷婷五月丁香碰| 五月天基地| 五月丁香激情综合网官网| 日本乱子人伦在线视频| 久久视频在线视频| 热久精品| 狠狠干狠狠干| www.婷婷五月| 成人精品在线观看| 五月婷婷六月天| 91碰碰碰| 99久re热视频精品98| 六月丁香av| 色情久久久| 91丨九色丨熟女| 久久免费婷婷视频| 亚洲色另类| 99视频一区| 丁香五月五婷| 久久99免费视频| 婷婷六月综合在线| 天天舔天天摸视频| 五月丁香久久| 天天干天天操天天爽| 香蕉婷婷| 99人人干| 99热综合在线观看| 97在线/日本| 色综合九九色综合88| 色婷婷六月天| 99热在线精品播放| 六月欧美综合色情| 99日韩网站| 丁香五月婷婷五月| 丁香五月综合| 久久在线视频免费观看| 国产44页| 狠狠色婷婷7| 五月婷婷插一插| 婷婷va| 女婷久久| 高潮毛片又色又爽免费| 九色在线观看91av| 久久久婷婷婷| 亚洲va在线| 久久五月丁香激情综合| 99热国产免费| 久热九九| 日韩无码性爱| 婷婷免费成人视频| 亚洲天堂色色| 国产3p露脸普通话对白| 伊人久久大香天蕉亚洲特级| 丁香五月婷婷五月天在线| 亚洲中文乱字字幕线在永久| A1片久久久| 精品国产AV色一区二区深夜久久| 免费超碰在线| 色综合色欲综合天天免费| 日韩在线婷婷五月天综合| 超碰人人色| 亚洲99精品九九在线| 久久婷婷国产| 色情激情五月| 五月婷婷,六月丁香| 九九九九九九热| 91爱啪啪| 色五月综合资源推荐| 国产人妻人伦精品一区二区| 操九色| 丁香五月欧美色综合| 色色婷婷丁香| 五月婷婷亚洲色图| 婷婷五月丁香婷婷| 婷婷丁香人妻天天爽| 亚洲无码免费看| 色五月丁香总合网| 99热在线观看| 色色综合激情| 看国产探花操逼三级片| 人人干av| 日韩有码一区| 亚州欧美国产久精国产99综合视频| 开心婷婷丁香五月| 五月激情站| ′久久99一| 国产婷婷五月中文字幕高清| 婷婷丁香色五月| 久草x色在线观看99| 成人五月天综合网| 亚洲激情在线| 99九九热在线观看| 久狠日av| 精品久9| 亚洲亚洲激情| 思思热在线视频精品| 國語久久婷| 欧美色婷婷| 久婷婷久草| 99热99免费| 亚洲免费看片| 丁香五月天色| 深爱激情五月天| wWwCom夜操wwW| 丁香五月婷婷啪啪啪| www。五月,com| 99热99这里有免费的精品| 97久久超碰| 噜噜噜噜噜久| 婷婷色导航| 亚洲va日| 亚洲精品又粗又大又爽A片| 欧美日本综合网| 天天操天天干天天日| 俺去婷婷 丁香| 五月天综合在线观看| 色色色1网址| 九九热精品6| 久久婷婷桃花五月天| 亚洲综合色色色| 日本强伦片中文字幕免费看| 天天夜天天色天天| 丁香五月天激情四射网络不好| 99免费热视频| 国产精品A片在线| 婷婷丁香人妻天天久久| 婷婷六月综合基地| www.婷婷六月天| www.91色| 国产SUV精品一区二区6| 丁香婷婷成人在线播放| 97se视频在线| 五月丁香久久久久| 色热久资源| 亚洲V国产V欧美V久久久久久| 色婷婷狠狠色| 影音先锋男人资源站一区二区| 综合网啪| 九九综合久久丁香婷婷,开心激情综合网| 亚洲综合激情五月久久| 欧美亚洲999| 中文字幕有多少字| 婷婷免费视频| 97热久久| 性一交一乱一交A片久久四色| 最新五月天婷婷影| 亚洲超级碰| 99免费在线| WWW激情五月天| 日本黄色精品| 日本99视频| 在线综合婷婷| 九九色色色| 激情四射五月天| 丁香六月天婷婷开心综合| 久草九九| 男妓跪趴把舌头伸进我的嘴巴| 婷婷十月丁香| 久久激情综合| 色婷婷啪啪综合网| 五月丁香福利| 色操b| 超碰免费人妻| 久久99大| 激情综合婷婷| 深爱激情av| 天天射美女| 男女啪啪做爰高潮无遮挡| 婷婷五月在线观看| 第一区久久网站| 色九月婷婷综合| 六月婷综合| 99热网站| 婷婷五月六| 99极品视频| 色五月综合网站| 久久总和99| 婷婷丁香五月天中文字幕| 超碰碰碰碰| 一级七香蕉| 天天天天操| 婷婷久久99| 99精品免费欧美小视频| 97激情五月天| 久久婷婷五月天激情新地址| 99久久五月天| 99热99日天天干| 五月开心网| 五月婷婷AV| 99这里都是精品6| 能看的av片| 六月色激情| 久久九九99视频| 99久久久99久久91熟女| 亚洲色视频| 六月婷婷影院| 丁香五月婷婷成人综合| 五月天丁香啪啪综合| 日韩AV在线免费观看| 97成人丁香| 99热| 蜜臀AV在线观看| 婷婷五月色天| 激情综合网五月婷婷| 久久五月网| www.婷婷| 在线视频激情网站| 九九热在这里只有精品| 99re这里| 久9热| 五月六月激情婷婷| 色色色综合视频| 大香蕉久久伊人婷婷五月丁香| 色亭亭丁香五月天| 五月综合激情网| 一本色综合色| 色啦啦视频| 丁香五月天堂婷婷| 老美AA片| 五月综合激情啪啪啪啪啪| 97色婷婷| 97人碰人操| 秋霞AV吧| 99久久婷婷五月| 综合久久首页| 五月激情射| 久久婷婷91| 狠狠色婷婷777| 婷婷九月色| 开心婷婷五月天综合| 久操综合| 丁香五月婷婷性爱| 丁香涩涩五月天| 人人舔天天| 六月婷婷久久| 欧美三级欧美一级| 婷婷五月天成人网| 成人短视频在线| 激情综合五月婷婷| 韩日另类| 综合激情在线观看| 91操网| 综合色99| 激情综合网,婷婷五月天| 久久AV电影| 99这里有精品视频| 色婷婷久久| 色噜噜五月天| 成人欧美日韩| 国产看真人毛片爱做A片 | 天天色天天操天天射| 激情av| 久婷婷视平| 精品99视频| 五月天国产成人| 丁香婷婷在线| 久草xx性爱视频| 99啪99| 亚洲AV人人操| 成人综合网站| 久久婷婷五月综合色丁香| 亚洲国产精品成人免费一区久久久在线观看AAAA| 丁香婷婷激情五月| 欧美婷婷五月天| 九九热视频在线观看| 亚洲激情在线| 六月色婷婷综合影视| 九九视频免费| 五月婷婷丁香在线| 色噜噜狠狠色综合日日| 丁香婷婷综合影院| 成人精品在线观看| 亚洲成人噜噜| 久草五月| 另类激情五月| 丁香久久久| 97热这里只有精品| 精品人妻在线免费观看| 六月婷婷综合| 99在热线免费视频| 国产婷婷色综合AV蜜臀AV| 另类 在线| 99激情视频热| 91色逼| 婷婷丁香精品视频在线观看| 五月天激情播播网| 五月天丁香综合久久国产| 韩日另类| 思思99热热热99| 亚洲操操操| AV成人在线网站| 婷婷丁香五月天影院 | 五月天在线视频尤物视频在线看| 亚洲天堂久久| 97操碰在线视频| 激情五月伊人婷婷| 婷婷五月电影院| 伊人综合婷婷| 大香蕉手机视频| 婷婷五月综合社区| 五月天伊人久久| 五月天激情无码高清| 99精品在线| 26UUU欧美激情一区二区| 亚洲婷婷丁香五月天激情小说| 五月色网| 在线看的免费网站| 欧洲亚洲免费视频区| 精品婷婷| 五月久久婷婷丁香| 影音先锋91| 色玖玖玖| www.天天干| 亚洲精品久久久久久久久久吃药| 亚洲精品五十一区| 日日夜夜狠狠| 久久黄A片| 99九九综合久久九九| 天天搞天天爽| 国产成人亚洲综合亚洲| 五月丁香在线综合| 青青久久五月天丁香婷婷| 人人综合五月人人婷婷| 色综合久久之分久久| 色在线五月天免费| 天堂无码人妻精品AV一区| 亭亭色网| 天天爽人人综合免费7799| 99久久婷| 亚洲热视频在线| 丁香无月在线观看| 色色99| 99九九热视频| 激情综合网五月丁香| 色色婷婷婷丁香五月天| 涩五月婷婷| 色五月天丁香婷婷| 91狠狠综合久久久| 五月婷婷深深的爱| 噼里啪啦在线观看免费完整版视频 | 丁香五月五月婷婷| 国产精品久久久99视频| 五月婷婷激情综合| 婷婷综合五月色播| 色久一| 99狠狠| 激情性爱网站| 99九九热在线观看| 九九热在线观看6| 久久五月丁香| 伊人深爱综合| 丁香五月激情综合婷综| 久久久激情| 午夜丁香六月婷| 亚洲成人日韩无码精品| 超碰99资源站| 色婷五月婷婷| 久热精品免费视频4| 九九無妻| 97超碰欧美中文字幕| www.99热视频| 六月婷婷综合久久| 99精品久久| 99热久久这里只有精品2010| 综合激情在线视频| 久/久精品99看9| 色亚洲色宗合| 婷婷 伊人 久久| 日本3级片一区2区| 梁铮版《蜘蛛女侠》在线| www.狠狠操| 噜噜色噜噜网| 天天色综和网| av免费在线看不卡无毒| 99热精品观看| 无码四色色色| 中文字幕av久久爽| 六月婷婷在线视频| 五月婷婷新网站| 国产精品A片在线| 香蕉久久国产AV一区二区| 五月色婷婷AV| 99久在线观看| 人妻av在线| 天天爽天天日天天舔| 色综合香蕉| 日本乱子人伦在线视频| 欧美人人超级碰| www.久热| 狠狠狠狠狠| 青娱乐美女福利视频美臀| 五月婷婷玖玖综合玖玖爱| 91碰在线| 婷婷色正月| www.五月婷婷.com| 狠狠爱五月婷婷综合六月| 99色在线| 99久久这里只有精品| 涩涩五| 久久ww| 欧美激情伊人| 国内自拍97在线| 色婷婷小说| 婷婷五月天社区| 九九热这里只有国产精品| 91精品综合久久久久久五月丁香| 性色综合网| www久久久久久久久久久| 五月色网| 久久人妻久久久久| 色五月五月婷婷| 色综合婷婷99| 99精品一二三四视频| 五月永久激情| 五月天激情小说婷婷| 26UUU欧美激情一区二区| 成人精品视频99在线观看免费| 14色综合婷婷| 草综合14| 国产玖玖资源| 26uuu欧美激情另类| 思思99热在线| 亚洲另类婷婷综合| 97超级免费无码| 日韩二区搞逼插逼毛片| 午夜少妇在线观看视频| 欧美99热| 丁香五月影院| 99热国产免费| 九九99在线免费在线观看视频| 色婷婷久久综合丁香五月| 五月丁香六月激情狠狠| 无码毛片992367| 婷婷五月激情六月丁香| 久鲁鲁色网 | 综合色色五月| 国产无套精品一区二区| 色婷婷基地| 大香蕉婷婷丁香天堂AV| 91九色首页| 天天干电影| 在线只有精品| 五月婷婷九月婷婷九月婷婷| 蜜乳国产网站| www.99成人视频| 亚洲欧美999| 色很很96| 精品一区二区三区四区五区六区介绍| 色播五月婷婷综合| 色综合久久伊伊婷婷五月| 色婷婷五月综合| 色爱综合视频| 第四色婷婷五月| 亚洲热久久| 久婷婷婷| 天天干天天日天天操| 内射人妻视频国内| 96精品国产综合久久久久久| 久久大香蕉伊人| 久久与婷婷| 九九AV在线| AV操逼网| 五月天婷婷基地| 综合激情五月四射婷婷| 天天插天天很| 99愛国产| 天天操夜夜操| 亚洲AV人人操| 99欧州偷拍视频| 伊人色综合久久久| 综合久| 丁香六月婷婷| 婷婷桃色网| 午夜亚洲国产精品av一区二区| 婷婷五月天av| 婷婷五月噜噜| 五月花婷婷| 九九激情| 色97啪啪| 凹凸7777操操操| 亚洲色亚洲精品| 伊人久久婷婷| 热久综合| 人人97碰| 婷婷色五月激情| 激情五月天com| 色色色热| 日本99婷婷| 亚洲色色图片| 婷婷五月天综合久久| 丁香五月天堂| 久久婷婷资源| 久久五月激情网| 99热思思| 日韩黄色中文字幕| 九九精品99| 色宗合久久五月婷婷| 91日本在线| 青青草原亚洲久| 99久久久久| 美女妹子后射视频网站在线观看| 五月天激情综合| 国产婷婷久久| 五月丁花色综合网| 五月花激情| 久久五月天丁香| 五月婷婷六月激情在线| 激情久久久久久久久| 亚洲美女裸体被操在线观看| 国产亚洲色婷婷久久99精品91| 色五月综合在线| 欧美性做爰大片免费看办公室| 精品人妻在线| 26uuu欧美宗合| 香蕉久久国产AV一区二区| 丁香六月激情| 婷婷激情五月综合| 九九在线热九九在线热99热| 五月婷亚洲精品AV天堂| 色噜噜狠噜噜视频| 久9久视频精品| 日日夜夜狠狠婷婷色| 色色五月丁香婷婷| 天天操天天曰天天射| 国产五月天欧美色| 黄急一级视频| 丁香六月 人妻| 色色色com| 伊人久久大香线蕉av一区| 五月丁香在线精品| 丁香网站| 色性综合| 五月婷婷丁香在线| 五月婷啪| 成人在线日韩欧美| 99玖玖视频| 五月丁香六月婷婷亚洲综合| 亚洲综合网在线| 99热这里有精品6| 日本三级大片| 亚洲精品99| 日本久久人人| PORNY九色9l自拍视频成人| 狠狠色狠狠鲁| 五月丁香婷婷色| 五月天堂婷婷| 婷婷综合久久| 丁香综合婷婷开心激情网| 在线成人网站| 大香蕉手机视频| 天天干电影| 国产婷婷色五月| 99热在线观看| 开心丁五月| 日本不卡一区二区三区| 色五月开心五月激情五月| 色欲一区二区三区精品A片| 这里只有精品99www| 99精品视频在线观看| 五月婷婷网久久| 女同在线9| 99热国产国产| 成人在线99| 精品九九在线观看| 色色色色丁香| 激情性五月天免费小说视频| 91久久精品视频| 色综合久久五月天| 99资源在线视频| 激情伊人| 五月丁香色色综合| 5月丁香综合图区| 亚洲人成人五月天| 国内久久亭亭| 婷婷五月天丁香花| 开心婷婷五月激情网小说| 精品无码久久久久久久久| 26UUU精品一区二区c〇m| 婷婷五月天丁香久久| 国产日韩欧美性爱| 色热久资源| 日本WwW色偷偷丁香花久久久京东热| 五月天伊人手机在线播放AV| 1024你懂的欧美曰韩| 色久九| 婷婷性爱无码视频| 色婷婷另类| 五月婷中文字幕| 色综合久久88色综合天天人守婷| 亚洲精品一二三| 99精品视频在线观看| 六月丁香五月激情亚洲AV| 激情文学综合婷婷五月天丁香花| 天天做天天爱天天综合网| 91操片| 丁香五月婷婷综合啪啪| 六月丁香深深爱| 另类图片五月天婷婷| 99爱视频免费| 五月天,激情四射,婷婷频道| 激情五月婷| 97干干干丁香| 日日操,夜夜爽| 97干视频| 无码91中文字幕| 一起草Av| 五月天激情啪啪| 日本久久九| 97人人搞| 人妻VideOssS人妻| 色五月琪琪| 五月激情四射网站| 中文字幕 码精品视频网站| 另类综合国产| 9色在线| 婷婷丁香久久网| 婷婷综合激情| 可以看的av网站| AAA久久久| 99操不停| 国产乱妇乱子在线播视频播放网站| 日本久久精品18| 婷婷六月插屄激情| 色综合久网| 六月激情网| 欧美久久婷婷| 日日操天天| 成人久久天天x资源站| 曰曰久久| 国内熟女黄色系列| 五月丁香六月婷婷网| 可以免费观看的AV| 六月天丁婷婷| 五月丁香综合啪啪| 人妻中文字幕精品| 色婷婷综合久久| 人人操AV| 丁香五月播播| 五月婷婷丁香五月婷婷| 精品无码av丁香五月激情| 婷婷色色欧美| av大片在线| 欧美色婷婷| 色婷操逼| 久久最新色| 丁香成人视频| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇 | 97luluse| 免费视频无码| 日日干天天爽| 成人视频一区| 激情网综合| 久久精品永久免费| 五月丁香综合伦理片| 人人玩人人橾| 成人短视频免费| 97超级碰人人| 九色综合网| 秋霞av吧| 色人久久| 97人人超| 久草婷婷| 涩五月婷婷| AV在线大香蕉| 五月丁香六月婷婷色情| 深爱五月激情| 久久99热这里只有精品| 色婷婷丁香中文在线播放| 色五月婷婷成人视频| 视色网在线播放| 情欲综合网| 丁香六月婷婷综合麻豆| 综合五月草| 五月丁香六月婷婷精品| 永久思思热在线| 久久杏爱视频| 色婷婷五月天激情久久| 六月丁香婷婷天堂| 久久久区区一久久久久久| 甈吧vv| 五月天婷婷导航| 五月丁香花激情综合网| 日本久久爱| 色婷婷五月天在线观看| 成人在线99| 伊人网碰碰| 免费黄色视频网址| av九九| 91|疯狂丨高潮丨对白| 久草九一| 天天操五月天| 婷婷五月天AV在线| 超碰在线9| 九九国产精视频| 色五月激情五月丁香五月婷婷啪啪综合| 色婷婷丁香五月天激情综合网| av操一操| 婷婷综合六月| 噜噜色五月| www婷婷| 婷婷香蕉精品| 手机在线视频观看9| 久久精品五月天| 九九家庭影院| A色色| 婷婷久久色| 婷婷丁香五月激情| 国自产拍偷拍精品啪啪一区二区| 五月色激情综合网| AV中文字幕夜夜操b天天摸bb | 婷婷狠狠爱| 特黄三级片| 色色色视频| 天堂草在线观看| 亚洲国产成人在线| 久久在线视频免费观看| 大香蕉娱乐| sesesesezonghe| 久久有码| 91色涩| 99在线精品免费视频| 天天操天天曰天天射| Se.婷婷五月天| 夜夜操天天爽| 激情九月综合| 日本操B视频在线观看| 久久婷婷五月天激情四射| 色综合爽| 国产性爱亚洲是图| 婷色五月| 性爱激情小说AV五月丁香花| 九九色之九九色之88| 婷婷综合激情五月中文字幕| 五月丁香六月婷婷综合网站| 久久九九Com| 亚洲国产99| 久久九九色| 五月色丁香婷婷综合| 超碰人人在线| site:ornaments52.com| 另类小说五月天| yirenjiqingshiping| 操操碰| 五月丁香基地| 五月婷婷久久综合| 日韩三级视频一区二区| 亚洲俩性性爱图片久久第六页| 丁香五月婷婷AV在线| 777精品久无码人妻蜜桃| 夫妻超碰在线| 日本色婷婷久久99精品91| 五月婷婷激情综合av| 武则天精品久久| 五月婷婷操操| 色色日韩网| 亚洲最大视频| 五月婷婷av在线| 成人色五月天婷婷| 秋霞AV淫| 去色色五月天| 深爱激情AV| 六月婷婷色| 婷婷97碰碰| 日本五月婷婷| 天天色视频| 大伊香蕉玖玖爱| 久久久精品色色色| 国产精品第一国产精品| 五月天激情综合网站| 日本超碰在线| 亚洲无码www| 色狠狠999综合网| 狠狠爱激情网| 天天综合色丁香| 国产在线6| 97色色婷婷| 激情久久久久久| www.色九月| 婷婷五月色惰| 色情性爱视频网址| 性欧美日本| 偷偷操99| 九九精品热播| 五月开心久久| 26uuu欧美| 丁香五月婷婷久久久| 这里只有精品视频看看| BBWCUCKOLD精品熟妇| 激情五月图| 激情婷婷| 九月丁香婷婷综合激情| 日本婷婷| 99色在线观看免费| 精品人妻伦一二三区久久| 色播色丁香五月| 亚洲AV成人无码久久精品老人法拉利| 久777| 天天天综合网| 99人人操人人操人人精| 五月婷婷中文字幕|