久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Android后臺(tái)啟動(dòng)Activity的實(shí)現(xiàn)示例

瀏覽:5日期:2022-09-19 09:15:47
概述

前幾天產(chǎn)品提了一個(gè)需求,想在后臺(tái)的時(shí)候啟動(dòng)我們 APP 的一個(gè) Activity,隨著 Android 版本的更新,以及各家 ROM 廠商的無(wú)限改造,這種影響用戶(hù)體驗(yàn)的功能許多都受到了限制,沒(méi)辦法,雖然是比較流氓的功能,但拿人錢(qián)財(cái)替人消災(zāi),于是開(kāi)啟了哼哧哼哧的調(diào)研之路。

原生Android ROM

首先從 Android 的原生 ROM 開(kāi)始,根據(jù)官方的介紹,后臺(tái)啟動(dòng) Activity 的限制是從 Android 10(API 29) 才開(kāi)始的,在此之前原生 ROM 是沒(méi)有這個(gè)限制的,于是我分別啟動(dòng)了一個(gè) Android 9(API 28) 和 10(API 29) 版本的模擬器,發(fā)現(xiàn)在 API 28 上可以直接從后臺(tái)啟動(dòng) Activity,而在 API 29 上則受到了限制無(wú)法直接啟動(dòng)。參照官方 從后臺(tái)啟動(dòng) Activity 的限制 的說(shuō)明,給出了一些不受限制的例外情況,此外官方的推薦是對(duì)于后臺(tái)啟動(dòng)的需求,先向用戶(hù)展示一個(gè) Notification 而不是直接啟動(dòng) Activity,然后在用戶(hù)點(diǎn)擊 Notification 后才處理對(duì)應(yīng)的邏輯。還可以在設(shè)置 Notification 時(shí)通過(guò) setFullScreenIntent 添加一個(gè)全屏 Intent 對(duì)象,該方法經(jīng)過(guò)測(cè)試,可以在 Android 10 的模擬器上從后臺(tái)啟動(dòng)一個(gè) Activity 界面(需要 android.permission.USE_FULL_SCREEN_INTENT 權(quán)限)。代碼如下:

object NotificationUtils { private const val private const val NAME = 'notification' private var manager: NotificationManager? = null private fun getNotificationManagerManager(context: Context): NotificationManager? {if (manager == null) { manager = context.getSystemService(Context.NOTIFICATION_SERVICE) as? NotificationManager}return manager } fun sendNotificationFullScreen(context: Context, title: String?, content: String?) {if (Build.VERSION.SDK_INT >= 26) { clearAllNotification(context) val channel = NotificationChannel(ID, NAME, NotificationManager.IMPORTANCE_HIGH) channel.setSound(null, null) getNotificationManagerManager(context)?.createNotificationChannel(channel) val notification = getChannelNotificationQ(context, title, content) getNotificationManagerManager(context)?.notify(1, notification)} } private fun clearAllNotification(context: Context) {getNotificationManagerManager(context)?.cancelAll() } private fun getChannelNotificationQ(context: Context, title: String?, content: String?): Notification {val fullScreenPendingIntent = PendingIntent.getActivity( context, 0, DemoActivity.genIntent(context), PendingIntent.FLAG_UPDATE_CURRENT)val notificationBuilder = NotificationCompat.Builder(context, ID) .setSmallIcon(R.drawable.ic_launcher_foreground) .setContentTitle(title) .setContentText(content) .setSound(null) .setPriority(NotificationCompat.PRIORITY_MAX) .setCategory(Notification.CATEGORY_CALL) .setOngoing(true) .setFullScreenIntent(fullScreenPendingIntent, true)return notificationBuilder.build() }}

到現(xiàn)在,整體上感覺(jué)還是不錯(cuò)的,現(xiàn)階段的 Android 原生 ROM 都能正常地從后臺(tái)啟動(dòng) Activity 界面,無(wú)論是 Android 9 還是 10 版本,都美滋滋。

定制化ROM

問(wèn)題開(kāi)始浮出水面,由于各大廠商對(duì) Android 的定制化各有不一,而 Android 并沒(méi)有繼承 GPL 協(xié)議,它使用的是 Apache 開(kāi)源許可協(xié)議,即第三方廠商在修改代碼后可以閉源,因此也無(wú)法得知廠商 ROM 的源碼到底做了哪些修改。有的機(jī)型增加了一項(xiàng)權(quán)限——后臺(tái)彈出界面,比如說(shuō)在 MIUI 上便新增了這項(xiàng)權(quán)限且默認(rèn)是關(guān)閉的,除非加入了它們的白名單,小米開(kāi)放平臺(tái)的文檔 里有說(shuō)明:該權(quán)限默認(rèn)為拒絕的,既為應(yīng)用默認(rèn)不允許在后臺(tái)彈出頁(yè)面,針對(duì)特殊應(yīng)用會(huì)提供白名單,例如音樂(lè)(歌詞顯示)、運(yùn)動(dòng)、VOIP(來(lái)電)等;白名單應(yīng)用一旦出現(xiàn)推廣等惡意行為,將永久取消白名單。

