• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    安卓應(yīng)用HTTP緩存缺陷的動(dòng)態(tài)檢測(cè)*

    2018-09-12 02:21:48楊嘉成趙文耘
    計(jì)算機(jī)與生活 2018年9期
    關(guān)鍵詞:安卓開(kāi)發(fā)者客戶端

    楊嘉成,彭 鑫,趙文耘

    1.復(fù)旦大學(xué) 軟件學(xué)院,上海 201203

    2.復(fù)旦大學(xué) 上海市數(shù)據(jù)科學(xué)重點(diǎn)實(shí)驗(yàn)室,上海 201203

    1 引言

    網(wǎng)絡(luò)通信能力在為移動(dòng)應(yīng)用帶來(lái)強(qiáng)大支持的同時(shí),也給移動(dòng)用戶帶來(lái)了一些潛在的問(wèn)題。首先,移動(dòng)應(yīng)用訪問(wèn)網(wǎng)絡(luò)的過(guò)程會(huì)消耗數(shù)據(jù)流量,造成了用戶的經(jīng)濟(jì)負(fù)擔(dān)。其次,移動(dòng)設(shè)備電池電量有限,而網(wǎng)絡(luò)通信是移動(dòng)應(yīng)用中消耗電量最多的操作之一。研究表明,移動(dòng)應(yīng)用在非空閑狀態(tài)下超過(guò)40%的電量消耗來(lái)自網(wǎng)絡(luò)通信,其中由超文本傳輸協(xié)議(hypertext transfer protocol,HTTP)操作所導(dǎo)致的電量消耗占近80%[1]。最后,移動(dòng)應(yīng)用在通過(guò)網(wǎng)絡(luò)獲取數(shù)據(jù)并進(jìn)行本地處理的過(guò)程中,網(wǎng)絡(luò)傳輸可能由于網(wǎng)絡(luò)狀況不佳或數(shù)據(jù)傳輸量大而成為應(yīng)用響應(yīng)的瓶頸,影響用戶體驗(yàn)。

    緩存作為一種經(jīng)典的技術(shù)手段,可以在移動(dòng)設(shè)備端有效地緩解上述問(wèn)題。安卓應(yīng)用中的網(wǎng)絡(luò)訪問(wèn)通常通過(guò)調(diào)用HTTP客戶端應(yīng)用編程接口(application programming interface,API)實(shí)現(xiàn),其中常見(jiàn)的HTTP客戶端包括HttpURLConnection、Apache HTTP Client和OkHttp等。但在這些HTTP客戶端中,有些客戶端本身缺乏緩存機(jī)制(如Apache HTTP Client),其他一些客戶端(如OkHttp)雖然有內(nèi)部的緩存支持,但仍存在以下問(wèn)題:(1)緩存需要開(kāi)發(fā)者在代碼中顯式地啟用,一些開(kāi)發(fā)者由于疏忽而沒(méi)有啟用;(2)HTTP客戶端API中的緩存處理抽象層次較高,無(wú)法針對(duì)特定應(yīng)用需求進(jìn)行優(yōu)化處理,導(dǎo)致緩存效果不佳[2]。

    由于上述原因,在實(shí)際開(kāi)發(fā)中應(yīng)用開(kāi)發(fā)者往往需要自行定義并實(shí)現(xiàn)自己的緩存處理策略,這可能導(dǎo)致兩方面的問(wèn)題:(1)未能充分利用緩存來(lái)優(yōu)化應(yīng)用性能;(2)過(guò)度使用緩存或不及時(shí)清理緩存內(nèi)容。后者會(huì)導(dǎo)致應(yīng)用緩存占用過(guò)多的存儲(chǔ)空間,以及緩存管理消耗較多的電量[3],因此也會(huì)影響移動(dòng)設(shè)備和應(yīng)用的整體性能。

    當(dāng)前已經(jīng)有一些研究工作關(guān)注于移動(dòng)應(yīng)用的緩存問(wèn)題,但這些工作主要關(guān)注于移動(dòng)端網(wǎng)絡(luò)瀏覽器的HTTP緩存表現(xiàn)[4-6]。有些研究針對(duì)應(yīng)用的HTTP緩存問(wèn)題進(jìn)行檢測(cè)[7],但策略比較簡(jiǎn)單且沒(méi)有考慮安卓應(yīng)用的特點(diǎn),因此無(wú)法發(fā)現(xiàn)其中所包含的深層問(wèn)題,比如應(yīng)用緩存占用的設(shè)備空間、應(yīng)用緩存的有效性等。為了實(shí)現(xiàn)細(xì)粒度的安卓應(yīng)用緩存缺陷檢測(cè),發(fā)現(xiàn)與特定安卓應(yīng)用特點(diǎn)相關(guān)的HTTP緩存問(wèn)題,本文提出并實(shí)現(xiàn)了一種基于動(dòng)態(tài)分析的安卓應(yīng)用HTTP緩存缺陷檢測(cè)方法。該方法可以針對(duì)安卓應(yīng)用的APK(安卓應(yīng)用安裝包,Android package)文件進(jìn)行插裝,使其具有在運(yùn)行時(shí)監(jiān)測(cè)并記錄與HTTP緩存相關(guān)的行為和數(shù)據(jù)的能力。該方法通過(guò)安卓應(yīng)用自動(dòng)化測(cè)試工具對(duì)插裝后的應(yīng)用進(jìn)行自動(dòng)運(yùn)行同時(shí)收集運(yùn)行日志,并基于日志分析發(fā)現(xiàn)應(yīng)用中的HTTP緩存缺陷并定位所在位置。

    為了驗(yàn)證該方法的有效性,利用基于該方法所實(shí)現(xiàn)的分析工具對(duì)當(dāng)前安卓應(yīng)用市場(chǎng)上的25個(gè)安卓應(yīng)用進(jìn)行了自動(dòng)化分析。分析結(jié)果表明,所提出的方法適用于當(dāng)前應(yīng)用市場(chǎng)上的大多數(shù)應(yīng)用。同時(shí),該方法能夠有效發(fā)現(xiàn)安卓應(yīng)用中存在的緩存缺失、緩存空間無(wú)限增長(zhǎng)和緩存冗余等問(wèn)題。針對(duì)所發(fā)現(xiàn)的這些問(wèn)題,本文還分析了出現(xiàn)這些問(wèn)題的原因以及解決的思路。

    2 背景

    安卓應(yīng)用通常是用Java語(yǔ)言編寫(xiě)的,打包成APK文件以供安裝使用。從應(yīng)用源代碼到打包好的APK文件,一般要經(jīng)過(guò)以下幾個(gè)階段的轉(zhuǎn)換:首先,應(yīng)用源代碼被編譯成Java類文件;然后,這些類文件被安卓軟件開(kāi)發(fā)工具包(software development kit,SDK)中的dx工具轉(zhuǎn)換為.dex文件,這種文件是可以運(yùn)行在安卓的Dalvik虛擬機(jī)上的可執(zhí)行字節(jié)碼;最后,這些.dex文件與聲明文件、相關(guān)的資源文件(如圖片、用戶界面布局文件)一起被打包成APK文件,添加簽名后就可以發(fā)布使用了。

    安卓官方提供了兩組HTTP客戶端API:Http-URLConnection和Apache HTTP Client。其中,前者是目前官方建議開(kāi)發(fā)者使用的HTTP客戶端API;后者在安卓API 22級(jí)之后已經(jīng)廢棄,但由于一些較早開(kāi)發(fā)的代碼中仍有使用,出于兼容性的考慮,安卓對(duì)這部分代碼保留了支持。此外,還有一些第三方HTTP客戶端,如OkHttp,可供安卓開(kāi)發(fā)者使用,這些HTTP客戶端一般也都是基于HttpURLConnection實(shí)現(xiàn)的。借助上述HTTP客戶端API,開(kāi)發(fā)者可以非常方便地編寫(xiě)代碼,獲取HTTP資源。但值得注意的是,這些HTTP客戶端本身要么缺少緩存機(jī)制接口供開(kāi)發(fā)者使用,要么雖然提供了緩存支持,但可能需要開(kāi)發(fā)者自行開(kāi)啟,并且緩存處理較為簡(jiǎn)單。

    安卓設(shè)備中包含兩個(gè)存儲(chǔ)文件的區(qū)域:內(nèi)部存儲(chǔ)和外部存儲(chǔ)。內(nèi)部存儲(chǔ)是設(shè)備內(nèi)部提供的非易失性內(nèi)存,外部存儲(chǔ)一般是移動(dòng)存儲(chǔ)介質(zhì),如安全數(shù)碼卡(secure digital memory card,SD)。通常來(lái)講,安卓設(shè)備的內(nèi)部存儲(chǔ)在應(yīng)用運(yùn)行時(shí)是始終可用的,各應(yīng)用的存儲(chǔ)空間相互隔離,應(yīng)用無(wú)法訪問(wèn)其他應(yīng)用在內(nèi)部存儲(chǔ)中保存的文件;在用戶卸載某個(gè)應(yīng)用后,系統(tǒng)將移除該應(yīng)用所保存的文件。而安卓設(shè)備的外部存儲(chǔ)并不始終可用,在外部存儲(chǔ)中保存的文件是全局可讀的;用戶卸載某個(gè)應(yīng)用時(shí),只有保存在某些特定路徑(通過(guò)Context類中的getExternalFilesDir方法獲得)下的文件才會(huì)被系統(tǒng)刪除,應(yīng)用保存在其他路徑下的文件并不會(huì)被刪除。安卓系統(tǒng)不會(huì)定期清理內(nèi)部存儲(chǔ)和外部存儲(chǔ)中緩存文件夾下的文件,只有在內(nèi)存不足時(shí)才會(huì)刪除內(nèi)部存儲(chǔ)中的緩存文件。

    3 方法和實(shí)現(xiàn)

    3.1 方法

    本文提出了一種基于動(dòng)態(tài)分析的安卓應(yīng)用緩存缺陷自動(dòng)檢測(cè)方法,該方法的概覽如圖1所示。

    Fig.1 Overview ofAndroidApp HTTP cache detection圖1 安卓應(yīng)用HTTP緩存檢測(cè)概覽

    首先,方法對(duì)安卓應(yīng)用的APK文件進(jìn)行插裝改造。這一過(guò)程會(huì)向原始安卓應(yīng)用中引入一個(gè)運(yùn)行時(shí)庫(kù),生成的插裝后的應(yīng)用具有在運(yùn)行時(shí)監(jiān)測(cè)并記錄與HTTP緩存相關(guān)的行為和數(shù)據(jù)的能力。這些數(shù)據(jù)包括:(1)HTTP響應(yīng)頭部信息(主要是緩存相關(guān)的信息,如失效時(shí)間、緩存控制和上次被修改時(shí)間)及具體內(nèi)容;(2)訪問(wèn)本地文件的絕對(duì)路徑;(3)文件訪問(wèn)時(shí)間;(4)緩存文件容量;(5)緩存文件訪問(wèn);(6)被刪除文件的絕對(duì)路徑。

    改造過(guò)程中引入原始應(yīng)用中的運(yùn)行時(shí)庫(kù)負(fù)責(zé)在應(yīng)用運(yùn)行時(shí)獲取上述數(shù)據(jù),該運(yùn)行時(shí)庫(kù)主要有三大職責(zé):(1)記錄應(yīng)用的文件訪問(wèn)和刪除操作的相關(guān)信息;(2)監(jiān)測(cè)應(yīng)用中的HTTP訪問(wèn),記錄HTTP響應(yīng)的頭部信息(統(tǒng)一資源定位符、過(guò)期時(shí)間、緩存控制和上次修改時(shí)間)以及響應(yīng)的具體內(nèi)容后,再將HTTP響應(yīng)內(nèi)容返回給應(yīng)用中原本的調(diào)用,從而不會(huì)對(duì)應(yīng)用的正常運(yùn)行產(chǎn)生影響;(3)應(yīng)用啟動(dòng)時(shí)的運(yùn)行時(shí)庫(kù)初始化處理,包括設(shè)置應(yīng)用包名,從文件系統(tǒng)中恢復(fù)該應(yīng)用在之前運(yùn)行時(shí)獲得的數(shù)據(jù)記錄等,以及在應(yīng)用退出時(shí)將內(nèi)存中的數(shù)據(jù)記錄持久化到設(shè)備文件系統(tǒng)中。

    接著,改造后的安卓應(yīng)用被安裝到安卓設(shè)備上以供運(yùn)行。在改造過(guò)的應(yīng)用被啟動(dòng)后,方法借助安卓自動(dòng)化測(cè)試工具(如Monkey、Robotium等),自動(dòng)化地向安卓設(shè)備發(fā)送用戶事件流。用戶事件包括點(diǎn)擊事件、觸屏事件、手勢(shì)操作和按鍵操作等。通過(guò)自動(dòng)生成的用戶事件流,模擬用戶使用應(yīng)用的過(guò)程,產(chǎn)生原始應(yīng)用邏輯中訪問(wèn)文件、獲取網(wǎng)絡(luò)資源的操作。

    在應(yīng)用運(yùn)行時(shí),被引入的運(yùn)行時(shí)庫(kù)會(huì)實(shí)時(shí)監(jiān)測(cè)并收集前述的與HTTP緩存相關(guān)的行為和數(shù)據(jù),進(jìn)行一定的處理整合后,生成運(yùn)行日志。日志內(nèi)容包括:(1)應(yīng)用中的HTTP請(qǐng)求的次數(shù);(2)導(dǎo)致不完善緩存發(fā)生的HTTP請(qǐng)求在代碼中的位置;(3)每個(gè)緩存文件的訪問(wèn)次數(shù)以及緩存文件總訪問(wèn)次數(shù);(4)應(yīng)用占用的設(shè)備內(nèi)部存儲(chǔ)和外部存儲(chǔ)空間的大小變化;(5)應(yīng)用運(yùn)行過(guò)程中刪除的文件的文件名,以及這些文件在刪除前的容量。

    運(yùn)行時(shí)庫(kù)通過(guò)在應(yīng)用中監(jiān)測(cè)HTTP響應(yīng)及其內(nèi)容來(lái)分析獲得上述日志中的第1、2部分內(nèi)容。圖2展示了運(yùn)行時(shí)庫(kù)對(duì)HTTP響應(yīng)進(jìn)行攔截并分析其內(nèi)容的過(guò)程。分析邏輯共分5個(gè)步驟:(1)當(dāng)在應(yīng)用中發(fā)生一次HTTP訪問(wèn)時(shí),運(yùn)行時(shí)庫(kù)會(huì)根據(jù)這次訪問(wèn)的網(wǎng)絡(luò)資源的統(tǒng)一資源定位符(uniform resource locator,URL)查詢?cè)诖酥皯?yīng)用是否訪問(wèn)過(guò)相同URL上的內(nèi)容;(2)如果訪問(wèn)過(guò),那么分析程序會(huì)接著查找數(shù)據(jù)記錄中最近的對(duì)應(yīng)于該URL的緩存控制信息和緩存過(guò)期時(shí)間信息,否則結(jié)束;(3)如果緩存并未過(guò)期,那么說(shuō)明應(yīng)用的HTTP緩存不完整,運(yùn)行時(shí)庫(kù)會(huì)將這次HTTP通信在程序代碼中的位置記錄到日志中;(4)如果緩存過(guò)期,運(yùn)行時(shí)庫(kù)會(huì)查找獲取數(shù)據(jù)記錄中最近的對(duì)應(yīng)于該URL的緩存內(nèi)容,并將獲得的緩存內(nèi)容與此次HTTP訪問(wèn)獲得的內(nèi)容進(jìn)行對(duì)比;(5)如果對(duì)比發(fā)現(xiàn)兩者內(nèi)容并無(wú)差別,那么說(shuō)明存在緩存控制設(shè)置過(guò)于保守的問(wèn)題,運(yùn)行時(shí)庫(kù)會(huì)將這次HTTP通信在程序代碼中的位置記錄到日志中,否則直接結(jié)束。整個(gè)過(guò)程不會(huì)干擾應(yīng)用獲取HTTP響應(yīng)的內(nèi)容,因此也不會(huì)影響應(yīng)用的正常運(yùn)行。

    最后,方法對(duì)運(yùn)行獲得的日志記錄進(jìn)行分析。分析的內(nèi)容主要包括:(1)應(yīng)用緩存的完整性(也就是說(shuō),是否存在從網(wǎng)絡(luò)中請(qǐng)求之前訪問(wèn)過(guò)并且還未過(guò)期的資源);(2)應(yīng)用緩存控制設(shè)置是否保守;(3)應(yīng)用的緩存對(duì)設(shè)備內(nèi)部和外部存儲(chǔ)的空間占用狀況;(4)冗余緩存文件(未被使用過(guò)的緩存文件)數(shù)量,以及這些文件占所有緩存文件的比例;(5)上次被訪問(wèn)時(shí)間在某一時(shí)刻之前的緩存文件的數(shù)量,以及這些文件占所有緩存文件的比例;(6)緩存文件平均訪問(wèn)次數(shù);(7)應(yīng)用對(duì)緩存空間占用的控制。對(duì)于(1)、(2)兩部分內(nèi)容,運(yùn)行時(shí)庫(kù)在運(yùn)行時(shí)已經(jīng)在日志中進(jìn)行了記錄;對(duì)其他五部分內(nèi)容,分析程序?qū)⒎謩e讀入分析所需的運(yùn)行日志中內(nèi)容,然后按要求輸出分析結(jié)果。需要注意的是,很多應(yīng)用為了程序健壯性的需要,會(huì)在運(yùn)行時(shí)生成一些臨時(shí)文件和備份文件(如.bkp文件)。分析程序會(huì)判斷被刪除文件的類型,剔除備份文件對(duì)分析結(jié)果的影響。

    Fig.2 Interception and analysis process of HTTP response圖2 HTTP響應(yīng)攔截分析過(guò)程

    3.2 實(shí)現(xiàn)

    本文實(shí)現(xiàn)了一個(gè)自動(dòng)化的安卓應(yīng)用代碼插裝工具,該工具的輸入是APK文件,文件中包含的Dalvik字節(jié)碼保留了應(yīng)用的程序結(jié)構(gòu)。插裝過(guò)程中,工具會(huì)自動(dòng)對(duì)Dalvik字節(jié)碼進(jìn)行分析和重寫(xiě),引入實(shí)現(xiàn)的運(yùn)行時(shí)庫(kù),使應(yīng)用具有3.1節(jié)中描述的運(yùn)行時(shí)HTTP緩存缺陷動(dòng)態(tài)監(jiān)測(cè)的能力。

    圖3是應(yīng)用程序改造的概覽。圖中白色部分代表原本的安卓應(yīng)用代碼,灰色部分是本文的自動(dòng)化改造工具所引入的代碼。dex2jar是一個(gè)可以實(shí)現(xiàn)安卓中的.dex文件和Java中的.class之間的相互轉(zhuǎn)換的工具。本文實(shí)現(xiàn)的工具借助dex2jar,對(duì)APK文件中的Dalvik字節(jié)碼進(jìn)行轉(zhuǎn)換后,對(duì)類文件進(jìn)行操作,引入運(yùn)行時(shí)庫(kù)。對(duì)每一個(gè)activity類,改造工具會(huì)向其生命周期函數(shù)(onCreate,onResume和onStop方法)中引入額外的代碼,以在進(jìn)入應(yīng)用時(shí)對(duì)緩存監(jiān)控進(jìn)行初始化,并在離開(kāi)應(yīng)用時(shí)結(jié)束緩存監(jiān)控,更新未持久化的數(shù)據(jù)記錄。這部分改造的方法與CollaDroid[8]中介紹的程序改造方法類似。

    工具隨后對(duì)應(yīng)用所有類文件中每個(gè)方法的每一條語(yǔ)句進(jìn)行遍歷,查找與文件操作相關(guān)的語(yǔ)句和與HTTP資源訪問(wèn)相關(guān)的語(yǔ)句。

    與文件操作相關(guān)的語(yǔ)句包括那些調(diào)用Java中的File類的構(gòu)造函數(shù)、FileInputStream類的構(gòu)造函數(shù)、FileReader類的構(gòu)造函數(shù)、RandomAccessFile類的構(gòu)造函數(shù),以及File類中的delete方法的語(yǔ)句。本文工具會(huì)在使用上述構(gòu)造函數(shù)的語(yǔ)句之前引入額外的代碼,調(diào)用運(yùn)行時(shí)庫(kù)中的方法,實(shí)現(xiàn)對(duì)緩存文件狀態(tài)的監(jiān)控。

    與HTTP資源訪問(wèn)相關(guān)的語(yǔ)句包括那些調(diào)用java.net.HttpURLConnection類中的getInputStream方法和調(diào)用org.apache.http.client.HttpClient接口中的execute方法的語(yǔ)句。調(diào)用上述兩種方法,程序會(huì)獲取網(wǎng)絡(luò)中特定URL上的資源。圖4展示了一個(gè)對(duì)調(diào)用getInputStream方法的代碼進(jìn)行改造的例子。請(qǐng)注意,這里為了方便理解,展示的是源代碼,應(yīng)用程序改造實(shí)際上是在Dalvik字節(jié)碼上進(jìn)行的。改造工具將使用運(yùn)行時(shí)庫(kù)中的方法來(lái)替換原始應(yīng)用中相關(guān)的方法調(diào)用,從而在不影響應(yīng)用正常使用的情況下實(shí)現(xiàn)對(duì)應(yīng)用中發(fā)生的HTTP訪問(wèn)的監(jiān)測(cè)。

    4 實(shí)驗(yàn)和分析

    4.1 實(shí)驗(yàn)設(shè)置

    Fig.3 Overview of program transformation圖3 應(yīng)用程序改造概覽

    Fig.4 Example of program transformation圖4 程序改造示例

    本文實(shí)現(xiàn)的APK改造工具是通過(guò)Java語(yǔ)言開(kāi)發(fā)的,可以運(yùn)行在任何安裝了Java運(yùn)行時(shí)環(huán)境的機(jī)器上。使用這一工具對(duì)原始的APK文件進(jìn)行改造,然后安裝在安卓設(shè)備上,并使用安卓SDK提供的Monkey測(cè)試工具模擬應(yīng)用運(yùn)行以獲取數(shù)據(jù)。實(shí)驗(yàn)中用到的安卓設(shè)備包括一臺(tái)三星Galaxy S4(Exynos 5410 CPU,Imagination PowerVR SGX544 MP3 GPU,2 GB RAM,16 GB內(nèi)存)和一臺(tái)紅米Note 4(聯(lián)發(fā)科Helio X20,Mali-T880 MP4 GPU,3 GB RAM,64 GB內(nèi)存)。

    4.2 適用性

    從安卓市場(chǎng)上下載了25款下載量較高,并且網(wǎng)絡(luò)通信比較頻繁的應(yīng)用(如新聞客戶端、在線音樂(lè)客戶端)的APK文件,并使用本文所實(shí)現(xiàn)的自動(dòng)化改造工具對(duì)這些APK文件進(jìn)行自動(dòng)化改造。實(shí)驗(yàn)發(fā)現(xiàn),改造單個(gè)APK文件的耗時(shí)一般不超過(guò)30 s,并且改造過(guò)程本身都可以順利完成,生成可以安裝到安卓設(shè)備上的可用APK文件。改造后的APK文件中.dex文件的大小比改造前增加了0.4%到2.1%,平均增加了1.3%。由于APK文件中還會(huì)包含許多資源文件(如圖片、布局文件等),.dex文件容量一般占不到APK中所有文件總?cè)萘康囊话?,因此改造?duì)APK文件大小的影響是微不足道的。

    隨后在設(shè)備上運(yùn)行這些改造過(guò)的應(yīng)用,發(fā)現(xiàn)其中有6款應(yīng)用無(wú)法正常運(yùn)行。這些無(wú)法正常運(yùn)行的應(yīng)用通常表現(xiàn)為閃退,進(jìn)入應(yīng)用后長(zhǎng)時(shí)間停留在初始界面沒(méi)有響應(yīng),應(yīng)用提示當(dāng)前應(yīng)用不是官方版本后強(qiáng)制退出等。通過(guò)分析控制臺(tái)日志信息等方式,這些應(yīng)用之所以無(wú)法運(yùn)行,是因?yàn)閼?yīng)用開(kāi)發(fā)者在應(yīng)用內(nèi)設(shè)置了一些自我保護(hù)機(jī)制,使得被第三方修改過(guò)的應(yīng)用無(wú)法正常運(yùn)行。

    實(shí)驗(yàn)所使用的應(yīng)用類型多種多樣,包括新聞、音樂(lè)、購(gòu)物等,與一些關(guān)注于移動(dòng)瀏覽器應(yīng)用緩存檢測(cè)的工作[4-6,9]相比,本文所提出的方法具有更廣泛的適用性。

    在改造過(guò)程中發(fā)現(xiàn)有一些應(yīng)用使用Apache HTTP客戶端來(lái)訪問(wèn)HTTP資源,目前的安卓官方開(kāi)發(fā)文檔中已經(jīng)建議開(kāi)發(fā)者不要再使用這種方式。對(duì)應(yīng)用所使用的具體HTTP客戶端的檢測(cè)是先前的緩存檢測(cè)工作[7]所無(wú)法做到的,這也是本文方法的優(yōu)勢(shì)之一。根據(jù)方法調(diào)用所在的類所處的包的名稱,發(fā)現(xiàn)其中大多數(shù)調(diào)用是在應(yīng)用使用的一些第三方庫(kù)中,只有兩款應(yīng)用是在自己開(kāi)發(fā)的代碼中使用了Apache HTTP客戶端。

    實(shí)驗(yàn)結(jié)果表明,本文實(shí)現(xiàn)的工具可以對(duì)現(xiàn)成的安卓應(yīng)用進(jìn)行自動(dòng)化的改造,并且這種改造適用于安卓市場(chǎng)上的很大一部分應(yīng)用。

    4.3 緩存檢測(cè)結(jié)果及分析

    對(duì)改造成功并可以在安卓設(shè)備上正常運(yùn)行的19款應(yīng)用進(jìn)行了運(yùn)行檢測(cè)。為了自動(dòng)化地生成用戶事件流,使用了安卓SDK提供的Monkey工具,該工具可以向安卓模擬器或真實(shí)設(shè)備中發(fā)送偽隨機(jī)用戶事件流,模擬用戶的觸屏、點(diǎn)擊、手勢(shì)和按鍵等操作。借助Monkey提供的命令,將每段用戶事件流中的用戶事件數(shù)量控制在500個(gè),用戶事件包含觸屏、位移、按鍵事件,事件將只發(fā)生在當(dāng)前應(yīng)用中,不會(huì)跳出到其他應(yīng)用。為了給應(yīng)用一定的響應(yīng)時(shí)間,將用戶事件輸入間隔設(shè)置為1 s。對(duì)每個(gè)改造后的應(yīng)用,每天分別運(yùn)行兩次,這兩次運(yùn)行中間的時(shí)間間隔大于5 h,共運(yùn)行3天(為保證結(jié)果的可靠性,實(shí)驗(yàn)開(kāi)始時(shí)應(yīng)用都是全新安裝的),得到的數(shù)據(jù)及分析結(jié)果如圖5所示。

    Fig.5 Result ofAndroidApp HTTP cache detection圖5 安卓應(yīng)用HTTP緩存檢測(cè)結(jié)果

    在本文測(cè)試的19款應(yīng)用中,有6款應(yīng)用的HTTP緩存不完整,存在從網(wǎng)絡(luò)中重復(fù)獲取相同未過(guò)期資源的情況,這意味著數(shù)據(jù)流量和電池電量的不必要消耗;同時(shí),有7款應(yīng)用存在HTTP頭緩存控制設(shè)置過(guò)于保守的情況,也就是說(shuō),雖然某些資源根據(jù)HTTP頭中的緩存控制信息已經(jīng)過(guò)期,但實(shí)際上這些資源內(nèi)容并未發(fā)生變化,這主要源于服務(wù)器端設(shè)置得過(guò)于保守。需要注意的是,當(dāng)應(yīng)用發(fā)生一次HTTP請(qǐng)求時(shí),如果運(yùn)行時(shí)庫(kù)發(fā)現(xiàn)HTTP緩存不完整,就不會(huì)再檢查緩存設(shè)置是否保守,因此實(shí)際當(dāng)中緩存設(shè)置保守的問(wèn)題可能要比實(shí)驗(yàn)結(jié)果中展示得要嚴(yán)重一些。Zhang等人的工作[7]中所使用的應(yīng)用HTTP緩存檢測(cè)方法是在一個(gè)較短的間隔內(nèi)點(diǎn)擊兩次應(yīng)用的某個(gè)界面元素,比較兩次點(diǎn)擊產(chǎn)生的HTTP響應(yīng)內(nèi)容。這種方法只能簡(jiǎn)單地檢測(cè)出應(yīng)用的緩存是否完整,但沒(méi)有考慮響應(yīng)內(nèi)容的過(guò)期時(shí)間、內(nèi)容變化等因素,也就無(wú)法像本文所提出的方法一樣檢測(cè)更多更深入的應(yīng)用緩存問(wèn)題,如緩存控制設(shè)置、緩存的有效性等。

    圖5還展示了應(yīng)用對(duì)安卓設(shè)備內(nèi)部存儲(chǔ)、外部存儲(chǔ)的使用情況,以及對(duì)緩存總?cè)萘康目刂啤膱D中可以看到,有8款應(yīng)用并沒(méi)有使用設(shè)備的外部存儲(chǔ),這些應(yīng)用中不乏新聞客戶端、在線音樂(lè)應(yīng)用。雖然安卓官方文檔中并沒(méi)有明確提出開(kāi)發(fā)者對(duì)設(shè)備內(nèi)、外部存儲(chǔ)的使用建議,但通常來(lái)講,安卓設(shè)備的內(nèi)部存儲(chǔ)空間較外部存儲(chǔ)空間更小,完全將緩存文件存儲(chǔ)在內(nèi)部設(shè)備上,特別是當(dāng)緩存文件中可能包含比較多的圖片、音頻等容量比較大的資源時(shí),可能給設(shè)備內(nèi)部存儲(chǔ)空間帶來(lái)比較大的壓力,造成在設(shè)備外部存儲(chǔ)還剩余比較多空間時(shí),內(nèi)部存儲(chǔ)空間已經(jīng)告急的情況。同時(shí),在實(shí)驗(yàn)檢測(cè)的共19款應(yīng)用中,發(fā)現(xiàn)只有2款應(yīng)用對(duì)緩存文件的存儲(chǔ)空間占用進(jìn)行了控制,絕大多數(shù)應(yīng)用的緩存空間在實(shí)驗(yàn)過(guò)程中都是無(wú)限制增長(zhǎng)的。實(shí)驗(yàn)結(jié)束后應(yīng)用產(chǎn)生的緩存文件大小一般在幾十兆甚至上百兆,雖然有可能存在應(yīng)用中緩存空間控制的閾限較高的情況,但考慮到目前測(cè)試設(shè)備的容量和移動(dòng)設(shè)備上安裝的應(yīng)用數(shù)量(2016年,美國(guó)每臺(tái)移動(dòng)設(shè)備平均安裝約89個(gè)應(yīng)用[10]),本文實(shí)驗(yàn)得到的結(jié)果還是具有說(shuō)服力的。

    還對(duì)應(yīng)用中未被使用的緩存文件數(shù)量占比進(jìn)行了統(tǒng)計(jì),統(tǒng)計(jì)結(jié)果如圖6所示。從圖中可以看出,有超過(guò)一半的應(yīng)用,它們的緩存文件中有超過(guò)40%是未被使用的。由于本文的實(shí)驗(yàn)進(jìn)行了3天,每天運(yùn)行每個(gè)應(yīng)用兩次,因此這些未被使用的緩存文件在未來(lái)被應(yīng)用使用的幾率也比較小,可以認(rèn)為,這些緩存內(nèi)容實(shí)際上對(duì)應(yīng)用來(lái)說(shuō)已經(jīng)是冗余的,基本不會(huì)給應(yīng)用的性能帶來(lái)什么實(shí)質(zhì)性的幫助,反而造成設(shè)備存儲(chǔ)空間的浪費(fèi)。

    Fig.6 Proportion of unused cache files圖6 應(yīng)用未使用的緩存文件數(shù)量占比

    在實(shí)驗(yàn)檢測(cè)的19款應(yīng)用中,有16款應(yīng)用的緩存命中數(shù)與緩存文件數(shù)的比率在3以內(nèi),也就是說(shuō),平均每個(gè)緩存文件被訪問(wèn)的次數(shù)不到3次,由于其中大部分緩存文件沒(méi)有被訪問(wèn)或只被訪問(wèn)過(guò)一次,這意味著緩存的使用集中在很小一部分文件中。

    此外,應(yīng)用中還有一部分緩存文件是長(zhǎng)時(shí)間未被再次訪問(wèn)的,將“長(zhǎng)時(shí)間”定義為應(yīng)用最近兩次運(yùn)行(因?yàn)閷?shí)驗(yàn)設(shè)置的運(yùn)行間隔已經(jīng)比較長(zhǎng))。請(qǐng)注意,這部分緩存文件是被使用過(guò)的。結(jié)合未被使用的緩存文件數(shù)量,在實(shí)驗(yàn)結(jié)束后,這兩類緩存文件數(shù)量占緩存文件總數(shù)量的比例一般在60%以上,如果去掉實(shí)驗(yàn)中應(yīng)用最后兩次運(yùn)行過(guò)程中新增加的緩存文件,這一比例會(huì)更高。這一結(jié)果表明,應(yīng)用中絕大部分緩存文件并不需要長(zhǎng)期保留,應(yīng)用完全可以清理這類緩存,而不會(huì)對(duì)應(yīng)用性能造成太大的影響。

    與現(xiàn)有的一些安卓應(yīng)用HTTP緩存檢測(cè)工作[4-7,9]相比,本文所提出的方法不僅可以檢測(cè)應(yīng)用“有沒(méi)有緩存”,而且可以通過(guò)監(jiān)控應(yīng)用對(duì)緩存文件的使用和管理狀況,檢測(cè)應(yīng)用的緩存“好不好”,即有沒(méi)有真正起到緩存應(yīng)有的效果,有沒(méi)有因?yàn)榫彺娑绊懥嗽O(shè)備的整體使用。特別是第二點(diǎn),是現(xiàn)有的相關(guān)工作所忽視或是無(wú)法做到的。

    5 討論

    第4章的實(shí)驗(yàn)結(jié)果表明,在目前安卓市場(chǎng)上的應(yīng)用中,應(yīng)用的HTTP緩存使用存在如下問(wèn)題:(1)部分應(yīng)用的HTTP緩存并不完整,會(huì)重復(fù)獲取網(wǎng)絡(luò)中相同的資源內(nèi)容,造成移動(dòng)數(shù)據(jù)流量的浪費(fèi);同時(shí),更多的網(wǎng)絡(luò)請(qǐng)求意味著更多的電量消耗,在移動(dòng)設(shè)備電池電量仍比較緊張的今天,這也是移動(dòng)設(shè)備使用者不愿意看到的。(2)一些應(yīng)用雖然對(duì)運(yùn)行過(guò)程中獲取的HTTP資源進(jìn)行了緩存,但往往忽略了對(duì)緩存的管理,沒(méi)有對(duì)緩存文件的空間占用進(jìn)行控制,導(dǎo)致緩存空間無(wú)限制增長(zhǎng),影響設(shè)備的整體使用。(3)應(yīng)用運(yùn)行過(guò)程中產(chǎn)生的緩存文件中,有很大一部分是冗余的、無(wú)意義的,它們?cè)谏珊蟛](méi)有被應(yīng)用所使用,無(wú)法起到開(kāi)發(fā)者期望的效果;同時(shí),一些緩存文件雖然被使用過(guò),但在應(yīng)用隨后的運(yùn)行過(guò)程中不再被訪問(wèn),這些緩存文件實(shí)際上也已經(jīng)是冗余的。

    基于以上分析,針對(duì)安卓應(yīng)用HTTP緩存,向開(kāi)發(fā)者提出以下幾點(diǎn)建議:

    (1)開(kāi)發(fā)應(yīng)用時(shí)應(yīng)注意開(kāi)啟HTTP客戶端API中提供的緩存,這是最基本的緩存處理,對(duì)開(kāi)發(fā)者的編程負(fù)擔(dān)很小,而且比較有效。

    (2)開(kāi)發(fā)者應(yīng)該根據(jù)所開(kāi)發(fā)應(yīng)用的特點(diǎn)及具體情況,設(shè)計(jì)實(shí)現(xiàn)更為合適、靈活的緩存處理策略,以獲得更好的緩存效果。例如對(duì)于在線音樂(lè)客戶端,用戶常聽(tīng)的歌曲很適合緩存在本地,可以在很大程度上減少運(yùn)行時(shí)消耗的流量,但用戶使用類似“隨便聽(tīng)聽(tīng)”的功能隨機(jī)播放在線曲庫(kù)中的歌曲時(shí),緩存這類歌曲對(duì)于減少流量消耗的意義并不大,因?yàn)橛脩艨赡懿粫?huì)重復(fù)聽(tīng)這些歌曲。

    (3)如果應(yīng)用運(yùn)行時(shí)使用的HTTP資源也是由應(yīng)用的開(kāi)發(fā)者部署在服務(wù)器上的,那么開(kāi)發(fā)者應(yīng)該謹(jǐn)慎對(duì)待資源緩存控制的設(shè)置,一方面要保證客戶端不會(huì)展示過(guò)期的內(nèi)容,另一方面又要把失效時(shí)間設(shè)置得盡可能久,以減少不必要的重復(fù)訪問(wèn)。

    (4)應(yīng)用在運(yùn)行時(shí)應(yīng)該及時(shí)清理那些長(zhǎng)時(shí)間未使用的緩存內(nèi)容,減少緩存對(duì)設(shè)備存儲(chǔ)空間的占用。雖然現(xiàn)在很多應(yīng)用內(nèi)置了供用戶使用的清理緩存功能,但由于一臺(tái)移動(dòng)設(shè)備上應(yīng)用數(shù)量往往有幾十個(gè)甚至上百個(gè),手動(dòng)清理緩存對(duì)用戶來(lái)說(shuō)仍是一件比較繁瑣的事情。應(yīng)用應(yīng)當(dāng)把存儲(chǔ)空間優(yōu)先分配給那些使用頻率較高的緩存內(nèi)容,及時(shí)清理那些使用頻率低或者長(zhǎng)時(shí)間沒(méi)有被使用的緩存內(nèi)容,這樣既可以保證應(yīng)用的流暢運(yùn)行,發(fā)揮緩存應(yīng)有的效果,又可以保證良好的用戶使用體驗(yàn)。

    6 局限和未來(lái)工作

    本文提出的方法及具體實(shí)現(xiàn)還存在一些局限,主要有以下幾方面:

    (1)由于不同的應(yīng)用有各自的內(nèi)部處理邏輯,對(duì)于緩存“命中”定義的粒度比較粗,只能定義到文件級(jí)別,因此應(yīng)用存儲(chǔ)緩存的方式和訪問(wèn)方式都可能會(huì)對(duì)分析結(jié)果產(chǎn)生影響。例如,應(yīng)用如果將緩存集中存儲(chǔ)在少數(shù)幾個(gè)文件當(dāng)中,那么這幾個(gè)文件被訪問(wèn)的次數(shù)可能會(huì)比較多。此外,在應(yīng)用運(yùn)行時(shí),可能會(huì)有一些保存在內(nèi)存中的緩存內(nèi)容,這些緩存內(nèi)容的具體形式因應(yīng)用而異,無(wú)法記錄關(guān)于這類緩存的確切信息,如果應(yīng)用不訪問(wèn)文件,而是直接獲取存儲(chǔ)在內(nèi)存當(dāng)中的緩存,那么可能會(huì)對(duì)檢測(cè)的結(jié)果造成影響。不過(guò)由于設(shè)備內(nèi)存容量相對(duì)設(shè)備總體存儲(chǔ)容量比較有限,這類緩存的總?cè)萘恳话惚容^小,對(duì)檢測(cè)結(jié)果的影響相對(duì)有限。未來(lái)可以加入對(duì)應(yīng)用代碼結(jié)構(gòu)的分析,找出應(yīng)用存儲(chǔ)HTTP緩存的數(shù)據(jù)結(jié)構(gòu)和存儲(chǔ)方式,以便在運(yùn)行時(shí)獲得更加準(zhǔn)確的檢測(cè)結(jié)果。

    (2)本文實(shí)驗(yàn)中的自動(dòng)化測(cè)試工具使用的是安卓SDK提供的Monkey,該工具生成的用戶事件流的隨機(jī)性比較大,可控性相對(duì)較??;而在一個(gè)移動(dòng)應(yīng)用中,不同的業(yè)務(wù)邏輯的使用頻率也不盡相同,比如在微博客戶端中,用戶可能更常刷新微博而不是發(fā)送私信,Monkey產(chǎn)生的隨機(jī)用戶事件流也許不能很好地模擬這一點(diǎn),并可能對(duì)最終檢測(cè)結(jié)果造成一定的影響。在未來(lái)的工作中,將嘗試結(jié)合一些能產(chǎn)生更加可控的用戶事件流的自動(dòng)化測(cè)試工具來(lái)進(jìn)行檢測(cè)。

    (3)應(yīng)用內(nèi)容的更新頻率和應(yīng)用的使用頻率也可能對(duì)檢測(cè)結(jié)果造成影響。如果應(yīng)用中的內(nèi)容的更新頻率很高(比如一些新聞客戶端)而使用頻率較低,檢測(cè)得到的緩存命中次數(shù)可能相對(duì)較少。在本文實(shí)驗(yàn)中,每天檢測(cè)兩次,兩次檢測(cè)時(shí)間間隔大于5 h,檢測(cè)3天,可以大致模擬普通用戶使用應(yīng)用的一般頻率,但由于無(wú)法完全了解每個(gè)應(yīng)用的內(nèi)容更新頻率,因此實(shí)驗(yàn)的結(jié)果可能受到一些影響。

    7 相關(guān)工作

    有許多與安卓應(yīng)用的HTTP緩存相關(guān)的工作。Zhang等人[7]對(duì)安卓應(yīng)用的網(wǎng)絡(luò)緩存狀況進(jìn)行了調(diào)研,并且實(shí)現(xiàn)了一個(gè)系統(tǒng)級(jí)的應(yīng)用網(wǎng)絡(luò)緩存服務(wù)。這一工作進(jìn)行的調(diào)研是通過(guò)代理服務(wù)器攔截應(yīng)用的網(wǎng)絡(luò)請(qǐng)求來(lái)實(shí)現(xiàn)的,只能實(shí)現(xiàn)對(duì)應(yīng)用網(wǎng)絡(luò)緩存的完整性的檢測(cè),無(wú)法對(duì)本文所描述的更深層次的、與應(yīng)用相關(guān)的緩存問(wèn)題進(jìn)行檢測(cè)。為了優(yōu)化移動(dòng)應(yīng)用中的HTTP請(qǐng)求調(diào)用,減少HTTP請(qǐng)求對(duì)電池電量的消耗,Li等人[11]提出了一種通過(guò)靜態(tài)分析自動(dòng)檢測(cè)安卓應(yīng)用中的HTTP請(qǐng)求并在運(yùn)行時(shí)將多個(gè)請(qǐng)求捆綁發(fā)送的方法,可以有效減少電量消耗,并且不會(huì)引入過(guò)多額外開(kāi)銷。

    還有一些與移動(dòng)端網(wǎng)絡(luò)瀏覽器的緩存相關(guān)的研究工作。其中一部分工作[12-13]將移動(dòng)設(shè)備與個(gè)人電腦上的網(wǎng)絡(luò)訪問(wèn)行為的差異進(jìn)行了比較,指出了這些差異可能對(duì)移動(dòng)端的網(wǎng)絡(luò)瀏覽器緩存產(chǎn)生的影響。還有一些工作[4,9]對(duì)移動(dòng)端網(wǎng)絡(luò)瀏覽器的緩存表現(xiàn)進(jìn)行了研究和分析,雖然這些研究針對(duì)的是瀏覽器應(yīng)用,但其中發(fā)現(xiàn)的諸如冗余傳輸、誤緩存等問(wèn)題在一些其他類型的移動(dòng)應(yīng)用中也同樣存在。Liu等人[5-6]針對(duì)這些問(wèn)題設(shè)計(jì)實(shí)現(xiàn)了一個(gè)基于代理的緩存優(yōu)化系統(tǒng),供移動(dòng)端網(wǎng)絡(luò)瀏覽器和服務(wù)器使用,可以節(jié)約網(wǎng)頁(yè)加載時(shí)間,減少網(wǎng)絡(luò)數(shù)據(jù)傳輸量。本文在上述基礎(chǔ)上更進(jìn)一步地研究了一般化的移動(dòng)應(yīng)用中存在的緩存問(wèn)題,以及應(yīng)用緩存的使用效率和空間占用情況。

    一些現(xiàn)有工作對(duì)緩存策略進(jìn)行了研究。Ihm等人[14]研究發(fā)現(xiàn),基于內(nèi)容的緩存策略相比基于對(duì)象的緩存策略,可以獲得更高的緩存命中率。Kim等人[15]對(duì)現(xiàn)有緩存策略在移動(dòng)設(shè)備閃存上的適用性進(jìn)行了調(diào)查研究,并針對(duì)移動(dòng)設(shè)備閃存容量較小、性能有限的特點(diǎn),設(shè)計(jì)了一種考慮閃存中寫(xiě)操作的空間鄰接性的緩存策略。Chavan等人[16]提出了一種新的移動(dòng)設(shè)備數(shù)據(jù)庫(kù)緩存替換策略,該策略考慮了客戶端運(yùn)動(dòng)的時(shí)間和空間屬性,以及獲取數(shù)據(jù)的模式。在移動(dòng)設(shè)備上,該策略的緩存表現(xiàn)相較傳統(tǒng)的最近最少使用策略有了較大提升。

    8 總結(jié)

    本文提出了一種基于動(dòng)態(tài)分析的安卓應(yīng)用緩存缺陷自動(dòng)檢測(cè)方法,該方法可以在運(yùn)行時(shí)監(jiān)測(cè)應(yīng)用的HTTP通信和對(duì)緩存文件的使用,從而檢測(cè)分析應(yīng)用中存在的HTTP緩存問(wèn)題。依據(jù)這一方法,實(shí)現(xiàn)了一個(gè)運(yùn)行時(shí)庫(kù)和一款安卓應(yīng)用自動(dòng)化改造工具,并使用25款安卓市場(chǎng)上的應(yīng)用進(jìn)行了實(shí)驗(yàn)。實(shí)驗(yàn)結(jié)果表明,本文提出的方法適用于很大一部分安卓應(yīng)用,并能夠有效發(fā)現(xiàn)安卓應(yīng)用中存在的緩存缺失、緩存空間無(wú)限增長(zhǎng)和緩存冗余等問(wèn)題。本文還對(duì)發(fā)現(xiàn)的緩存問(wèn)題進(jìn)行了討論,為開(kāi)發(fā)者指出了解決這些問(wèn)題的思路和方法。

    猜你喜歡
    安卓開(kāi)發(fā)者客戶端
    文物表情包
    縣級(jí)臺(tái)在突發(fā)事件報(bào)道中如何應(yīng)用手機(jī)客戶端
    孵化垂直頻道:新聞客戶端新策略
    基于Vanconnect的智能家居瘦客戶端的設(shè)計(jì)與實(shí)現(xiàn)
    一種基于安卓系統(tǒng)的手機(jī)側(cè)抓包分析方法
    16%游戲開(kāi)發(fā)者看好VR
    CHIP新電腦(2016年3期)2016-03-10 13:06:42
    iOS開(kāi)發(fā)者調(diào)查
    電腦迷(2015年8期)2015-05-30 12:27:10
    iOS開(kāi)發(fā)者調(diào)查
    電腦迷(2015年4期)2015-05-30 05:24:09
    安卓L未至安卓M來(lái)了!安卓首泄漏M系統(tǒng)
    客戶端空間數(shù)據(jù)緩存策略
    亚洲久久久国产精品| 国产高清视频在线播放一区| 看免费av毛片| 黄色丝袜av网址大全| 国产单亲对白刺激| 极品人妻少妇av视频| 免费搜索国产男女视频| 国产有黄有色有爽视频| 黄色视频不卡| www.999成人在线观看| 精品乱码久久久久久99久播| 国产高清激情床上av| 久久久久亚洲av毛片大全| 黄色 视频免费看| 国产精品1区2区在线观看.| www日本在线高清视频| 午夜福利影视在线免费观看| 中文字幕精品免费在线观看视频| 热99国产精品久久久久久7| 久久精品国产综合久久久| 人人妻人人添人人爽欧美一区卜| 黑人欧美特级aaaaaa片| 级片在线观看| 精品久久久久久久久久免费视频 | 国产麻豆69| 如日韩欧美国产精品一区二区三区| 在线观看免费日韩欧美大片| 一级,二级,三级黄色视频| 日本免费a在线| 国产成人精品在线电影| 88av欧美| 黄色视频不卡| 久久久水蜜桃国产精品网| 美女午夜性视频免费| 国产无遮挡羞羞视频在线观看| 日本黄色视频三级网站网址| 国产精品免费视频内射| 美女国产高潮福利片在线看| 国产主播在线观看一区二区| 亚洲美女黄片视频| 国产男靠女视频免费网站| 久久久久久免费高清国产稀缺| 曰老女人黄片| 曰老女人黄片| 又紧又爽又黄一区二区| 亚洲欧美精品综合一区二区三区| 亚洲国产精品合色在线| 久久国产精品影院| 亚洲人成网站在线播放欧美日韩| 亚洲三区欧美一区| 午夜视频精品福利| 日韩欧美国产一区二区入口| 伊人久久大香线蕉亚洲五| ponron亚洲| 韩国精品一区二区三区| 伊人久久大香线蕉亚洲五| 亚洲专区中文字幕在线| 国产精品亚洲一级av第二区| 亚洲中文字幕日韩| 一进一出抽搐gif免费好疼 | 老鸭窝网址在线观看| 亚洲精华国产精华精| 久久精品91无色码中文字幕| 午夜福利在线观看吧| av超薄肉色丝袜交足视频| 嫁个100分男人电影在线观看| 麻豆av在线久日| 久久亚洲真实| 一级,二级,三级黄色视频| 色精品久久人妻99蜜桃| 18禁裸乳无遮挡免费网站照片 | 欧美另类亚洲清纯唯美| 成熟少妇高潮喷水视频| 国产精品 欧美亚洲| 久久国产精品人妻蜜桃| 久久国产精品人妻蜜桃| 黄色怎么调成土黄色| 人人妻人人添人人爽欧美一区卜| av国产精品久久久久影院| 久久国产亚洲av麻豆专区| 窝窝影院91人妻| 黄色怎么调成土黄色| 欧美乱码精品一区二区三区| 精品国产国语对白av| 亚洲午夜理论影院| 亚洲一区二区三区不卡视频| 欧美日韩精品网址| 亚洲中文字幕日韩| 亚洲伊人色综图| 男女午夜视频在线观看| 日本欧美视频一区| 精品国产美女av久久久久小说| 亚洲av成人av| 90打野战视频偷拍视频| 免费观看人在逋| 亚洲av熟女| 这个男人来自地球电影免费观看| 在线观看免费日韩欧美大片| 亚洲人成电影免费在线| 别揉我奶头~嗯~啊~动态视频| 国产成人精品在线电影| 一区二区日韩欧美中文字幕| 午夜影院日韩av| 国产又色又爽无遮挡免费看| 一区福利在线观看| 日本精品一区二区三区蜜桃| 亚洲熟妇熟女久久| 天天添夜夜摸| 久久中文字幕人妻熟女| 久久久久久久精品吃奶| 18禁裸乳无遮挡免费网站照片 | 精品国产乱子伦一区二区三区| 欧美最黄视频在线播放免费 | 亚洲成人精品中文字幕电影 | 亚洲av熟女| 如日韩欧美国产精品一区二区三区| 在线观看免费午夜福利视频| 日本vs欧美在线观看视频| av网站在线播放免费| 国产av一区在线观看免费| 脱女人内裤的视频| 精品卡一卡二卡四卡免费| 欧美激情久久久久久爽电影 | 国产精品国产高清国产av| 又黄又爽又免费观看的视频| 岛国在线观看网站| 久久国产精品影院| 嫩草影视91久久| 在线观看一区二区三区激情| 久久天堂一区二区三区四区| 五月开心婷婷网| 中文字幕另类日韩欧美亚洲嫩草| 国产成人精品在线电影| 级片在线观看| 人妻丰满熟妇av一区二区三区| 亚洲中文日韩欧美视频| 国产视频一区二区在线看| 波多野结衣av一区二区av| 国产精品自产拍在线观看55亚洲| 一级片'在线观看视频| 国产精品99久久99久久久不卡| 在线永久观看黄色视频| 亚洲一卡2卡3卡4卡5卡精品中文| 久久精品亚洲精品国产色婷小说| 宅男免费午夜| aaaaa片日本免费| 欧美日韩瑟瑟在线播放| 欧美日本中文国产一区发布| 美女扒开内裤让男人捅视频| 亚洲国产欧美日韩在线播放| 狠狠狠狠99中文字幕| 高清在线国产一区| 久久欧美精品欧美久久欧美| 日本a在线网址| 国产精品 欧美亚洲| 999久久久精品免费观看国产| 19禁男女啪啪无遮挡网站| 热99re8久久精品国产| 久久精品亚洲精品国产色婷小说| 黄片小视频在线播放| 青草久久国产| 国产成+人综合+亚洲专区| 在线观看免费视频网站a站| 夜夜爽天天搞| 中文字幕av电影在线播放| 国产亚洲精品第一综合不卡| 黄片大片在线免费观看| 亚洲自偷自拍图片 自拍| 国产免费av片在线观看野外av| 成人手机av| 中文字幕av电影在线播放| 91成人精品电影| 母亲3免费完整高清在线观看| 搡老乐熟女国产| 欧美日韩亚洲高清精品| 高清黄色对白视频在线免费看| 国产高清国产精品国产三级| 女人高潮潮喷娇喘18禁视频| 国产精品偷伦视频观看了| 丁香六月欧美| 日本欧美视频一区| 一级作爱视频免费观看| 欧美乱色亚洲激情| 日本精品一区二区三区蜜桃| 欧美成人免费av一区二区三区| 女同久久另类99精品国产91| 极品教师在线免费播放| 级片在线观看| 亚洲国产精品sss在线观看 | 欧美精品亚洲一区二区| 亚洲成av片中文字幕在线观看| 精品无人区乱码1区二区| 在线十欧美十亚洲十日本专区| 在线永久观看黄色视频| 国产97色在线日韩免费| 黄网站色视频无遮挡免费观看| 女性生殖器流出的白浆| svipshipincom国产片| 亚洲精品中文字幕在线视频| 最近最新中文字幕大全免费视频| 国产激情欧美一区二区| 久久精品国产亚洲av香蕉五月| 欧美日韩视频精品一区| 国产乱人伦免费视频| 老汉色av国产亚洲站长工具| 亚洲avbb在线观看| 日本五十路高清| 麻豆av在线久日| 成人精品一区二区免费| 亚洲片人在线观看| aaaaa片日本免费| 国产精品免费视频内射| 久久久国产精品麻豆| 久久久国产一区二区| 欧美日韩黄片免| 黄色视频,在线免费观看| 欧洲精品卡2卡3卡4卡5卡区| 99久久人妻综合| 国产精品 国内视频| 成人精品一区二区免费| 18禁国产床啪视频网站| 中出人妻视频一区二区| 亚洲av成人不卡在线观看播放网| 制服诱惑二区| 欧美精品啪啪一区二区三区| 90打野战视频偷拍视频| 亚洲欧美日韩高清在线视频| 国产蜜桃级精品一区二区三区| 无人区码免费观看不卡| 午夜两性在线视频| 亚洲av熟女| 中文字幕av电影在线播放| 精品一品国产午夜福利视频| 欧美丝袜亚洲另类 | 午夜福利一区二区在线看| 99久久国产精品久久久| 亚洲成人免费电影在线观看| 国产成人精品无人区| 看片在线看免费视频| 午夜a级毛片| 99热国产这里只有精品6| 变态另类成人亚洲欧美熟女 | 国产麻豆69| 久热爱精品视频在线9| 国产免费现黄频在线看| 级片在线观看| av在线播放免费不卡| 国产欧美日韩综合在线一区二区| 动漫黄色视频在线观看| 国产精品 国内视频| 99久久99久久久精品蜜桃| 他把我摸到了高潮在线观看| 久久久久国产一级毛片高清牌| 午夜两性在线视频| 免费搜索国产男女视频| 国产成+人综合+亚洲专区| 亚洲成av片中文字幕在线观看| 婷婷丁香在线五月| 婷婷精品国产亚洲av在线| 又大又爽又粗| 国产精品一区二区精品视频观看| 亚洲欧美一区二区三区黑人| av电影中文网址| 天堂动漫精品| 久久久久精品国产欧美久久久| 免费看a级黄色片| 大香蕉久久成人网| 国产精品免费视频内射| 日日干狠狠操夜夜爽| 丁香六月欧美| 亚洲av成人av| 黄色a级毛片大全视频| 精品一区二区三卡| 亚洲成a人片在线一区二区| 不卡一级毛片| 亚洲av第一区精品v没综合| 日韩欧美在线二视频| 亚洲伊人色综图| 香蕉国产在线看| 激情在线观看视频在线高清| 51午夜福利影视在线观看| 国产激情欧美一区二区| 欧美老熟妇乱子伦牲交| 在线播放国产精品三级| 亚洲精品久久成人aⅴ小说| 97超级碰碰碰精品色视频在线观看| 不卡一级毛片| 久久天躁狠狠躁夜夜2o2o| 男女下面插进去视频免费观看| 9191精品国产免费久久| 亚洲精品国产精品久久久不卡| 免费av中文字幕在线| 亚洲欧美日韩无卡精品| 欧美丝袜亚洲另类 | 国产成人精品在线电影| 国产1区2区3区精品| 亚洲,欧美精品.| 老司机福利观看| 女人高潮潮喷娇喘18禁视频| 很黄的视频免费| 12—13女人毛片做爰片一| 视频在线观看一区二区三区| 在线十欧美十亚洲十日本专区| 露出奶头的视频| 看免费av毛片| 91精品三级在线观看| 国内久久婷婷六月综合欲色啪| 无遮挡黄片免费观看| 免费在线观看黄色视频的| 亚洲人成网站在线播放欧美日韩| 亚洲黑人精品在线| 久久久久国产精品人妻aⅴ院| 久久精品人人爽人人爽视色| 一级毛片精品| 在线天堂中文资源库| 午夜成年电影在线免费观看| 精品国产一区二区三区四区第35| 中文字幕色久视频| 无遮挡黄片免费观看| 久99久视频精品免费| 一级黄色大片毛片| 一个人免费在线观看的高清视频| 真人做人爱边吃奶动态| 国产一区二区激情短视频| 两个人看的免费小视频| 亚洲,欧美精品.| 午夜成年电影在线免费观看| 一a级毛片在线观看| 夜夜夜夜夜久久久久| 嫩草影视91久久| 久9热在线精品视频| 夜夜看夜夜爽夜夜摸 | 欧美乱色亚洲激情| 日韩视频一区二区在线观看| 亚洲欧美一区二区三区久久| 黑丝袜美女国产一区| 国产99久久九九免费精品| 国产一卡二卡三卡精品| 丰满迷人的少妇在线观看| 久久亚洲精品不卡| www.精华液| 在线观看一区二区三区激情| 欧美一级毛片孕妇| 巨乳人妻的诱惑在线观看| 色婷婷av一区二区三区视频| 精品人妻1区二区| 视频区图区小说| 日韩免费av在线播放| 真人一进一出gif抽搐免费| 天堂俺去俺来也www色官网| 满18在线观看网站| 久久久久国产精品人妻aⅴ院| 国产有黄有色有爽视频| 无限看片的www在线观看| 久久久精品欧美日韩精品| 中文字幕av电影在线播放| 99国产精品免费福利视频| 国产aⅴ精品一区二区三区波| 久久精品aⅴ一区二区三区四区| 久久草成人影院| 亚洲成人免费av在线播放| bbb黄色大片| 成人av一区二区三区在线看| 久久久国产成人免费| 老汉色∧v一级毛片| 又黄又粗又硬又大视频| 成人亚洲精品一区在线观看| 在线观看舔阴道视频| 日韩三级视频一区二区三区| 精品国产乱子伦一区二区三区| 国产精品二区激情视频| 一级毛片女人18水好多| 国产欧美日韩精品亚洲av| 欧美久久黑人一区二区| 日韩欧美三级三区| 久久午夜综合久久蜜桃| 精品国产美女av久久久久小说| √禁漫天堂资源中文www| 国产xxxxx性猛交| 欧美一级毛片孕妇| 一a级毛片在线观看| 亚洲欧美精品综合久久99| 亚洲第一av免费看| 日本三级黄在线观看| 少妇被粗大的猛进出69影院| 制服人妻中文乱码| 一二三四社区在线视频社区8| 国产aⅴ精品一区二区三区波| 国产欧美日韩一区二区三| 色尼玛亚洲综合影院| 精品国产一区二区三区四区第35| 黑人猛操日本美女一级片| 免费av毛片视频| 久久久久精品国产欧美久久久| av视频免费观看在线观看| 高清在线国产一区| 男女床上黄色一级片免费看| 国产精品野战在线观看 | 一级毛片精品| 另类亚洲欧美激情| 亚洲欧洲精品一区二区精品久久久| 啦啦啦免费观看视频1| 99精品久久久久人妻精品| 一二三四在线观看免费中文在| 最近最新免费中文字幕在线| 国产视频一区二区在线看| 成人手机av| 亚洲一区二区三区色噜噜 | 麻豆成人av在线观看| 母亲3免费完整高清在线观看| 国产精品99久久99久久久不卡| 久久亚洲真实| 亚洲中文字幕日韩| 亚洲人成电影免费在线| 人人妻,人人澡人人爽秒播| 美女 人体艺术 gogo| 女人高潮潮喷娇喘18禁视频| 欧美成人免费av一区二区三区| 在线观看免费视频网站a站| 黑人猛操日本美女一级片| 精品国产美女av久久久久小说| 国产aⅴ精品一区二区三区波| 亚洲男人天堂网一区| 精品久久久久久久久久免费视频 | 国产精品 欧美亚洲| 免费av毛片视频| 成人18禁高潮啪啪吃奶动态图| 美女高潮喷水抽搐中文字幕| 日日夜夜操网爽| 日韩视频一区二区在线观看| 日韩国内少妇激情av| 亚洲av熟女| 久久国产精品影院| 一区在线观看完整版| 伊人久久大香线蕉亚洲五| aaaaa片日本免费| www国产在线视频色| 亚洲美女黄片视频| 亚洲国产中文字幕在线视频| 宅男免费午夜| 窝窝影院91人妻| 91成年电影在线观看| 女人爽到高潮嗷嗷叫在线视频| 久久人妻福利社区极品人妻图片| 色老头精品视频在线观看| 国产精品 国内视频| 成人av一区二区三区在线看| 精品无人区乱码1区二区| 丁香欧美五月| 最近最新中文字幕大全电影3 | 久久婷婷成人综合色麻豆| 国产国语露脸激情在线看| 91成人精品电影| 亚洲精品国产一区二区精华液| 国产一卡二卡三卡精品| 啦啦啦在线免费观看视频4| 亚洲av电影在线进入| 亚洲一区二区三区不卡视频| 一级片免费观看大全| 日韩中文字幕欧美一区二区| 国产欧美日韩综合在线一区二区| 村上凉子中文字幕在线| 成人三级做爰电影| 国产欧美日韩一区二区三| 日韩大尺度精品在线看网址 | 极品人妻少妇av视频| 成人三级黄色视频| 久久久国产一区二区| 91麻豆精品激情在线观看国产 | 久久人妻福利社区极品人妻图片| 欧美不卡视频在线免费观看 | 自线自在国产av| 国产亚洲欧美98| 巨乳人妻的诱惑在线观看| 色尼玛亚洲综合影院| 精品乱码久久久久久99久播| 在线国产一区二区在线| 人成视频在线观看免费观看| 免费在线观看影片大全网站| 在线av久久热| 精品人妻在线不人妻| 黄色a级毛片大全视频| 视频区欧美日本亚洲| 一本综合久久免费| 又大又爽又粗| 动漫黄色视频在线观看| 久久久精品国产亚洲av高清涩受| 精品一区二区三卡| 制服人妻中文乱码| 久久久久久大精品| 亚洲色图av天堂| 成年人黄色毛片网站| 黑人巨大精品欧美一区二区蜜桃| 亚洲avbb在线观看| 十八禁网站免费在线| 久久精品国产综合久久久| cao死你这个sao货| 免费在线观看影片大全网站| 在线av久久热| 国产一卡二卡三卡精品| 丝袜美足系列| 国产精品 国内视频| 中国美女看黄片| 久久婷婷成人综合色麻豆| 操美女的视频在线观看| 久久精品国产亚洲av香蕉五月| 黄色怎么调成土黄色| 日韩视频一区二区在线观看| 欧美日韩av久久| 久9热在线精品视频| 日本五十路高清| 成人18禁在线播放| 亚洲精品国产精品久久久不卡| 老司机亚洲免费影院| 日韩高清综合在线| 久久欧美精品欧美久久欧美| www.精华液| 国产一区二区三区综合在线观看| 成人永久免费在线观看视频| 嫁个100分男人电影在线观看| 自线自在国产av| 高清av免费在线| 中文字幕人妻丝袜一区二区| 国产熟女xx| 日韩大码丰满熟妇| 久久欧美精品欧美久久欧美| 级片在线观看| 国产精品自产拍在线观看55亚洲| 国产精品免费视频内射| 黄色片一级片一级黄色片| 午夜a级毛片| 亚洲精品av麻豆狂野| 亚洲精品中文字幕一二三四区| 日韩中文字幕欧美一区二区| 日本vs欧美在线观看视频| 他把我摸到了高潮在线观看| 在线观看舔阴道视频| 一边摸一边抽搐一进一小说| 91字幕亚洲| 亚洲男人的天堂狠狠| 在线天堂中文资源库| 久久精品亚洲熟妇少妇任你| 青草久久国产| 在线视频色国产色| 9色porny在线观看| 黄频高清免费视频| 亚洲成人久久性| 一级片'在线观看视频| 99在线人妻在线中文字幕| 欧美性长视频在线观看| 亚洲色图 男人天堂 中文字幕| 天天躁狠狠躁夜夜躁狠狠躁| 亚洲情色 制服丝袜| 中文字幕人妻丝袜制服| 精品一区二区三区视频在线观看免费 | 久久人妻福利社区极品人妻图片| 国产精品免费视频内射| 午夜老司机福利片| 日韩欧美一区二区三区在线观看| 9191精品国产免费久久| 国产精华一区二区三区| 91成人精品电影| 黄片播放在线免费| 久久人妻熟女aⅴ| 不卡一级毛片| 91麻豆av在线| 日韩三级视频一区二区三区| 欧美乱色亚洲激情| 制服诱惑二区| 在线观看一区二区三区| 久久久久久久久中文| 又大又爽又粗| 国产野战对白在线观看| 久久人人爽av亚洲精品天堂| 免费女性裸体啪啪无遮挡网站| 国产无遮挡羞羞视频在线观看| www国产在线视频色| 亚洲熟妇中文字幕五十中出 | 国产色视频综合| 欧美日本亚洲视频在线播放| 黄色a级毛片大全视频| 亚洲七黄色美女视频| 纯流量卡能插随身wifi吗| 久久伊人香网站| 久久久精品欧美日韩精品| 一边摸一边做爽爽视频免费| 久久精品国产99精品国产亚洲性色 | 精品一区二区三区视频在线观看免费 | 老司机午夜十八禁免费视频| av视频免费观看在线观看| 亚洲色图综合在线观看| 亚洲狠狠婷婷综合久久图片| 两性午夜刺激爽爽歪歪视频在线观看 | 高清欧美精品videossex| 香蕉国产在线看| 国产又色又爽无遮挡免费看| 热re99久久国产66热| a在线观看视频网站| 国产在线观看jvid| 久久国产亚洲av麻豆专区| 这个男人来自地球电影免费观看| 精品久久久久久,| 脱女人内裤的视频| 电影成人av| 国产男靠女视频免费网站| 久久人人爽av亚洲精品天堂| 久久精品国产亚洲av高清一级| 日韩免费av在线播放| av天堂久久9| 欧美成人性av电影在线观看| 天天躁夜夜躁狠狠躁躁| 久久午夜综合久久蜜桃| 亚洲av熟女| 波多野结衣高清无吗| 精品久久久久久久久久免费视频 |