久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

第 51 章:AI、AppFunctions 與計算機控制

第 51 章:AI、AppFunctions 與計算機控制 Android 已經從一個僅能運行應用的平臺,演進為能夠理解應用行為的平臺。一系列端側智能服務將用戶意圖與應用行為關聯起來:AppFunctions 框架允許助手通過強類型 RPC 契約調用應用的任意功能;計算機控制(Computer Control)為 AI 代理提供虛擬顯示器,可在其上完成點擊、滑動、截圖操作;OnDeviceIntelligence 在隔離沙箱中運行大機器學習模型 —— 大語言模型以及其他生成式或大規(guī)模推理負載;NNAPI 向所有原生工作負載暴露硬件加速器。結合 AppSearch、內容捕獲(Content Capture)、AdServices 以及聯邦學習,這些子系統(tǒng)共同構成了 Android 的 AI 神經體系。本章逐層梳理完整調用鏈路:從公開 SDK 類,經由 AIDL 接口、system_server 服務實現,一直到另一端沙箱進程或 HAL 進程。每一條代碼路徑均對應當前 AOSP 源碼樹中的真實源文件。51.1 AOSP AI 全景概覽在深入任一框架細節(jié)之前,先整體瀏覽 AOSP 全部 AI/ML 相關組件。下圖列出主要子系統(tǒng)、跨進程邊界以及組件之間的數據流。Mainline 模塊 HAL / 驅動進程 隔離 / 沙箱進程 目標應用進程 system_server 應用進程 Binder IPC bindService Binder IPC 隔離 bind 調用 Binder IPC Binder IPC Binder IPC Binder IPC Binder IPC第三方 / 系統(tǒ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 等級是否 Mainline 模塊用途AppFunctions16(引入),Android 17 趨于成熟否(框架內置)強類型跨應用函數調用,支持運行時注冊與狀態(tài)觀測Computer Control16(Android 16)否(框架 + 擴展庫)基于虛擬顯示器實現 AI 驅動的 UI 自動化OnDeviceIntelligence15 及以上NeuralNetworks 模塊沙箱化的大語言模型 / 機器學習推理NNAPI8.1 及以上NeuralNetworks 模塊神經網絡推理硬件加速AppSearch12 及以上AppSearch 模塊端側全文檢索與索引Content Capture10 及以上否(框架內置)為智能服務實時捕獲 UI 結構TextClassifier8.0 及以上否(框架內置)實體識別、語言檢測AppPrediction10 及以上否(框架內置)基于使用行為的應用排序OnDevicePersonalization14 及以上ODP 模塊聯邦計算、隔離訓練AdServices13 及以上AdServices 模塊隱私保護廣告定向(Topics、FLEDGE)51.1.2 跨子系統(tǒng)通用設計思路所有 AI 子系統(tǒng)都復用若干架構設計范式:進程隔離智能服務運行在隔離或沙箱進程。OnDeviceSandboxedInferenceService設置android:isolatedProcess="true"。IsolatedTrainingService在獨立進程加載 TFLite。即使 ComputerControlSession 也基于與主顯示器隔離的虛擬顯示器工作。優(yōu)先使用強類型契約,而非無約束 BundleAppFunctions 使用 AppSearch 提供的GenericDocument作為參數序列化格式。ODI 使用PersistableBundle承載特性與請求元數據。二者均鼓勵 SDK 層封裝強類型包裝類。AppSearch 作為通用元數據存儲AppFunction 元數據、應用預測數據、內容捕獲智能數據,全部匯聚到 AppSearch 完成索引與檢索。權限管控 + 白名單機制AppFunctions 執(zhí)行受EXECUTE_APP_FUNCTIONS(或EXECUTE_APP_FUNCTIONS_SYSTEM)權限約束,同時配合平臺AllowlistManager維護簽名代理白名單。Computer Control 需要ACCESS_COMPUTER_CONTROL權限。ODI 需要USE_ON_DEVICE_INTELLIGENCE。AdServices 需要ACCESS_ADSERVICES_TOPICS。支持取消信號傳遞幾乎全部異步 API 都會跨 Binder 傳遞ICancellationSignal,調用方可終止長時間推理或函數執(zhí)行。51.2 AppFunctions 框架AppFunctions 框架在 Android 16 以 Beta 特性面世,Android 17 正式廣泛可用。它提供一套標準化機制,讓 AI 助手(代理)可以發(fā)現并調用任意目標應用暴露的功能。例如助手收到指令 “把 XYZ 保存到我的筆記”,框架會將請求路由至對應的AppFunctionService實現,助手無需在編譯期依賴筆記應用。Android 17 對該框架做了大幅增強,不再局限于最初僅通過 Manifest 靜態(tài)聲明的模式。本章后續(xù)會詳細介紹以下核心新增能力:運行時(動態(tài))函數注冊:應用可在 Activity 或 Service 中運行時注冊 AppFunction 回調,不再必須聲明獨立AppFunctionService組件(registerAppFunction,受FLAG_ENABLE_DYNAMIC_APP_FUNCTIONS標記控制)。完備的發(fā)現、狀態(tài)與觀測 API,新增至AppFunctionManager:searchAppFunctions、getAppFunctionStates、getAppFunctionActivityStates、observeAppFunctions。訪問管理框架:維護(代理,目標應用)二元組訪問狀態(tài)與標志位;提供面向用戶的管理 UI;代理白名單交由平臺AllowlistManager維護,不再使用 DeviceConfig 字符串。新增權限:DISCOVER_APP_FUNCTIONS(僅發(fā)現,不可執(zhí)行)、EXECUTE_APP_FUNCTIONS_SYSTEM(特權系統(tǒng)代理,繞過白名單校驗),保留原有EXECUTE_APP_FUNCTIONS。Android 17 源碼目錄概覽:frameworks/base/core/java/android/app/appfunctions/ AppFunctionManager.java -- 客戶端系統(tǒng)服務入口 AppFunctionService.java -- 靜態(tài)目標應用抽象基類 AppFunction.java -- 運行時函數回調接口 RegisterAppFunctionRequest.java -- 運行時注冊請求Parcelable ExecuteAppFunctionRequest.java -- 執(zhí)行請求Parcelable ExecuteAppFunctionResponse.java -- 執(zhí)行響應Parcelable AppFunctionException.java -- 分層異常錯誤體系 AppFunctionMetadata.java -- 靜態(tài)+運行時函數元數據 AppFunctionName.java -- (包名,標識符)函數唯一標識 AppFunctionState.java -- 運行時啟用/可見狀態(tài) AppFunctionActivityId.java -- Activity作用域函數鍵值 AppFunctionSearchSpec.java -- 檢索查詢條件 AppFunctionObserver.java -- 變更觀測回調 AppFunctionAccessServiceInterface.java -- 訪問校驗本地服務 IAppFunctionManager.aidl -- system_server AIDL接口 IAppFunctionService.aidl -- 靜態(tài)目標應用AIDL(oneway) IAppFunctionExecutor.aidl -- 動態(tài)注冊執(zhí)行器AIDL IExecuteAppFunctionCallback.aidl -- 異步結果回調AIDL ICancellationCallback.aidl -- 取消信號傳輸AIDL ... frameworks/base/services/appfunctions/ java/com/android/server/appfunctions/ AppFunctionManagerService.java -- SystemService封裝 AppFunctionManagerServiceImpl.java -- IAppFunctionManager.Stub實現 RemoteServiceCallerImpl.java -- Service綁定邏輯 CallerValidatorImpl.java -- 權限+白名單校驗 MetadataSyncAdapter.java -- AppSearch元數據同步 AppFunctionsLoggerWrapper.java -- statsd埋點日志 allowlist/SystemAppFunctionAllowlistReader.java -- AllowlistManager白名單讀取 dynamic/MultiUserDynamicAppFunctionRegistry.java -- 運行時注冊管理 reader/AppFunctionMetadataReader.java -- 靜態(tài)/動態(tài)元數據讀取 observer/AppFunctionMetadataObserver.java -- AppSearch變更觀測器 ... frameworks/base/services/permission/java/com/android/server/permission/access/appfunction/ AppFunctionAccessService.kt -- 持久化(代理,目標)訪問狀態(tài)51.2.1 架構概覽51.2.2 客戶端:AppFunctionManagerAppFunctionManager以系統(tǒng)服務注冊,服務名稱Context.APP_FUNCTION_SERVICE。@FlaggedApi(FLAG_ENABLE_APP_FUNCTION_MANAGER) @SystemService(Context.APP_FUNCTION_SERVICE) public final class AppFunctionManager {核心 API 為executeAppFunction(),接收四個入參。Android17 要求調用方具備兩項執(zhí)行權限之一;應用調用自身暴露的函數無需權限。@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) {內部實現會將上層請求封裝為ExecuteAppFunctionAidlRequest,補充調用者身份、時間戳信息。ExecuteAppFunctionAidlRequest aidlRequest = new ExecuteAppFunctionAidlRequest( request, mContext.getUser(), mContext.getPackageName(), /* requestTime= */ SystemClock.elapsedRealtime(), /* requestWallTime= */ System.currentTimeMillis());Binder 調用返回ICancellationSignal傳輸對象,綁定至客戶端CancellationSignal,實現跨進程取消。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)管理每個 AppFunction 具備三態(tài)生命周期:常量數值含義APP_FUNCTION_STATE_DEFAULT0恢復默認狀態(tài)(通常為啟用)APP_FUNCTION_STATE_ENABLED1顯式啟用APP_FUNCTION_STATE_DISABLED2顯式禁用應用通過setAppFunctionEnabled()控制自身函數狀態(tài)。@UserHandleAware public void setAppFunctionEnabled( @NonNull String functionIdentifier, @EnabledState int newEnabledState, @NonNull Executor executor, @NonNull OutcomeReceiverVoid, Exception callback) {啟用狀態(tài)以AppFunctionRuntimeMetadata文檔持久化在 AppSearch,與描述函數 Schema 的AppFunctionStaticMetadata相互獨立。setAppFunctionEnabled()僅對靜態(tài)AppFunctionService對應的函數生效。通過registerAppFunction注冊的運行時函數,生命周期與注冊會話綁定,啟用狀態(tài)由registerAppFunction/AppFunctionRegistration.unregister控制;對動態(tài)函數調用本方法會拋出IllegalArgumentException。Android17 完整對外暴露運行時狀態(tài),不僅僅是啟用位。AppFunctionStateParcelable 包含AppFunctionName、啟用標記、可見性;可通過AppFunctionManager.getAppFunctionStates(...)批量讀取。51.2.4 訪問控制模型AppFunctions 訪問模型分為三層校驗:訪問標志位是以(代理,目標應用)為單位存儲的位掩碼,常量定義在AppFunctionManager。標志位數值含義ACCESS_FLAG_PREGRANTED1系統(tǒng)預授權訪問ACCESS_FLAG_UPGRADE_GRANTED1 1系統(tǒng)版本升級時授予ACCESS_FLAG_USER_GRANTED1 2用戶通過 UI 顯式授權ACCESS_FLAG_USER_DENIED1 3用戶通過 UI 顯式拒絕(優(yōu)先級高于 PREGRANTED)ACCESS_FLAG_OTHER_GRANTED1 4ADB 或其他方式授權ACCESS_FLAG_OTHER_DENIED1 5ADB 或主動撤銷拒絕Android17 代理白名單不再使用 DeviceConfig 字符串,改為平臺AllowlistManager。它以SignedPackage(包名 + 證書摘要)為 Key,記錄該代理允許訪問的目標包集合,支持通配符代表全部目標包。AppFunctions 服務通過SystemAppFunctionAllowlistReader讀取,內部使用 LruCache 按代理緩存結果。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í)行前同時校驗運行時權限與白名單。持有EXECUTE_APP_FUNCTIONS_SYSTEM的特權系統(tǒng)代理會跳過白名單;僅持有EXECUTE_APP_FUNCTIONS的代理必須出現在目標應用對應的白名單內。51.2.5 AIDL 接口定義框架定義兩組 AIDL 接口:一組面向客戶端,一組面向目標應用。IAppFunctionManager(客戶端 → system_server)Android17 接口大幅擴充,增加發(fā)現、觀測、運行時注冊、訪問管理相關接口。interface IAppFunctionManager { ICancellationSignal executeAppFunction( in ExecuteAppFunctionAidlRequest request, in IExecuteAppFunctionCallback callback); // 發(fā)現與觀測 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); // 運行時動態(tài)注冊 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ū)分查詢回調IIsAppFunctionEnabledCallback和修改回調ISetAppFunctionEnabledCallback。運行時注冊傳遞IAppFunctionExecutor,由系統(tǒng)直接調用,不再綁定獨立組件。IAppFunctionService(system_server → 目標應用,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修飾至關重要:system_server 不會阻塞等待目標應用執(zhí)行完成,結果全部經由IExecuteAppFunctionCallback回調返回。51.2.6 目標端:AppFunctionService目標應用繼承AppFunctionService,實現唯一抽象方法:@MainThread public abstract void onExecuteFunction( @NonNull ExecuteAppFunctionRequest request, @NonNull String callingPackage, @NonNull SigningInfo callingPackageSigningInfo, @NonNull CancellationSignal cancellationSignal, @NonNull OutcomeReceiverExecuteAppFunctionResponse, AppFunctionException callback);服務內部做調用者校驗:僅擁有BIND_APP_FUNCTION_SERVICE權限的 system_server 可以調用。if (context.checkCallingPermission(BIND_APP_FUNCTION_SERVICE) == PERMISSION_DENIED) { throw new SecurityException("Can only be called by the system server."); }Manifest 聲明示例,必須指定綁定權限: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 請求與響應序列化格式ExecuteAppFunctionRequest與ExecuteAppFunctionResponse均使用 AppSearch 的GenericDocument作為參數載體。該設計使函數參數可以用 Schema 描述,而 AppSearch 原生支持索引與查詢該 Schema。請求結構體: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;響應結構體: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;返回值存放在結果GenericDocument的PROPERTY_RETURN_VALUE鍵。Jetpack AppFunction SDK 提供強類型封裝,負責打包、解析該文檔。51.2.8 歸因與交互日志每一次執(zhí)行可以攜帶AppInteractionAttribution,描述觸發(fā)本次調用的交互來源。Android17 將該類型從 appfunctions 包提升至android.app包,供整個應用交互 API 復用,開關標記為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時使用)、可選交互 Uri,指向原始上下文。隱私 UI 依靠該信息向用戶解釋函數執(zhí)行緣由。Android17 不會持久化每次調用的歷史數據庫,而是把每一次執(zhí)行寫入平臺 metrics 流水線 statsd。system_server 中的AppFunctionsLoggerWrapper運行在共享后臺執(zhí)行器,為每一次成功或失敗輸出結構化事件,歸一化處理歸因常量并標記函數類型。static final int FUNCTION_TYPE_UNSPECIFIED = 0; static final int FUNCTION_TYPE_STATIC = 1; // AppFunctionService實現 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) { ... }日志事件記錄調用 UID、目標包、請求中提取的交互類型、函數類型(靜態(tài) / 動態(tài)、全局 / Activity 域)、響應碼,以及綁定服務完成之后統(tǒng)計的執(zhí)行耗時。51.2.9 錯誤處理AppFunctionException定義了分類錯誤碼體系:// 請求類錯誤 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)類錯誤 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; // 應用類錯誤 3000?3999 public static final int ERROR_APP_UNKNOWN_ERROR = 3000;getErrorCategory()將錯誤碼區(qū)間映射為錯誤分類: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 實現薄的SystemService:AppFunctionManagerService.java,負責發(fā)布 Binder 服務到Context.APP_FUNCTION_SERVICE,轉發(fā)用戶生命周期。業(yè)務邏輯主體在AppFunctionManagerServiceImpl,繼承IAppFunctionManager.Stub,協調各個協作類。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; // 訪問校驗委托給權限子系統(tǒng) private final AppFunctionAccessServiceInterface mAppFunctionAccessService; ...關鍵支撐類說明:類名職責RemoteServiceCallerImpl綁定目標AppFunctionService,管理連接生命周期CallerValidatorImpl強制校驗EXECUTE_APP_FUNCTIONS/EXECUTE_APP_FUNCTIONS_SYSTEM權限,校驗白名單MetadataSyncAdapter應用包變更時,同步靜態(tài)函數元數據至 AppSearchAppFunctionPackageMonitor監(jiān)聽應用安裝 / 更新 / 卸載事件MultiUserDynamicAppFunctionRegistry保存每個用戶下registerAppFunction運行時注冊項AppFunctionMetadataReader讀取靜態(tài)(AppSearch)與動態(tài)元數據,用于發(fā)現與狀態(tài)查詢AppFunctionMetadataObserver基于 AppSearch 變更事件驅動observeAppFunctions回調SystemAppFunctionAllowlistReader通過AllowlistManager解析簽名代理白名單AppFunctionsLoggerWrapper為每一次執(zhí)行輸出 statsd 埋點事件AppFunctionAccessService(權限子系統(tǒng))持久化(代理,目標)訪問狀態(tài)與標志位51.2.11 通過 AppSearch 實現函數發(fā)現應用安裝、更新或設備開機時,MetadataSyncAdapter從目標應用AppFunctionService提取函數元數據,作為AppFunctionStaticMetadata文檔索引存入 AppSearch。代理應用通過查詢 AppSearch 完成函數發(fā)現。51.2.12 SafeOneTimeExecuteAppFunctionCallback關鍵防御封裝,保證回調有且僅有一次被交付。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); } }該設計模式必要性:目標應用屬于第三方代碼,可能錯誤多次調用回調。AtomicBoolean.compareAndSet()保證僅第一次調用生效。捕獲RemoteException:如果回調進程在結果返回前已死亡,異常僅打日志,不會崩潰 system_server。完成鉤子:BeforeCompletionCallback與CompletionCallback允許 system_server 在回調交付前后執(zhí)行附加邏輯(埋點日志、URI 授權、訪問歷史記錄)。public interface CompletionCallback { void finalizeOnSuccess( ExecuteAppFunctionResponse result, long executionStartTimeMillis); void finalizeOnError( AppFunctionException error, long executionStartTimeMillis); } public interface BeforeCompletionCallback { void beforeOnSuccess(ExecuteAppFunctionResponse result); }耗時統(tǒng)計:mExecutionStartTimeAfterBindMillis記錄服務綁定完成之后的執(zhí)行開始時刻,區(qū)分綁定開銷與真正業(yè)務執(zhí)行耗時。禁用機制:提供disable(),請求被取消或超時時阻止后續(xù)回調交付。51.2.13 executeAppFunction 實現深度解析system_server 的executeAppFunction是整個框架最核心路徑,逐行解析從 AIDL 入口到綁定目標服務的完整鏈路。步驟 1:入口與初始校驗@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包裝,保證無論目標應用多次應答還是崩潰,只返回一次成功 / 錯誤。步驟 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; }任務提交至THREAD_POOL_EXECUTOR,避免占用 Binder 線程池。步驟 3:權限與狀態(tài)基礎校驗(工作線程)@WorkerThread private void executeAppFunctionInternal(...) { // 企業(yè)策略校驗 if (!mCallerValidator.verifyEnterprisePolicyIsAllowed(callingUser, targetUser)) { safeExecuteAppFunctionCallback.onError( new AppFunctionException( AppFunctionException.ERROR_ENTERPRISE_POLICY_DISALLOWED, ...)); return; } // 目標包名校驗非空 if (TextUtils.isEmpty(targetPackageName)) { safeExecuteAppFunctionCallback.onError( new AppFunctionException( AppFunctionException.ERROR_INVALID_ARGUMENT, ...)); return; }步驟 4:鏈式 Future 完成權限校驗 + AppSearch 讀取啟用狀態(tài)實現使用AndroidFuture.thenCompose()做非阻塞權限校驗,緊接著查詢 AppSearch 獲取函數啟用狀態(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:服務解析與綁定.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); // 授予隱式可見性,允許目標看到調用方 mPackageManagerInternal.grantImplicitAccess( grantRecipientUserId, serviceIntent, grantRecipientAppId, callingUid, /* direct= */ true); bindAppFunctionServiceUnchecked( requestInternal, serviceIntent, targetUser, localCancelTransport, safeExecuteAppFunctionCallback, bindFlags, callerBinder, callingUid); })關鍵點:調用方具備EXECUTE_APP_FUNCTIONS權限時,使用BIND_FOREGROUND_SERVICE提升目標服務進程優(yōu)先級。自調用(同一包名)不會獲得該優(yōu)先級提升。51.2.14 RemoteServiceCaller 模式RemoteServiceCallerImpl實現一次性 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,行為:調用Context.bindServiceAsUser()連接目標服務設置取消監(jiān)聽器,超時后執(zhí)行 unbind監(jiān)聽調用方 Binder 死亡,調用方進程死亡則自動取消回調完成后自動解綁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; }該模式保證資源一定被清理,無論調用方崩潰、目標應用崩潰或者用戶主動取消。51.2.15 多用戶支持實現完整支持多用戶。每個用戶擁有:獨立 AppSearch 數據庫,保存靜態(tài)函數元數據獨立PackageMonitor監(jiān)聽包變更MultiUserDynamicAppFunctionRegistry中獨立分片保存運行時注冊項權限子系統(tǒng)持久化獨立的(代理,目標)訪問狀態(tài)與標志位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); }動態(tài)函數標記開啟時,每個用戶的 AppSearch 觀察者由AppFunctionMetadataObserver持有,變更事件同時分發(fā)給內部元數據緩存以及客戶端observeAppFunctions回調。運行時注冊表以 userId 為 key;當用戶停止,該用戶下全部注冊項被銷毀。51.2.16 代理白名單架構Android17 代理白名單不再是 DeviceConfig 與 Settings.Secure 字符串拼接,改用平臺AllowlistManager,白名單 ID 為ALLOWLIST_ID_APP_FUNCTION。輸入簽名代理包,返回該代理可訪問的目標包集合。AppFunctions 服務通過SystemAppFunctionAllowlistReader消費該能力。讀取器將代理最新簽名證書哈希封裝為SignedPackage,向AllowlistManager查詢合法目標包;查詢結果放入 LruCache 緩存,相同代理重復執(zhí)行可省去一次 IPC。@Override public CompletableFutureBoolean isAllowlisted( String agentPackageName, String targetPackageName, int userId) { if (agentPackageName.equals(targetPackageName)) { return AndroidFuture.completedFuture(true); // 自身函數永遠允許 } SignedPackage agentSignedPackage = new SignedPackage(agentPackageName, /* certificate digest */ ...); maybeStartAllowlistListener(); return getValidTargetPackages(agentSignedPackage) .thenApply(allowlistTargets - allowlistTargets.contains(WILDCARD_PACKAGE_NAME) || allowlistTargets.contains(targetPackageName)); }三條關鍵行為:自訪問隱式放行:代理與目標包相同,應用永遠可以調用自身函數。通配符目標:白名單配置通配符包名,代理可訪問全部目標。變更監(jiān)聽:首次使用注冊OnAllowlistChangedListener;白名單更新時緩存自動失效,不再只在開機階段讀取配置字符串。51.2.17 AppFunction 響應中的 URI 授權當目標應用在響應中返回 content URI,框架可以為調用代理授予臨時 URI 權限。private final IUriGrantsManager mUriGrantsManager; private final UriGrantsManagerInternal mUriGrantsManagerInternal; private final IBinder mPermissionOwner; // 構造函數中初始化 mPermissionOwner = mUriGrantsManagerInternal.newUriPermissionOwner("appfunctions");響應中的AppFunctionUriGrant指明需要向代理授予哪些 URI。授權經由mUriGrantsManager.grantUriPermissionFromOwner完成,綁定到 AppFunctions 專屬 permission owner。權限有效期直到 owner 釋放或者設備重啟。51.2.18 Shell 命令支持服務實現onShellCommand(),用于開發(fā)者調試。@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 服務啟動與生命周期本框架屬于SystemService。AppFunctionManagerService.onStart(),當AppFunctionManagerConfiguration.isSupported(context)為 true 時,把 Binder 服務發(fā)布到Context.APP_FUNCTION_SERVICE;開啟 App Interaction API 標記時,額外發(fā)布本地服務AppInteractionService。@Override public void onStart() { if (AppFunctionManagerConfiguration.isSupported(getContext())) { publishBinderService(Context.APP_FUNCTION_SERVICE, mServiceImpl); } if (Flags.enableAppInteractionApi()) { publishLocalService(AppInte
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲成人精品久久久| 蜜臀AV成人精品蜜臀| 色区97| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 九九热在线精品视频| 欧美情色男人的天堂| 亚欧成人综合影院| 欧美高清18A片| 亚洲偷91色| 最新欧美色网| 婷婷五月av| 国产成人无码a| 国产sv美女内射| 超碰在线974| 中国探花熟女| 欧美熟女操屄| 日韩人成网站在线播放| 亚洲一区二区在线观看91| 风月影院男女十八禁| 3571色综合一区二区二区| 国模艳艳啪啪一区| 久久久久久久九九九九九九| 亚洲91色| 日产欧美电影一区二区三区| 97欧美日韩| 极品出轨视频网站| 无码人妻毛片丰满熟妇精品区| 中文久久一区| 亚洲一本色码中文字幕| 闷骚老熟女15P| 精品久久久久瑟瑟| 高清不卡一二三区视频......| 新版天堂中文资源8在线| 亚洲国产婷婷在线播放| 99青青草国产视频| 伊人国产成人av网站| 亚洲s色图| 欧美天天综合站| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 久久久久ab| 国产熟妇一区二区| 啊啊啊啊好疼视频| 欧美色爱综合| 夜夜免费视频| 成年无码动漫av片无尽在线| 日本国产亚洲一区在线观看| 日本东京热加勒比久久| 把腿张开老子CAO烂你| WWW黄片COM| 久久性爱免费送| 九九热视频在线观看| 国产呦精品一区二区三区下载| 91啦人妻| 综合色播| 九九热视频这里只有精品| 伊人网在线观看| 91无码人妻| 性色A∨91| 偷拍三区| 精品国产网站| 亚洲双插| 国产日本久久免费精品| 插老姨肥穴| 日本九九九九| 加勒比综合88| 久久久麻豆精品| 男女打扑克高清网站| 中文字幕日产av人| 日日骚中文字幕| 亚洲91在线播放影院| 亚洲.欧美.丝袜.中文.综合| 新精精品久久精品| 日夜伊人网| 欧美日韩国内不卡| 亚洲污污网站| 在线观看无码三级少妇| www.色五月| 骚熟女吞| 在线观看免费视频国产| 久久亚州高清| 97超碰人人模人人拍人人| 成人福利视频网| 蜜臀在线免费观看在线免费观看| 97资源站国产精品| 欧美视频边做饭边橾| 欧洲小说色图视频另类| 中国少妇XXXX做受| 日夜干射色啊| 国模艳艳啪啪一区| 尤物视频偷拍免费| 第一高清av中文字幕| 精久久久| 欧美人妻久久精品二区三区| 俺去啦自拍| 五月丁香社区婷婷日韩欧美精品影院 | 噜噜噜噜久久久精品免费| 亚洲成人网站在线观看| 亚洲污污网站| 日本性爰一道本| 9999九九九久久久| 亚洲日韩成人性爱视频| 国产精品乱码久久久久| 久久天天摸| 12一15性XXXX粉嫩国产| 免费久久9999| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 2017天天插| 天天射网| 成人三级片无码| 99re99| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 久久久性| 色网1| 天天干少妇| 1769一区| 91美女在线观看| 国产白嫩精品久久| 国产精品一区午夜福利| 动漫av中文| 欧美国产日韩清纯唯美 | 啊v在线观看视频| 国产性爱乱伦AV| 国产精品免费日韩| 伊人五月天激情| 久久夜精品一区二区三区| 欧美黄色片AAAAA| 国产丝袜欧美在线视频| 丝袜 中出 制服 人妻 美腿 中文字幕| 91搞逼视频| 婷婷五月天无码| 久久精品性| 日逼逼免费看| 日韩欧洲操屄视频| 欧美色www亚洲国产阿娇要播| 99热 按摩 日韩| 亚洲成?V人片在线观看福利| 国产成人在线观看网址| 中日韓欧美高清| 欧美小说区视频区| 91 丝袜在线观看| 2026国产精品视频| 精品女同一区| 欧美三级偷拍| 久操免费电影| 大逼色网站| 好屌色综合| 亚洲一区二区三区麻豆传媒| 99超级碰免费视频| 五月天黄色av| 亚洲无码免费看| 麻豆视频国产一区二区| 国产一区二区三区白丝| 一本大道不卡一二三区| 1024人妻熟女一区二区三区| 神马久久久久久久| 日本黄色精品专区网站| 欧美精品23| 91操人| 国产97视频免费观看| 亚洲成人一区二区精品| wwwxxx日本爽| 日本123区操B视频| 久久久久久久 九九九九九九九| 欧美亚洲玖玖玖| 少妇与黑人高潮在线| 高清肉丝中文无码| 人妻一区二区三区熟女| 国产中文字幕在线点播| 婷婷午夜| 欧洲精品久久| 97资源久久| 性爱综合一区二区| 精品性爱无码在线播放| 91jk色拍| 97干在线| 成年人三级黄色片视频| 美女露胸露尿口| 亚洲诱惑天堂| 国内外毛片在线观看| 色97欧美| 超碰人人超在线观看| 久久久久久久少妇| 亚洲在钱| 亚洲第一黄色av网站 | 少妇综合| 五月综合色| 伊人视频| 精品在线观看视频在线| 热久日综合| 欧美日综合| 人人么人人操| 国产白丝在线| 98超碰欧美| 伊人影院综合是一个与深夜成人在线| 99啪| 国产精品成人久久一区二区三区| 久悠悠av| 国产成人亚洲精品无码最新在线| 秋霞一级视频在线观看免费| 国产AV线| 丁香六月综合激情| 上特色A在线| 欧洲色| 欧美精品久久96人妻无码| 爽爽淫人网| 中文字幕欧美丝袜07资源| WWW黄片COM| 精品国产乱码久久久影院| 韩国三级一线观看久| 婷婷激情啪啪| 四虎免费在线播放| 午夜人妻精品综合在线| 爱妃国产亚洲视频中文字幕| juliaann丝袜大战黑鬼| 999亚洲国产视频| 香蕉免费一区二区三区不读| 久久肏大逼| 超碰97综合网| 欧美日韩电影一区二区| 人妻在线视频| 精品国产三级av韩国在线 | 色偷综合| Av色五月| 欧日a| 啊啊啊啊啊在线| 亚洲男人的天堂在线看| 久草视频分类在线| 六六久久日韩不卡| 秋霞免费AV| 大香蕉中文| 超碰97首页| 人妻碰碰碰碰碰碰| 大地资源在线观看中文第二页| 97操97干| 伊人9| 亚洲高清视频在线观看| 黄色高清无码无码破解免费暗网| 成人五月天丁香激情综合| 2026国产精品视频| 婷婷五月天久久精品视频一区二区三区| 97这里有精品| 亚洲少妇免费视频\| 熟女欧美日韩综合婷婷| 久久久婷婷| 操逼片中文| 国产辣妈在线视频福利| 亚洲影院无码在线| 四虎午夜影院| 伊人伊人LD| 国产1769在线| 日韩不卡av一二三| 伊人黄色视频免费观看| 这里只有精品视频在线观看麻豆 | 老司机免费视频在线91| 男人下部插入女人下部| 亚洲天堂女优在线| 日韩欧美丝袜诱惑| 东北女人的毛片| 超碰色中文| 长长久久曰曰夜夜成人网| 无码国产精品久久久久| 一区在线观看中文字幕| 91精品国| 一级性爱啪啪视频| 91色拍| 国产精品久久久久无码Av网曝门| 狠久久| 精品人妻一二三四区视频| 亚欧美综合网。| 物业黑人 AV一区| 伊人青青一区成人视频在线观看区| 三级片网站在线播放| 五月婷婷激情综合| 美日韩在线不卡人妻| 久草线上视频免费看| 欧美天天干| 欧美亚洲中文| 成年女人18级毛片毛片免费观看| 欧美 亚洲 制服 精品| 四虎国产成人精品免费一女五男| 超碰97人人乐| 无码高清操逼网址| 99热伊人| 91男女| 国产日韩精品suv| 久久人人爽人人爽人人片Ⅴ| 精品乱子一区二区三区99| 青青久久久| 欧美精品久久96人妻无码| 干婷婷综合网| 二三四区精品| 久久久久亚洲Av无码专区老牛影视| 波多野结衣被操50分钟免费视频| 精品妇女一区二区三区| 亚洲激情欧美色图 | 艹我哪美一区无码| 人人九九精| 91艹B视频| 中美日韩毛片| 看大黄色大片原件| 2020中文在线一区二区三区| 欧美老熟另类| 日日躁夜夜躁狠狠躁超爽| 99久国产精品午夜性色福利| 91九久| 曰韩香蕉97| 亚洲日韩美国人妻| 色网综合网| 视频黄色国产一级| 伊人大香蕉在线| 东京热天堂网| 天堂九九九九九九九九九| 夜夜夜爽www精品视频| 国产av美女被艹的乱叫| 人妻蜜桃臀| 无码国产精品午夜不卡(| 国产精品动态一区二区三区四四| 人人摸人人叼| 久操国产在线| 欧美一二在线| 日韩一区二区三区四区五区| 果冻传媒A片一二三区| 一区二区三区精品视频| 91视频综合在线| 亚洲精品aa久久伊人| 久久婷婷一区| 毛片17S| 欧亚乱色熟女一区二区| 最新制服中文第一页| 麻豆天美国美国产| 99在线无码精品秘 入口黑人| 伦理日韩国产久久| 五月丁香激情综合| 国产极品精品美女视频| 啊啊啊啊无码| 久久爽爽精品| 亚洲综合20p| 丝袜美腿校园春色| 九九无码视频| 丝袜综合| 成人在线视频网| 精品亚洲成人免费在线| 夜夜国自区| 久久精品72| 久久ww| 欧美国产欧美在线观看| 亚洲天天更新| 日本幼女18+| 青女在线| 四虎视频在线观看| 99激情| 十八禁视频网站| 92性色国产午夜福利在线661| 亚州色图欧美色图| 日韩无码AB| 亚洲色图大香| 思思热在线视频精品| 操逼视频免费日韩无码| 国产人妖视频一区在线观看| 在线播放免费av福利片| 成人久久久| 久久在肏| 91欧美少妇| 99re热| 天天舔天天日天天射| 男人的天堂欧美| 91精品综合久久久久久五月丁香| 一级做受视频免费是看美女| 91影视亚洲| 91天堂视频| 久草资源欧美在线视频| 中文字幕88av在线| 麻豆一区二区三区精品| 成人片视频| 亚洲诱惑天堂| 爱爱动态60秒| 国产亚洲福利第一页丝袜| 日本不卡在线二区三区| 一级黄碟| 九九无码视频| 免费黄色片。| 国产成人无码网站在线视频| 亚洲人妻av| 丝袜熟女2P| 75大香蕉| 色悠悠伊人网五月天| 超碰91在线| 青娱乐欧美激情一区二区| 日韩免费在线视频观看| 丁香六月啪| 激激五月| 99热大香蕉伊在线| 成年无码动漫av片无尽在线| 激情网色| 暖暖精品二区三区观看| 色老牛| 狠狠爱大香蕉| 伊人影院综合是一个与深夜成人在线| 亚洲精品色| 夜夜操一区二区| 夜夜嗨视频| 黑人无码一区二区| 欧洲中文字幕| 人妻久久一区二区三区 | 91+欧美| 欧美人妖内射| 国产精品久久99日日| 精品91摸| 天天综合网视频91| 国产狂喷潮在线精品| 激情五月天丁香社区| 伦在线97| 91九色蝌蚪在线观看| 久久9精品视频| 91欧美经典| 亚洲偷拍自拍在线视频| 男人把坤坤插入女人的下体| 亚洲国产av中文字幕久久| 高潮内射在线| 天天色天天干天天射| 又大又大又大又粗爽高潮观看| 综合操逼| 国产不卡的视频 | 新婚人妻扶着粗大强行坐下| 精品人妻一区二区乱码一区二区| 国产在线观看一区二区三区| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 国模精品一区二区三区苹果色戒 | 性一交一乱一交A片久久四色| 都市激情人妻一区二区青青操视频| 国产一区二区三三视频| 亚洲色香| 日本午夜福利影院| 欧美综合第一页| 中文字幕丝袜美腿| 插穴性爱视频在线观看| 久久青娱乐| 亚欧Av| 男人的天堂VA| 欧美久久婷婷| 高清在线偷拍自拍视频| 久久AV无码AV| 丝袜高跟澳门91视频| 在线观看av区| 秋霞免费无码视频日韩A片| 91中文精品日韩欧美在线| 一级啊性爱在线视频| 亚洲天天自拍| 色娱乐色呦呦夜夜夜夜av| 免费综合亚洲中文| 综合伊人激情| 亚洲欧美骚| 高清肉丝中文无码| 欧美性爱另类综合| 性爱视频无打码在线观看| 日韩特一级久久| 麻豆精品A片免费观看| 国产欧美成人第一页在线观看| 99啪啪| 91精品人妻一区二区三区蜜桃臀| 色吧5亚洲| 亚洲交换| 欧美日韩美女精品久草一区二区三区| 少妇 综合| 激情看片网站| 欧美精品1区2区3区| 一本久道在线综合视频| 性色AV蜜色av色欲av| 一卡二卡三卡| 精品无码少妇| 大奶的诱惑| 9Ⅰ超碰| 快播久久人人aV| 亚洲国产福利视频| 91劲爆| 少妇同性| 中文字幕超碰CAO| 男人的天堂在线| 欧美97视频| 综合97亚洲| 蜜桃精品视频一区| 亚洲美女黄色| 大干人妻| 99热销国产这里有精品| 亚洲人妻久久| 日本在线观看网址| 国产成人精品必看| 成人免费不卡在线视频| 国产av尤物| 欧美激情总合网| 宅男午夜在线视频| 亚州人妻| 97超碰影音| 欧美综合网A| 乱伦日本中文自拍| 黄色片大香蕉| 天天日日夜夜| 屌妞视频久久久久久久久久久久| 乱子伦一区二区三区国产精品| 久久熟女久| 婷婷丁香人妻| 久久久久亚洲三级电影| 中字乱伦AV| 内射黑人| 亚洲激情综合另类男同| 狠操91,com| 综合久久99| 天天插夜夜操| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 大奶啊啊好爽| 手机不卡视频不卡在线一二三区| 日本 免费 一区二区三区 久久香蕉| 九九九九九九九九九九九免费国产| 亚洲 另类 丝袜 自拍 动漫| 精品人妻一区二区三区视频在线| 久久天天艹| 免费观看欧美日韩操逼视频| 色香91| 国产视频一区二区三区在线免费观看| 中文字幕 码精品视频网站| 激情亚洲天堂| 天天夜躁日日躁狠狠2002| 麻花传媒免费网站在线观看| 大奶啊啊好爽 | 亚洲图片偷拍视频区| 欧美久久毛片基地| 中文久久| 91 亚洲 欧美 日韩 国产 综合| 欧美综合色站| 精品国模无码| 国产精品视频电影| 国产精品盗摄 偷窥盗摄| 久操综合在线| 国产毛片片精品天天看视频| 欧美亚洲综合色| 蜜臀99久久精品久久久久| 日韩高清黄片| 后入福利视频| 色官网在线| 校园春色家庭伦理欧美激情| 囯产乱伦一区二区三女| 懂色影视久久| 超碰人人妻| 久久男人天堂| 国产熟女一区二区丰满| 国产精品久久久久久久电影渣男| 黄色十八禁网站| 丝袜美腿制服人妻二区中文字幕| 久久九九网| 黄色视频特级毛片| 国产免费久久精品99re韩国| 日操粉逼逼| 97欧美资源| 99re95| 日韩不卡毛片Av免费高清| 大香蕉2017| 天天欧美色| 国产h片在线观看视频| 超碰欧美COM| 性色国产东北露脸精品视频| 91在线精品| 亚洲āv网址在线观看| 欧美熟妇乱码在线一区| 一块操欧美性爱| 国产呦精品系列在线观看| 美美91成人国产精品欧美精品久久久久久久| 无码最新| 97超碰伊人| 91nbbbbbb| 人人爽夜夜操| 熟女突然公开看18禁影片| 日本精品一级二级三级| 久久噜噜噜精品国产亚洲综合| 亚洲成?V人片在线观看福利| 国产400孕妇孕交群| 99久久9| 九九久久99| 久热9| 久久99人妖视频国产| 2017人人操,人人摸| 亚洲综合97| 91N综合网| 亚洲少妇视频| 九九九不卡| 天天日天天看| 久久精品72| 九九玖玖精品| 国产一级久久久| 婷婷激情一区二区三区俺也去| 日本大片日本一区二区免费高清 | 国产精品操| 少妇天堂| 一区二区中文| 你懂的在线观看区国产| 91人妻最真实刺激绿帽| 九九精品99| 人妻aa| 91欧美经典| 亚洲午夜AV| 操婢日韩| 亚洲最大的综合性av| 欧美不卡在线一区二区| 久久国产逼| 小视频国产| 婷婷五月天AV| 天天弄欧美| 四虎在线观看网站| 国产白丝网站| 亚洲日韩视频二区| 亚洲综合婷婷| 大香蕉国产中文自拍| 性欧美| 中国91AV| 国产又黄又粗的视频| 色情乱伦AV| www.丁香五月| 中日韩久久人妻一区二区| 神马九九九| 亚洲人成网站7777| 日本精品第一视频在'| 伊人色综合网电影| 亚洲黄日韩无码专区| 中文有码9| 日韩亚洲国产视频| 狼人综合婷婷激情四射 | 91色色综合| 亚洲综合在线第一页| 日韩免费a级毛片无码a∨| 日韩无码a片| 久久理论字幕视频| 91殴美| www.五月天| 97在线免费看视频| 大香蕉综合在线| 99视频自拍区| 操逼视频国产无套| 麻豆啪啪啪视频| 囯产精品强| 国产91精品福利在线| 天天综合欧美综合| 久久久久久国产成人| 97人肏| 国产老太乱伦一区| 精品久久久久黄少妇| 国产女主播视频在线观看| 日日日日做夜夜夜夜无码| 精品无码一二三四区| 久久 久久国内精品亚洲| 色狠人在线99| 国产白丝网站| 色综合九九| 国产一级内射高清视频| 嫩草影院永久在线制服丝袜| 伊人网综合在线视频| 97伊人超碰| 色婷婷aV一区二区三区麻豆综合| 不卡av在线中文字幕| AV色五月| 9热9热综合网| 久草五月| 国产在线播放成人免费| 免费视频观看60秒| 99久久国产精品免费高潮| 禁十八久久| 国产在线视视频有精品| 国产精品香蕉| 欧美一区二区三区成人性生活| 激情五月综合| 26uuu性物| 亚洲国产综合视频| 人澡逼| 人人超碰在线观看黄| 大香蕉520| 最新三级网址| 99婷婷一区二区| 9久久久久久| 日韩操呦呦影院在线观看| 免费观看有码高清视频| 黄片aaaaa一区| 爱妃国产亚洲视频中文字幕| 亚洲丝袜在线观看| 插入粉嫩少妇视频| 91性生活久久久| 超踫中文字幕| 久久久五月天| 国产福利第一视频| 黄页视频网站野外| 欧美精品99久久久**| 久久性爱视频免费看| 精品九区| 天天综合亚洲综合| 亚洲图片欧美| 日日夜夜精品视频| 啊啊啊好想要| 97精品视频| 久久久久九九九九| 日韩成人无码| 欧美日韩大香蕉| 国产成人超碰在线| 久久中文字幕不卡人妻| 岛国在线国产| 久久久久亚洲AV无码专区少妇| 国产亚洲精品久久久久小| 欧美黄色手机在线观看| 97在线观看视频| 啊啊啊不要好疼视频| 国产精品亚洲天堂网址| 日本三级网页| 亚洲一本大道中文字幕无码在线| 国产色精品午夜大片| 国产激情在线观看| 天天做天天爽| 蜜桃臀 后入 一区 二区 三区 在线| oumeisetu综合| 黄网站黄视频网站进入口| 欧美人妻中出| 麻豆天天躁天天揉揉AV| 成人怡红院| 国产精品 久久久精品一牛| 日韩性爱人人爱人人操| 91丨九色丨国产打屁股| 麻豆天美电影一区二区| 婷婷精品国产一区二区三区日韩| 日日碰视频网| 91天天综合| 秋霞影音一区二区三区| 九九热九九热| daxiangjiao你懂的| 成人怡红院| 无码天天操| 欧苏综合色综合| 自拍亚洲综合| 超碰97护士| 精品黑人一区二区| 大香蕉综合| 欧美一区二区| 国产综合网站在线播放 | 久久性爱大全| 1204av韩国| 色吧91| 中文字幕在线观看二区三区| 操操操操操操| 无码天堂| 日本三级韩三级99久久| 日本中文字幕熟妇| 久久免费99精品久久久久久| 99性爱| 亚洲狠| 丁香五月天激情网站| 亚洲色情在线影视| 午夜激情成人在线观看| 91色噜噜狠狠| 84YTCOM性无码| 五月天婷婷欧美三区| 九九久精品| 综合操逼| 中文字幕精品亚洲熟女| 看黄片视频免费| 久久啊啊啊视频| 在线综合 亚洲 欧美中文字幕| 福利偷拍视频-中文字幕2019国语完整视频大全-S91AV | 伦理第一页| 久久视频少妇美女| 激情另类激情| 色综合婷婷| 97在线视频免费看| 蜜臀av在线播放一区二区三区| 亚洲综合色图欧美| 大香交伊人网| 蜜臀久久99精品久久久久久无删减 | 欧美精品欧美精品系列 | 91激情网| 无码视频黄色网战| 欧美 亚洲精品首页| 爽爽淫人网| A级片日韩欧美国产欧美视频精选观看| 香一区二区三区| 青草草免费网站av| 韩国毛片一区二区三区| 婷婷在线视频| 性爱网站一区二区| 综合色久欲| 日韩乱码Av| av在线播放国产一区| 中文字幕av一区二区三区人妻少妇| 在线视频日韩欧美国产| 97操| 亚州Av天美传媒| 玖玖97综合| 手机在线A片| 男人的天堂网页| 噜噜噜亚洲精品| 嗯啊不要在线观看嗯啊| 国产性爱在线视频一区二区| 91模特在线观看| 日韩钢筋无码高清啾啾啾| 日韩人妻一区二区精品| 另类图片欧美激情综合| 亚洲丝袜制服国产91_国语字幕免费观看完整版下载第5集_ | 国产四虎在线| 欧美亚洲中文字幕| 国产又粗又大硬免费色网视频| 欧美玖玖爱免费玖玖| 青青11操操操操操操操操| 国产成人自拍视频在线| 亚洲av国产av综合av卡| 麻豆亚洲AV成人无码久久精品| 啊啊啊啊啊啊啊啊啊啊在线观看| 久久九九综合| 久久精品美女一区| 国产极品精品美女视频| 午夜成人爽爽爽爽A片李冰冰| 青青草一区二区三区四| 小明看看网址| 男插女青青影院| 人妻天天操天天爽视频免费| 色婷婷av在线观看| 你懂得91| www成人啪啪18秘 免费| 国产www色在线观看| 人人干黄色| 午夜视频好爽啊| 五月天春色激情网| 国产亚洲精品美女久久久久久2021| 精品九九九| 亚洲学生妹高清av| A级在线视频| 99久久国产精品免费高潮| 爱爱啊啊啊| 日韩肏逼视频| 成年人网站在线免费观看| se..亚洲欧美| 久久久久亚洲熟妇熟女| 久久精品人人做人人看| 久久性生大片免费观看性| 国产精品精品系列在线观看| 久久产精品一区二区三区电影| 粉嫩av在线| 午夜激情成人在线观看| 性久久| 婷婷激情综合网| 日本 成 人 小说 电影 一区二区| 日韩另类色图| 国产精品第二页| 久久久九九| 17c嫩草51久久91嫩草| 日韩性爱免费观看视频| 一级特级aaaa毛片免费观看 | 日韩欧美性爱电影在线观看| 亚洲AV成人精品网站在AV| 日逼视频日本| 婷婷久久综合久| 天天舔九色婷婷| 超碰 欧美| 国产极品粉嫩馒头一线天av| 福利视频一区二区微拍| 嗯嗯嗯好爽| 欧美乱妇狂野欧美在线视频| 亚洲欧洲日韩中文字幕一区| 日本在线观看网址| 性爱av网站| 欧美性区| 青青草福利视频| 在线视频日韩欧美国产| 青青草吊丝| 亚洲性高潮| 亚洲开心网| 3P乱轮视频| 操我啊啊啊啊啊| 噜噜噜噜久久久精品免费| 天天日天天搞天天干| 91xingse| 日本三级精品| 亚洲天堂7777| 青青伊人久久| 日韩一区二区精彩视频| 九色97| 久久久久国色αv免费观看| 日本操色导航| 330dv亚洲成年视频网| 亚洲av成人精品一区| 中文字幕黑人大片| 2017,超碰| 五月天色色网站| 后入式999| 婷婷AV一区二区三区| 好屌色综合| 五月丁香拍拍激情综合三级| 97天天弄| yellow网站免费观看日韩高清无码| 九九热精品在线| 人人模人人看| 成人熟女视频一区二区三区| 日本孕妇一区二区视频操逼免费看 | 91丝袜在线观看视频在线观看| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 中文字幕精品一区二| 日韩/97| 免费观看国产小粉嫩喷水精品午| 中文字幕88av在线| 美女午夜福利免费视频| 999熟女精品| 久久五月婷| 伊人国产成人av网站| 亚洲成人精品久久久| 日本熟女中文字幕一区| 91精品操美女| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 91chinese在线| 中文字幕欧美日韩三级| 久久久久久久久九九久孕交| 中文字幕AV乱伦| 夜夜春夜夜操| 久久久影院| 日韩精品在线观看网站| 久久久久久久91| 麻豆国产成人精品| 六月丁香久久| 一起草欧美| 欧美色图99| 九热大香蕉| 久/久精品99看9| 巨爆乳一区二区爆乳区| 99999亚洲另类| 伊人国产视频| 五月综合久久| 一级特级aaaa毛片免费观看| 99热这里只有精品18| 亚洲青青草| 少妇六月天| 狠狠干,狠狠操| 亚洲古典另类欧美在线| 女人精品内射国产99| 伊人9| 330dv亚洲成年视频网| 久久99国产综合精品女同| 人、人、摸,人、人、草| 九九九精品成人免费视频小说| 超碰97综合网| 国产精品久久久999| 亚洲蜜臀懂色| Av色五月| 老女人爆菊| 婷婷香蕉| 99色视频| 久久五月视频| 制服乱伦| 欧美丰满熟妇XXXX性ppX人交| 久久九九视频九九视频| 2019精品国产无码成人| 另类亚洲一区二区三区| 欧美激情专区| 久久男人天堂| 91色色网站| 欧美高清18A片| 91久久久亚洲| 午夜福利1区2区3区| 日韩免费av片高清无码| 亚洲啪AⅤ永久无码| 亚洲欧洲中文日韩女优乱码| 少妇高潮流水av免费| 高清国产无码av| 欧亚乱色熟女一区二区| 久久久久久久久久久久久久久久9| 欧美日本一区二区a人| 无码人妻丰满热妇又大又粗| 国产精品久久久久亚洲av| 亚洲国产午夜真人一级片中文字幕精品黄网站 | 国产成人在线观看网址| 精品人妻免费观看| 高清国产性猛交xxxx乱大交| 秋霞无码av鲁丝片一区| 精品少妇一区二区三区在线视频| 天天爽天天操| 亚洲欧美中日韩| 亚洲涩涩| 97碰久久| 美国精品国产精品| 五月婷婷激情网| 无码一区二区三区四区五区六区七区八区九区十区视频 | 丁香五月婷婷色| 69综合网| 97日韩欧美亚洲| 最新日本中文字幕| 99久久久er直播网址| 香蕉在线一区二区三区| 97精品中文字幕| 神马久久午夜| 免费啪啪一级视频| 色综合一区二区三巨| 中文字幕女同在线| 精品国产乱码久久久久久蜜臀| 日韩精品碰碰| 97人妻色| 黄色工厂这里只有精品| 变态乱伦伪娘灌肠一区二区| 香蕉在线一区二区三区| h色99999| 国产亚洲精品美女久久久| 欧州色图区| 久热这里| 韩国手机不卡无码三级视频| 九色视频91| 91无码人妻| 曰韩操B| 九一综合精品视品av| 97亚洲在线| 色情五月综合婷婷| 欧美综合狠| 在线视频免费播放一区| 成人精品一区二区三区| 国产无码成人无码| 日韩乱码av| 啊啊啊啊啊啊啊啊在线观看| 色噜噜综合网| 精品超碰色| 欧美精品999| 97资源站国产精品| 日本国产成人亚洲精品无码| 91美女視頻| 一区二区三区视频在线观看免费| 大香蕉之青青草原| 黄色av片三级三级三级免费看| 一区二区视频你懂的| 一区二区影院| WWW美腿丝袜香蕉中文| 一级久久性爱视频| 午夜亚洲| 后X久久| 最新无码国产| 亚洲综合图色在线| 18禁网站在线播放| 四季av一区二区凹凸精品小说| 久久精品国产96精品亚洲拳交| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 性爱AV天堂| 麻豆久久一区二区三区| 欧美黄色大香蕉一区二区| 人妻内射一区二区在线视频| 日韩成人精品视频自拍| 日日骚一区二区三区| 欧美色图天堂在线| 精品无码一区二区三区| 91麻豆一二三区| 狠狠干,狠狠操| 欧美日韩午夜精品一区二区三区| 日韩国产十八禁| 91超级碰| 国产无吗在线播放| 亚州,欧美在线| 欧美狠狠操| 丁香五月激情啪啪| 日韩激情毛片一级久久久| 97在线欧| 日韩99神马视频片| 99热欧美| 国产人伦a片信息免费片| 久久久久久九九九| 久久久久久久9最新免费视频观看| 丁香久久| 久久久久久69国产一区二区| 欧美日韩中文字幕不卡| 嗯嗯啊啊好大好爽| 九九九久千久久激情蜜桃在线看| 亚洲一区二区精品福利| 久久丁香久草综合网| 亚洲av资源| 成人情色综合网| 神马久久啊啊| 成人A片男人的天堂| 久都青青视频| 一道本久久棕合爱| 99性视频| 日韩乱伦视频| 中国女人内射6XXXXX| 成人a级高清视频在线观看| 国产精品熟女一区二区三区| 大粗鳼巴久久久久| 超碰97综合网| 欧美在线大香999| 色偷偷综合91久久噜噜| 日本不卡一区二区三区| 亚熟hd视频在线| 裸体美女久久久| 日韩精品99久久久久久中文字幕| 大香蕉伊人网WWWn0n| 不卡超碰护士AV在线免费播放| 天天插天天射| 日本三级韩三级99久久| 9久超碰| 精品久久99| 最新中文字幕av| 色综合99999| 欧美高清在线| 麻豆av一区二区| 亚洲综合第一页| 无码高清操逼网址| 在线a v| 日本色色色| 高清不卡视频| 怡春苑东京热| 天天综合网亚洲综合网| 天天性射网| 久久久亚洲熟妇熟女| 我要去看2个日本美女.com曹逼| 久综合国内精品自在自线| 免费观看国产小粉嫩喷水精品午| 欧日a| 丝袜熟女2P| 最新av在线| 99re视频这里只有精品| 国产精品不卡高清在线观看| 黑人操一区二区| 天天日天天舔天天喷天天射| 97 国产一区| 久热精品在线| 国产极品粉嫩馒头一线天av| 女人喷水视频在线观看| 东北黄色电影| 亚洲色图欧美色图在线播放| 欧美中出| 大香蕉丝袜一级片| 东北女人的毛片| 鸥美中出| 一区二区三区欧美激情| 久久国产免费激情视频| 无码高清少妇久久| 日本午夜久久电影| 免费网站观看www在线观| 精品999一区二区| 一区三区啪啪| 欧美亚洲美少妇一区二区| 国产精品扒开腿做爽爽爽视频| 操逼网免费无码视频| 求求你操操我| av三级电影在线播放| 婷婷色综合| 蜜臀va69| 午夜欧美女人操逼| 久久人人爽av亚洲精品天堂桃色| 伊人热综合| 欧美日韩222| 91爱啪| 性爱综合一区二区| 99在线精品观看99| 久久久久ab| 日本一区视频在线观看| 欧美最婬乱婬爆婬性视频| 在线视频97| 天天操女人| 精品国产乱码久久| 99999久久久久9国产精品| 亚洲男人天堂AV| 暖暖精品二区三区观看| 日日爱99| 怡红院怡春院| 极品综合| 另类专区加勒比| 欧美性爱另类综合| 啪啪啪男女亚洲中文字幕99|