檢測(cè)后臺(tái)彈出界面權(quán)限

在小米機(jī)型上,新增的這個(gè) 后臺(tái)彈出界面 的權(quán)限是在 AppOpsService 里擴(kuò)展了新的權(quán)限,查看 AppOpsManager 源代碼,可以在里面看到許多熟悉的常量:

@SystemService(Context.APP_OPS_SERVICE)public class AppOpsManager { public static final int OP_GPS = 2; public static final int OP_READ_CONTACTS = 4; // ...}

因此可以通過(guò) AppOpsService 來(lái)檢測(cè)是否具有 后臺(tái)彈出界面 的權(quán)限,那么這個(gè)權(quán)限對(duì)應(yīng)的 OpCode 是啥呢?網(wǎng)上有知情人士透露這個(gè)權(quán)限的 Code 是 10021,因此可以使用 AppOpsManager.checkOpNoThrow 或 AppOpsManager.noteOpNoThrow 等系列的方法檢測(cè)該權(quán)限是否存在,不過(guò)這些方法都是 @hide 標(biāo)識(shí)的,需要使用反射:

fun checkOpNoThrow(context: Context, op: Int): Boolean { val ops = context.getSystemService(Context.APP_OPS_SERVICE) as AppOpsManager try {val method: Method = ops.javaClass.getMethod( 'checkOpNoThrow', Int::class.javaPrimitiveType, Int::class.javaPrimitiveType, String::class.java)val result = method.invoke(ops, op, myUid(), context.packageName) as Intreturn result == AppOpsManager.MODE_ALLOWED } catch (e: Exception) {e.printStackTrace() } return false}fun noteOpNoThrow(context: Context, op: Int): Int { val ops = context.getSystemService(Context.APP_OPS_SERVICE) as AppOpsManager try {val method: Method = ops.javaClass.getMethod( 'noteOpNoThrow', Int::class.javaPrimitiveType, Int::class.javaPrimitiveType, String::class.java)return method.invoke(ops, op, myUid(), context.packageName) as Int } catch (e: Exception) {e.printStackTrace() } return -100}

另外如果想知道其它新增權(quán)限的 code, 可以通過(guò)上面的方法去遍歷某個(gè)范圍(如10000~10100)內(nèi)的 code 的權(quán)限,然后手機(jī)操作去開(kāi)關(guān)想要查詢(xún)的權(quán)限,根據(jù)遍歷的結(jié)果,就大致可以得到對(duì)應(yīng)權(quán)限的 code 了。

Android P后臺(tái)啟動(dòng)權(quán)限

在小米 Max3 上測(cè)試發(fā)現(xiàn)了兩種方式可以實(shí)現(xiàn)從后臺(tái)啟動(dòng) Activity 界面,其系統(tǒng)是基于 Android 9 的 MIUI 系統(tǒng)。

方式一:moveTaskToFront

這種方式不算是直接從后臺(tái)啟動(dòng) Activity,而是換了一個(gè)思路,在后臺(tái)啟動(dòng)目標(biāo) Activity 之前先將應(yīng)用切換到前臺(tái),然后再啟動(dòng)目標(biāo) Activity,如果有必要的話,還可以通過(guò) Activity.moveTaskToBack 方法將之前切換到前臺(tái)的 Activity 重新移入后臺(tái),經(jīng)過(guò)測(cè)試,在 Android 10 上這個(gè)方法已經(jīng)失效了...但是 10 以下的版本還是可以搶救一下的(需要聲明 android.permission.REORDER_TASKS 權(quán)限)。

啟動(dòng)目標(biāo) Activity 之前先判斷一下應(yīng)用是否在后臺(tái),判斷方法可以借助 ActivityManager.getRunningAppProcesses 方法或者 Application.ActivityLifecycleCallbacks 來(lái)監(jiān)聽(tīng)前后臺(tái),這兩種方法網(wǎng)上都有文章講解,就不贅述了。直接貼出后臺(tái)切換到前臺(tái)的代碼:

fun moveToFront(context: Context) { val activityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as? ActivityManager activityManager?.getRunningTasks(100)?.forEach { taskInfo ->if (taskInfo.topActivity?.packageName == context.packageName) { Log.d('LLL', 'Try to move to front') activityManager.moveTaskToFront(taskInfo.id, 0) return} }}fun startActivity(activity: Activity, intent: Intent) { if (!isRunningForeground(activity)) {Log.d('LLL', 'Now is in background')if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { // TODO 防止 moveToFront 失敗,可以多嘗試調(diào)用幾次 moveToFront(activity) activity.startActivity(intent) activity.moveTaskToBack(true)} else { NotificationUtils.sendNotificationFullScreen(activity, '', '')} } else {Log.d('LLL', 'Now is in foreground')activity.startActivity(intent) }}

方式二:Hook

由于 MIUI 系統(tǒng)不開(kāi)源,因此嘗試再研究研究 AOSP 源碼,死馬當(dāng)活馬醫(yī)看能不能找到什么蛛絲馬跡。首先從 Activity.startActivity 方法開(kāi)始追,如果閱讀過(guò) Activity 啟動(dòng)源碼流程的話可以知道 Activity.startActivity 或調(diào)用到 Instrumentation.execStartActivity 中,然后通過(guò) Binder 調(diào)用到 AMS 相關(guān)的方法,權(quán)限認(rèn)證就在 AMS 中完成,如果權(quán)限不滿(mǎn)足自然啟動(dòng)就失敗了(Android 10)。

// APP 進(jìn)程public ActivityResult execStartActivity(Context who, IBinder contextThread, ...) { // ... // 這里會(huì)通過(guò) Binder 調(diào)用到 AMS 相關(guān)的代碼 int result = ActivityManager.getService().startActivity(whoThread, who.getBasePackageName(), intent, intent.resolveTypeIfNeeded(who.getContentResolver()), token, target != null ? target.mEmbeddedID : null, requestCode, 0, null, options); // ...}// system_server進(jìn)程// AMSpublic final int startActivity(IApplicationThread caller, String callingPackage, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, int startFlags, ProfilerInfo profilerInfo, Bundle bOptions) { // ...}

看一下這幾個(gè)參數(shù):

caller: AMS 在完成相關(guān)任務(wù)后會(huì)通過(guò)它來(lái) Binder 調(diào)用到客戶(hù)端 APP 進(jìn)程來(lái)實(shí)例化 Activity 對(duì)象并回調(diào)其生命周期方法,caller 的 Binder 服務(wù)端位于 APP 進(jìn)程。 callingPackage: 這個(gè)參數(shù)標(biāo)識(shí)調(diào)用者包名。 ...

這里可以嘗試 Hook 一些系統(tǒng)的東西,具體怎么 Hook 的代碼先不給出了,經(jīng)過(guò)測(cè)試在 Android 9 的小米設(shè)備上可以成功,有興趣可以自行研究談?wù)摴瑫簳r(shí)不公開(kāi)了,有需要的同學(xué)可以留言告訴我。或者反編譯小米 ROM 源碼,可以從里面發(fā)現(xiàn)一些東西。

Android Q后臺(tái)啟動(dòng)權(quán)限

在上面介紹過(guò) Android Q 版本開(kāi)始原生系統(tǒng)也加入了后臺(tái)啟動(dòng)的限制,通過(guò)通知設(shè)置 fullScreenIntent 可以在原生 Android 10 系統(tǒng)上從后臺(tái)啟動(dòng) Activity。查看 AOSP 源碼,可以在 AMS 找到這部分后臺(tái)權(quán)限限制的代碼,上面講到 startActivity 的流程,在 APP 進(jìn)程發(fā)起請(qǐng)求后,會(huì)通過(guò) Binder 跨進(jìn)程調(diào)用到 system_server 進(jìn)程中的 AMS,然后調(diào)用到 ActivityStarter.startActivity 方法,關(guān)于后臺(tái)啟動(dòng)的限制就這這里:

// 好家伙,整整二十多個(gè)參數(shù),嘿嘿,嘿嘿private int startActivity(IApplicationThread caller, Intent intent, Intent ephemeralIntent,String resolvedType, ActivityInfo aInfo, ResolveInfo rInfo,IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor,IBinder resultTo, String resultWho, int requestCode, int callingPid, int callingUid,String callingPackage, int realCallingPid, int realCallingUid, int startFlags,SafeActivityOptions options,boolean ignoreTargetSecurity, boolean componentSpecified, ActivityRecord[] outActivity,TaskRecord inTask, boolean allowPendingRemoteAnimationRegistryLookup,PendingIntentRecord originatingPendingIntent, boolean allowBackgroundActivityStart) { // ... boolean abort = !mSupervisor.checkStartAnyActivityPermission(intent, aInfo, resultWho,requestCode, callingPid, callingUid, callingPackage, ignoreTargetSecurity,inTask != null, callerApp, resultRecord, resultStack); abort |= !mService.mIntentFirewall.checkStartActivity(intent, callingUid, callingPid, resolvedType, aInfo.applicationInfo); abort |= !mService.getPermissionPolicyInternal().checkStartActivity(intent, callingUid, callingPackage); boolean restrictedBgActivity = false; if (!abort) {restrictedBgActivity = shouldAbortBackgroundActivityStart(callingUid,callingPid, callingPackage, realCallingUid, realCallingPid, callerApp,originatingPendingIntent, allowBackgroundActivityStart, intent); } // ...}

這里的 shouldAbortBackgroundActivityStart 調(diào)用是在 Android Q 中新增的,看方法名就能菜刀這是針對(duì)后臺(tái)啟動(dòng)的:

boolean shouldAbortBackgroundActivityStart(...) { final int callingAppId = UserHandle.getAppId(callingUid); if (callingUid == Process.ROOT_UID || callingAppId == Process.SYSTEM_UID || callingAppId == Process.NFC_UID) {return false; } if (callingUidHasAnyVisibleWindow || isCallingUidPersistentSystemProcess) {return false; } // don’t abort if the callingUid has START_ACTIVITIES_FROM_BACKGROUND permission if (mService.checkPermission(START_ACTIVITIES_FROM_BACKGROUND, callingPid, callingUid) == PERMISSION_GRANTED) {return false; } // don’t abort if the caller has the same uid as the recents component if (mSupervisor.mRecentTasks.isCallerRecents(callingUid)) {return false; } // don’t abort if the callingUid is the device owner if (mService.isDeviceOwner(callingUid)) {return false; } // don’t abort if the callingUid has SYSTEM_ALERT_WINDOW permission if (mService.hasSystemAlertWindowPermission(callingUid, callingPid, callingPackage)) {Slog.w(TAG, 'Background activity start for ' + callingPackage+ ' allowed because SYSTEM_ALERT_WINDOW permission is granted.');return false; } // ...}

從這個(gè)方法可以看到后臺(tái)啟動(dòng)的限制和官方文檔 從后臺(tái)啟動(dòng) Activity 的限制 中的說(shuō)明是可以對(duì)應(yīng)上的,這里面都是針對(duì) uid 去做權(quán)限判斷的,且是在系統(tǒng)進(jìn)程 system_server 中完成,單純更改包名已經(jīng)沒(méi)用了。。。

在一些沒(méi)有針對(duì)后臺(tái)啟動(dòng)單獨(dú)做限制的 ROM 上通過(guò) 全屏通知 可以成功彈出后臺(tái) Activity 頁(yè)面,比如說(shuō)小米 A3,另外還有一臺(tái) vivo 和一臺(tái)三星手機(jī),具體機(jī)型忘記了;在做了限制的設(shè)備上則彈不出來(lái),比如說(shuō)紅米 Note 8 Pro。

對(duì)于紅米 Note 8 Pro 這塊硬骨頭,不停嘗試了好多方法,但其實(shí)都是碰運(yùn)氣的,因?yàn)槟貌坏?MIUI 的源碼,后來(lái)想轉(zhuǎn)變思路,是否可以嘗試從這臺(tái)手機(jī)上 pull 出相關(guān)的 framework.jar 包然后反編譯呢?說(shuō)不定就有收獲!不過(guò)需要 Root 手機(jī),這個(gè)好辦,小米自己是有提供可以 Root 的開(kāi)發(fā)版系統(tǒng)的,于是就去 MIUI 官網(wǎng)找了一下,發(fā)現(xiàn)這臺(tái)紅米 Note 8 Pro 機(jī)型沒(méi)有提供開(kāi)發(fā)版系統(tǒng)(笑哭),想起來(lái)好像之前是說(shuō)過(guò)低端機(jī)小米不再提供開(kāi)發(fā)版了。。。好吧,手里頭沒(méi)有其它可以嘗試的手機(jī)了。

再轉(zhuǎn)念一想,是否可以直接下載穩(wěn)定版的 ROM 包,解壓后有沒(méi)有工具能夠得到一些源碼相關(guān)的痕跡呢?于是下載了一個(gè) ROM.zip 后,解壓看到里面只有一些系統(tǒng)映像 img 文件和 .dat.br 文件,這一塊我還不太懂,猜想就算能得到我想要的東西,整套流程花費(fèi)的時(shí)間成本估計(jì)也超出預(yù)期了,所以暫時(shí)只能先放下這個(gè)想法了。后續(xù)有足夠的時(shí)間再深入研究研究吧。

總結(jié)

原生Android ROM

Android 原生 ROM 都能正常地從后臺(tái)啟動(dòng) Activity 界面,無(wú)論是 Android 9(直接啟動(dòng)) 還是 10 版本(借助全屏通知)。

定制化ROM

檢測(cè)后臺(tái)彈出界面權(quán)限:

通過(guò)反射 AppOpsManager 相關(guān)方法檢測(cè)對(duì)應(yīng) opCode 的權(quán)限; opCode = 10021(小米機(jī)型); 其它機(jī)型可以嘗試遍歷得到 opCode;

Android P版本的小米:

通過(guò)Hook相關(guān)參數(shù)來(lái)后臺(tái)啟動(dòng)Activity,代碼由于某些原因不能給出了,有需要的同學(xué)可以留言告訴我哈; 只測(cè)試過(guò)小米機(jī)型,其它機(jī)型不一定可用; 理論上 P 版本以下的小米應(yīng)該也支持;

Android P版本的機(jī)型:

通過(guò) moveTaskToFront 方法將應(yīng)用切換到前臺(tái); 這種方法畢竟是官方 API,因此兼容性可能更好一些; 如果切換失敗的話可以多嘗試幾次調(diào)用 moveTaskToFront 方法; 理論上 P 版本以下的機(jī)型應(yīng)該也支持;

Android Q版本的機(jī)型:

通過(guò)系統(tǒng)全屏通知的方式調(diào)起后臺(tái) Activity; 在一些另作了限制的 ROM 上可能調(diào)起失敗;

至于反編譯 MIUI 代碼的方式只是一個(gè)猜想,時(shí)間原因未能付諸行動(dòng)。看樣子產(chǎn)品哥哥的需求暫時(shí)不能完全實(shí)現(xiàn)了,不知道有沒(méi)有做過(guò)相關(guān)研究(或者知道內(nèi)情)的小伙伴能不能提供一些參考思路,雖然是一個(gè)比較流氓的功能,但是代碼是無(wú)罪的嘿嘿,朝著一個(gè)需求目標(biāo),為此思考解決方法,并從各個(gè)方向去調(diào)研,我覺(jué)得本身是一件有意思也有提升的事情!歡迎有過(guò)相關(guān)研究的同學(xué)在評(píng)論區(qū)提出建議,做好需求奧里給。

以上就是Android后臺(tái)啟動(dòng)Activity的實(shí)現(xiàn)示例的詳細(xì)內(nèi)容,更多關(guān)于Android后臺(tái)啟動(dòng)Activity的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 国产aⅴ | 亚欧毛片 | 午夜久久 | 日本天天操 | 91精品国产综合久久久久久丝袜 | www.嫩草 | 97超碰免费 | 天堂中文视频在线观看 | 天天干天天摸 | 中文字幕精品一区 | 国产一区二区精品 | 一级电影免费在线观看 | 国产精品久久久久久久久免费丝袜 | 久久久久久久久一区二区三区 | 欧美久热| 欧美精品综合 | 夜本色| 国产91九色| 日韩精品亚洲专区在线观看 | 欧美精品一区二区三区手机在线 | 91精品久久久久久久久久 | 性生活毛片 | 二区视频 | 国产精品久久久久久久久久ktv | 免费啪啪网站 | 中文字幕av亚洲精品一部二部 | 91精品国产乱码久久久久久 | 一级做a毛片 | 欧美精品一区二区三区在线四季 | 精品国产一区二区三区高潮视 | 美女天堂 | 日韩在线播放一区二区 | 一区二区三区亚洲精品国 | 久久久久一 | 国产在线视频网 | 成人欧美一区二区三区黑人孕妇 | 亚洲欧美一区二区三区四区 | www.一区二区 | 久久精品久久久久电影 | 国产成人精品在线 | 亚洲国产欧美一区二区三区久久 | 久久国产精品亚洲 | 亚洲人成一区 | 在线中文字幕av | 久久最新| 国产精品久久久久久久久小说 | 国产精品综合久久 | 久久久久久a女人 | 日韩有码在线播放 | 亚洲欧洲精品成人久久奇米网 | 久久久精品一区 | 九九热精品视频 | 影音先锋中文字幕一区 | 欧美精品网 | 久久久久91 | 91香蕉视频| 91成人免费在线视频 | 91国内精品 | 国产精品一二三 | 精品一区二区三区四区 | 人人澡人人射 | 国产成人精品一区二区在线 | 成人在线视频免费观看 | 99热在线观看免费 | 中文字幕色 | 国产亚洲精品久久久久久豆腐 | 亚洲欧美日韩另类精品一区二区三区 | 精品在线 | 久久久久久亚洲精品 | 国产精品第一国产精品 | 国产另类ts人妖一区二区 | 免费无遮挡www小视频 | 国产欧美在线观看 | 狠狠干网站 | www日批| 综合久久99 | 午夜毛片 | 国产成人网 | 久久精品免费视频播放 | 欧美日韩另类在线 | 成人黄色在线观看 | 亚洲精品乱码久久久久久麻豆不卡 | 中文字幕在线永久 | 午夜夜| 亚洲视频欧美视频 | 久久久久久国产精品 | 久久精品一区二区三区四区 | 毛片免费视频 | 欧美日韩精品久久久 | 一级毛片免费在线 | 成人免费在线视频播放 | 国产成人在线看 | 久久精品1| 三a毛片| 国产激情午夜 | 欧美日一区 | 国产一区二区三区免费在线观看 | 麻豆一区 | 日韩精品网站在线观看 | 国产成人精品一区二区三区视频 | 美日韩精品视频 | 中文字幕亚洲一区二区三区 | 日韩视频免费在线播放 | 国产在线高清视频 | 精品国产乱码久久久久久1区2区 | 自拍偷拍亚洲欧洲 | 一本色道久久综合狠狠躁篇的优点 | 亚洲精品乱码久久久久久蜜桃不卡 | 一区二区三区免费网站 | 亚洲毛片在线观看 | 久久大陆 | 亚洲精品影院在线 | 亚洲久悠悠色悠在线播放 | t66y最新地址一地址二69 | 在线观看成人国产 | 亚洲免费成人av | 欧美五月| 日韩精品一区二区三区中文字幕 | 久久se精品一区精品二区 | 中文字字幕在线 | 99热国产在线观看 | 日韩91| 视频一区二区三区中文字幕 | 在线视频91 | 久久久久久久久久久成人 | 日韩有码一区 | 蜜桃视频网站在线观看 | 一区二区在线免费观看 | 午夜成人免费影院 | 成人日批 | 欧洲一区二区三区 | 精品成人免费一区二区在线播放 | 国产传媒毛片精品视频第一次 | 日韩视频国产 | 久久999免费视频 | 精品一区二区久久久久久久网站 | 欧美成人精品一区二区三区 | 成人在线网址 | 国产精品入口麻豆www | 在线一区观看 | 中文字幕一区在线 | 欧美精品免费在线观看 | 亚洲欧美中文字幕 | 欧美黄色网 | 国产精品国产三级国产aⅴ中文 | 精品日韩一区 | 一级黄色片视频 | 一区二区中文字幕 | h在线看 | 久久久网站 | 91精品国产综合久久久久久漫画 | 男人的天堂视频网站 | 亚洲一区二区三 | 久久久久久亚洲 | 伊人爽 | 九九热精品视频 | 国产在线精品一区二区 | 色综合欧美 | 国产精品久久久久久亚洲调教 | 91精品国产日韩91久久久久久 | 天天干天天插 | 男女啪网站 | 日本在线播放 | 国产精品高潮呻吟久久av黑人 | 亚洲精选久久久 | 精品国产一区二区三区久久久 | 午夜在线观看免费 | 福利视频1000 | xxxx性欧美 | 亚洲欧美在线免费 | 国产免费自拍视频 | 在线不卡一区 | 国产在线一区不卡 | 亚洲成人av片 | av色资源| 成人免费在线网址 | 国产精品视频网站 | 国产精品久久久久久吹潮 | 亚洲狠狠 | 精品久久中文字幕 | 日日爱夜夜爱 | 国产不卡一二三区 | 成人小视频在线播放 | 99精品电影| 国产视频一区二区 | 欧美成人久久 | 亚洲国产成人在线 | 欧美激情精品久久久久久 | 成人在线精品视频 | 免费在线看a | 日韩视频在线免费观看 | 日韩毛片 | 国产欧美综合视频 | jizz中国zz女人18高潮 | 日韩欧美一区二区三区久久婷婷 | 国产综合一区二区 | 天天色天天射天天操 | 97精品| 久久99视频精品 | www.久草.com | 色花av | 久久精品无码一区二区日韩av | 日韩午夜视频在线观看 | 日韩视频中文字幕在线观看 | 中文字幕日韩在线视频 | 精品久久久久香蕉网 | www.干| 北条麻妃国产九九九精品小说 | 99精品视频网 | 久热久热 | 中文字幕视频在线 | 激情小网站 | 在线不卡a资源高清 | 久久久久9999国产精品 | 国产成人精品一区二区三区在线 | 亚洲成人av在线 | 久久久精 | 超碰在线播 | 亚洲免费视频网 | 国产乱码精品一区二区三区忘忧草 | 一区二区三区亚洲视频 | 日韩在线精品视频 | 亚洲欧美国产一区二区三区 | 黄色av观看| 久草福利 | av在线精品| 久久一视频 | av激情在线 | 亚洲精品区 | 51国产午夜精品免费视频 | 欧美一区在线视频 | 热久久这里只有精品 | 日本精品视频在线观看 | 黄色成人免费看 | 狠狠狠狠狠狠干 | 韩国精品一区二区 | 日韩午夜免费 | 激情小说综合网 | 精品国产一区二区国模嫣然 | 成人免费在线视频 | 伊人久久一区二区三区 | 色吊丝2288sds中文字幕 | 久久九九精品久久 | 久久精品一区二区 | 国产视频网 | 国产精品国产三级国产aⅴ中文 | 爱爱免费视频网站 | 精品国产一区二区在线 | 91香蕉视频在线观看 | 欧美自拍视频 | 亚洲一区二区三区四区在线观看 | 日韩视频在线免费观看 | 欧美精品成人一区二区在线 | 在线精品亚洲欧美日韩国产 | 成人a视频在线观看 | 国产精品久久久久久久久久免费 | 成人亚洲区 | 欧美肉体xxxx肉交高潮 | 婷婷在线免费视频 | 亚洲国产精品一区二区久久 | 亚洲精品一区久久久久久 | 理论片免费在线观看 | 国产精品免费观看 | 久久精品中文 | 欧美日韩一区二区三 | 亚洲成人精品视频 | 久久久国产精品 | 香蕉久久av一区二区三区 | 久久久国产精品视频 | 亚洲黄色一级毛片 | 日韩一区二区三区在线观看 | 亚洲中午字幕 | 欧美日韩一区二区三区在线电影 | 成人在线小视频 | 台湾av片| 天天舔天天爽 | 欧美精品在线视频 | 日本五月婷婷 | 精品人成 | 国产精品一区二区三区四区 | 国产区在线观看 | 91在线免费观看 | 色婷婷综合久久久久中文一区二区 | 国产欧美精品一区二区三区 | 日韩成人精品在线 | 在线播放黄色片网站 | 视频1区2区 | 日韩久久久久久 | 第一色网站 | 欧美精品一区三区 | 欧美二区三区 | 狠狠天天 | 亚洲一区精品在线 | 伊人激情综合 | 91九色porny首页最多播放 | 久久亚洲一区二区三区四区 | 91在线激情 | 国产91视频一区二区 | 国产在线视频一区二区 | 欧美激情一区二区三区 | av基地网 | 精品一区国产 | 亚洲毛片在线观看 | 久久91| 久久久久久亚洲国产 | 久久久国产精品 | 韩国精品一区 | 国产精品高潮呻吟久久av野狼 | 日韩精品在线播放 | 夜添久久精品亚洲国产精品 | 黄色电影在线免费观看 | 成人久久久久久久 | 精品视频一区二区 | 欧美精品区 | 五月天婷婷综合 | www.com国产精品 | 美日韩免费视频 | 做a视频免费观看 | 欧美成人精品一区 | 国产免费视频 | 久久亚洲国产精品日日av夜夜 | 97精品国产 | 亚洲精品网址 | 日韩高清不卡一区二区三区 | 欧美精品一区二区三区在线四季 | 精品日韩视频 | 亚洲永久免费 | 不卡视频一区二区三区 | 亚洲精品视频在线 | 成年人在线视频播放 | 欧美日韩视频在线第一区 | 国产激情| 91天堂| 欧美成年黄网站色视频 | 99色综合 | 成人精品| 国产视频一区二区在线观看 | 黄网站涩免费蜜桃网站 | 成人在线观看免费 | 成人av观看 | 久久久一二三 | 黄毛片 | 天天干天天干天天干天天射 | 国产精品二区三区 | 日韩素人一区二区三区 | 欧美精品二区 | 欧美一区不卡 | 中文字幕在线欧美 | 亚洲一区中文字幕 | 久久久久久免费 | 色婷婷综合久久久中文字幕 | 一级片在线观看免费 | 国产中文字幕一区 | 亚洲综合在线一区二区 | 97视频人人澡人人爽 | 精品欧美| 北条麻妃国产九九九精品小说 | 亚洲欧洲无码一区二区三区 | 国产精品乱码一二三区的特点 | 精品久久久久久久久久久久久久久 | 国产区视频在线观看 | av网站观看| 欧美日韩六区 | 国产美女福利在线 | 91精品国产综合久久精品 | www.99re| 在线观看亚洲精品视频 | 国产一区二区三区精品久久久 | 夫妻午夜影院 | 96久久久久久 | 成年无码av片在线 | 亚洲男人的天堂网站 | 免费色在线 | 最新免费av网站 | 人人人人澡 | 中文字幕日韩一区二区三区 | 99国产精品久久久久久久久久 | 亚洲精品视频播放 | 99久久精品一区二区 | 中文字幕精品视频在线观看 | 日韩不卡一区二区 | 欧美激情在线播放 | 黑色丝袜脚足j国产在线看68 | 成人av免费在线 | 人人射人人舔 | 欧美日韩在线精品 | 姐姐在线观看动漫第二集免费 | 精品无码久久久久国产 | 亚洲毛片网站 | 国产在线中文字幕 | www,99热| 亚洲欧洲一区二区三区 | 91成人黄色| 天天干在线影院 | 天天曰天天干 | 盗摄精品av一区二区三区 | 免费久久网站 | 成人精品一区二区三区电影黑人 | 亚洲欧美在线观看 | 久久久久久久国产精品 | 国产精品久久久久久av公交车 | 国产精品久久 | 日本另类αv欧美另类aⅴ | 黄色片视频免费 | 视频一区二区三区中文字幕 | 久久一区 | 日本久久久久久 | 天天插天天干 | 色综合成人 | 韩国xxxx性hd极品 | 精品久久99 | 国产精品视频免费 | 日韩精品免费在线视频 | 久久久久成人精品 | 精品久久国产 | www.久久伊人 | 在线观看免费av网站 | 欧美日韩成人免费 | 色爱综合网 | 精品一区二区三区在线观看视频 | 欧美一级二级视频 | 欧美精品久久久 | 国产精品无码永久免费888 | 天天干夜夜骑 | 亚洲一区 | 日韩在线精品视频 | 亚洲午夜精品一区二区三区 | www日本高清视频 | 人人草在线观看视频 | 久久日本视频 | 久草在线资源福利站 | 女朋友的闺蜜3韩国三级 | 成人av播放 | 黄网站涩免费蜜桃网站 | 日韩精品一区在线 | 黄色一级免费观看 | 亚洲国产精品一区 | 国产精品永久免费 | 亚洲一区二区三区在线视频 | 欧美在线高清 | 天堂av中文字幕 | 精品视频久久 | 欧美久久精品 | 久草在线| 一级黄色大片在线 | 久久久精品综合 | 欧美精品一二三区 | 久久夜夜| 激情欧美一区二区三区 | 在线视频91 | 欧美一区二区日韩 | 在线观看国产视频 | 日韩视频在线免费播放 | 国产精品三级久久久久久电影 | 欧美lesbianxxxxhd视频社区 | 九九热精 | 综合久久久久 | 欧美一卡二卡在线观看 | 91久久国产综合久久蜜月精品 | 中文字幕在线不卡 | 国产中文字幕一区 | 精品国产99 | 久草新| 成人精品在线 | 天天爱天天草 | 在线观看亚洲 | 中文字幕日韩视频 | 黄色视频a级毛片 | 亚洲aⅴ天堂av在线电影软件 | 日韩欧美在线中文字幕 | 91精品国产综合久久福利软件 | 国产一级在线观看 | 日韩精品一区在线 | 亚洲精品国产高清 | 91视频网 | 精品久久久久久久 | 久久青 | 亚洲片在线观看 | 国产一区二区视频在线 | 午夜久久久| 精品久久久久久久 | 日韩1区 | 欧美性网 | 国产日韩欧美一区 | 亚洲三区在线观看 | 国产馆一区二区 | 欧美日韩视频在线观看一区 | 久久综合九九 | 亚洲欧美中文日韩在线v日本 | 欧美日韩国产在线观看 | 99国产精品99久久久久久 | 人人鲁人人莫一区二区三区 | 国产成人涩涩涩视频在线观看 | 精品国产一区二区三区性色 | 嫩草懂你 | 999精品网| 久久婷婷麻豆国产91天堂 | 日韩欧美一区二区三区免费观看 | 狠狠躁夜夜躁人人爽天天高潮 | 国产精品久久久久久久岛一牛影视 | 欧美日韩三区 | 国产福利电影一区 | 国产一级在线观看 | 成人免费视频网站在线观看 | 亚洲精品一区二区三区蜜桃久 | 国产一区二区资源 | 91视视频在线观看入口直接观看 | 中文字幕在线第一页 | 久久99精品久久久久久园产越南 | 91激情在线 | 天天操操| 一区二区三区在线播放 | 欧美日韩精品 | 欧美极品一区二区 | 美女午夜影院 | 国产成人欧美一区二区三区的 | 91大神免费观看 | 免费一级 国产 | 中文字幕66页 | 男人的天堂中文字幕 | 色国产精品| 99热精品国产 | 久久久国产精品入口麻豆 | 91精品国产一区二区 | 精品一区二区三区免费 | 中文字幕在线观看一区二区三区 | 二区免费视频 | 久久国产精品免费一区二区三区 | 精品一区二区三区蜜桃 | 国产精品成人一区二区三区 | 久热官网| 成人精品 | 99成人 | 中文字幕一区二区三区四区 | 亚洲国产一区在线 | 毛片网站大全 | 亚洲第一区国产精品 | 日韩中文字幕一区二区 | 无码国模国产在线观看 | 国产精品美女久久久久久免费 | 国产农村妇女精品一二区 | 免费看一区二区三区 | 99re6在线 | 国产一区二区在线免费观看 | 欧美一区二区三区免费 | 免费观看一级特黄欧美大片 | 国产日韩视频在线播放 | 日韩美女av在线 | 久久国产一区二区 | 欧洲成人午夜免费大片 | 国产一区二区三区视频在线观看 | 中国大陆高清aⅴ毛片 | 欧美日韩高清一区 | 久久精品久久久 | av中文在线| 偷拍自拍亚洲欧美 | 国产男女免费视频 | 国产精品高清在线 | 欧美精品在线看 | 99在线免费观看 | 国产精品久久久久久久久 | 国产精品欧美一区二区三区 | 精品免费国产一区二区三区 | 日韩一区二区三区在线看 | 天天操天天曰 | 久久国产精品精品国产 | 午夜在线影院 | 成人激情视频 | 久久av综合网 | 毛片黄片 | 久久精品一区 | 国产精品日韩在线 | 99久久婷婷国产综合亚洲 | 亚洲色图第八页 | 亚洲+变态+欧美+另类+精品 | 亚洲精品一区在线观看 | 国产精品免费看 | 久久久久国产精品免费免费搜索 | 99久久精品免费看国产一区二区三区 | 波多野结衣先锋影音 | 精品国产不卡一区二区三区 | 国产精品女同一区二区久久夜 | 久久久久国产亚洲日本 | 91影院| 久久久久一区二区三区 | 天天爽夜夜爽夜夜爽精品视频 | 秋霞电影院午夜伦 | 国变精品美女久久久久av爽 | 精品久久久蜜桃 | 禁果av一区二区三区 | 免费在线成人av | 一区在线不卡 | 国产精品久久久久久久久久久免费看 | 国产中文在线 | 色婷婷一二三 | 日韩视频一区二区三区 | 91成人免费看 | 日韩视频一区 | 日韩一级 | 性做久久久久久久免费看 | 久久国产午夜 | 久久精品色欧美aⅴ一区二区 | www日批| 欧美狠狠操 | www.操.com| 亚洲精品一区久久久久久 | 亚洲精品自在在线观看 | 国产综合精品一区二区三区 | 欧美成人精品在线观看 | 亚洲午夜免费视频 | 懂色av一区二区三区在线播放 | 91精品国产综合久久久久久丝袜 | 日韩国产欧美视频 | 欧美成人专区 | 日韩精品在线一区 |