国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于應(yīng)用性能優(yōu)化之VerifyClass詳解

jf_f8pIz0xS ? 來源:掘金 ? 作者:大力智能技術(shù) ? 2021-04-16 18:14 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

為了加速應(yīng)用冷啟動過程且不過度涉及業(yè)務(wù)改動,本文從虛擬機加載類的過程中找到優(yōu)化項,且與業(yè)界的方案作了對比,并實現(xiàn)了半自動化的分析功能。類在使用或?qū)嵗靶枰患虞d到虛擬機中并進行初始化。整個過程如下圖所示:主要由LoadingClass和InitializingClass兩部分組合。

LoadingClass旨在把Class從Dex加載到虛擬機中,但不涉及類的使用或執(zhí)行流程。InitializingClass旨在保證使用類前已經(jīng)經(jīng)過了初始化流程,此流程嵌入類的使用或執(zhí)行過程中。

加載類

DefineClass主要通過SetupClass、InsertClass以及LoadClass將一個類加載到虛擬機中,最后返回mirror:Class對象指針。

SetupClass:設(shè)置類的訪問標(biāo)志以及ClassLoader。

InsertClass:將類插入到對應(yīng)ClassLoader的ClassTable中,以便查找。

LoadClass:將類的屬性及方法加載到類中。

類初始化

類的屬性或方法在使用前必須經(jīng)過類的初始化。

InitializeClass:核驗類、初始化父類、接口方法以及靜態(tài)屬性。

VerifyClass:核驗類的合法性,在下一節(jié)詳細分析。

核驗類

VerifyClass使用VerifyClassUsingOatFile或PerformClassVerification方法之一去核查Class。其中PerformClassVerification就包含了Systrace中耗時VerifyClass的Tag,如下圖所示:

VerifyClassUsingOatFile:通過Oat文件中的Class狀態(tài)位去核驗Class,當(dāng)狀態(tài)位等于kStatusVerified時,核查流程到此為止,直接快速返回。否則需要進入耗時的PerformClassVerification流程。

PerformClassVerification:主要核驗類中的直接方法和虛方法。

ComputeWidthsAndCountOps:判斷PC值與dalvik指令數(shù)是否相等。

ScanTryCatchBlocks:檢查Try語句開始地址、結(jié)束地址以及try開始操作符的合法性。檢查catch中handler語句開始操作符的合法性。

VerifyInstructions:檢查各種dalvik指令,同時將GC檢查點插入到括號、switch、throw指令中。

VerifyCodeFlow:檢查每條dalvik指令的寄存器以及參數(shù)的合法性。

提前發(fā)現(xiàn)

從上面的分析可以看出,應(yīng)該盡可能讓核查走VerifyClassUsingOatFile流程,即通過Oat文件狀態(tài)位核查成功。Oat文件中類的狀態(tài)位是什么以及為什么狀態(tài)位不等于kStatusVerified是問題的突破點。

通過oatdump命令去dump相應(yīng)的odex文件,可以查看類的狀態(tài)位,操作方式如下:

VLOG默認(rèn)是不會被打印的,需要動態(tài)開啟,開啟的方式可以通過:art::gLogVerbosity.class_linker = true而打開,因為本項目需要看到dex2oat和其他進程的打印情況,本人是在系統(tǒng)源碼中進行編譯生成的so,然后,通過ptrace注入so到Zygote的,此方法需要root設(shè)備,如果只需要查看本進程,應(yīng)不需要這么麻煩,具體方法還未探索,但思路應(yīng)該是一致的。舉例如下,本人碰到的問題是AppCompat包中的類不能被核驗通過。

解決方案

將Runtime對象中的verify_設(shè)置成verifier::VerifyMode::kNone。

需要通過Runtime對象首地址遍歷查找verify_屬性,魔改廠商可能帶來兼容性問題。

缺少VerifyClass過程,可能會后置發(fā)現(xiàn)非法指令問題。

對zygote中值verify_進行修改將造成cow內(nèi)存消耗。

將多出EnsureSkipAccessChecksMethods一步處理邏輯,將類中每個函數(shù)flag進行修改,此處邏輯沒有對單個類進行處理,所以,每個類的每個函數(shù)的flag都將被無謂修改,如下圖所示:

直面問題本身,通過VLOG的輸出信息,去修正源碼,具體到本案例,是由于AppCompat庫中使用了系統(tǒng)不支持的語句,如下圖所示:

本App運行環(huán)境是在8.1(API27)上,TextView沒有方法setFirstBaselineToTopHeight,所以,因為指令非法導(dǎo)致類核驗失敗。(注意Build.VERSION.SDK_INT是不會被編譯優(yōu)化的,它本身是final類型,但它的取值是等于SystemProperties.getInt(“ro.build.version.sdk”, 0),所以,必須運行時,才能確定)。本人嘗試了如下方法:

將系統(tǒng)源碼sdk中的Build.VERSION.SDK_INT值設(shè)置成27進行編譯出新的sdk,然后,將此sdk覆蓋源生的android.jar,希望編譯時將appcompat中的Build.VERSION.SDK_INT 》= 28判斷邏輯優(yōu)化掉,但實際aar不會參與sdk的編譯,此項只能優(yōu)化項目自身的邏輯。

將appcompat源碼下載下來,去掉非法指令,重新編譯成aar使用。

直接在android8.1源碼中編譯support v7包使用。

以上兩種方法,能定制自己所需的aar,甚至能裁剪資源,但碰到了致命的問題:新生成的aar不能發(fā)布到maven了,這樣的話,需要推動業(yè)務(wù)修改包名,另一個問題是,如果是項目中的第三方aar依賴了appcompat的話,問題又會出現(xiàn)。所以,最終通過制作ASM插件,將Build.VERSION.SDK_INT值設(shè)置成固定27,問題解決了,且使得本項目中apk size減少了22K。

如果是應(yīng)用需要兼容多個不同版本的ROM,也可以按照ROM版本的不同,使用App Bundle下發(fā)“最合適”的App。

平臺化

為了降低方案實施難度,現(xiàn)已將方案平臺化,只要將apk拖入網(wǎng)頁中即可看到類核驗不通過的原因。
編輯:lyn

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    685

    瀏覽量

    31337
  • 虛擬機
    +關(guān)注

    關(guān)注

    1

    文章

    972

    瀏覽量

    30493
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    詳解ADP5138:高性能電源管理IC的卓越

    詳解ADP5138:高性能電源管理IC的卓越選 在電子工程師的日常設(shè)計工作中,選擇一款合適的電源管理IC至關(guān)重要。今天,我們就來深入探討一下Analog Devices推出的ADP5138,這是
    的頭像 發(fā)表于 03-05 16:25 ?63次閱讀

    詳解 LTC4013:高性能多化學(xué)電池充電器的卓越

    詳解 LTC4013:高性能多化學(xué)電池充電器的卓越選 在當(dāng)前的電子設(shè)備領(lǐng)域中,電池的高效充電是一個關(guān)鍵問題。不同類型的電池,如鉛酸電池、鋰離子電池等,對充電方式有著不同的要求。為了滿足多樣化的充電
    的頭像 發(fā)表于 02-24 09:30 ?367次閱讀

    詳解ADC3548與ADC3549:高性能單通道14位ADC的卓越

    詳解ADC3548與ADC3549:高性能單通道14位ADC的卓越選 引言 在電子工程領(lǐng)域,模擬到數(shù)字轉(zhuǎn)換器(ADC)一直是至關(guān)重要的組件,它直接影響著系統(tǒng)對模擬信號的處理能力和精度。今天,我們要
    的頭像 發(fā)表于 01-26 10:15 ?396次閱讀

    詳解TL16C550C:高性能異步通信芯片的卓越

    詳解TL16C550C:高性能異步通信芯片的卓越選 在電子工程師的日常工作中,選擇合適的通信芯片對于實現(xiàn)穩(wěn)定、高效的異步通信至關(guān)重要。今天,我們就來深入探討一款功能強大的異步通信芯片
    的頭像 發(fā)表于 01-04 16:20 ?427次閱讀

    詳解TCAN1042:高性能CAN收發(fā)器的卓越

    詳解TCAN1042:高性能CAN收發(fā)器的卓越選 在當(dāng)今的電子系統(tǒng)中,可靠且高效的通信至關(guān)重要。CAN(Controller Area Network)總線作為一種廣泛應(yīng)用于汽車、工業(yè)自動化等領(lǐng)域
    的頭像 發(fā)表于 12-19 15:50 ?369次閱讀

    詳解THVD1428:高性能RS - 485收發(fā)器的卓越

    詳解THVD1428:高性能RS - 485收發(fā)器的卓越選 在電子工程師的日常工作中,選擇合適的收發(fā)器對于通信系統(tǒng)的穩(wěn)定性和性能至關(guān)重要。今天,我們就來詳細探討一下THVD1428,
    的頭像 發(fā)表于 12-17 16:10 ?342次閱讀

    時鐘設(shè)計優(yōu)化實戰(zhàn)

    1、時鐘設(shè)計,芯片性能的節(jié)拍器 在現(xiàn)代 IC 設(shè)計中,時鐘網(wǎng)絡(luò)的優(yōu)化是實現(xiàn)高性能、高可靠性和低功耗的關(guān)鍵。本文聚焦四大核心技術(shù):CTS 優(yōu)化、DCD 最小化、時鐘門控和時鐘域交叉(CD
    的頭像 發(fā)表于 10-09 10:07 ?549次閱讀

    鴻蒙5開發(fā)寶藏案例分享---Grid性能優(yōu)化案例

    發(fā)現(xiàn)鴻蒙寶藏:優(yōu)化Grid組件性能的實戰(zhàn)技巧! 大家好呀!最近在鴻蒙開發(fā)者社區(qū)挖到一個超實用的性能優(yōu)化案例—— 解決Grid組件加載慢、滾動卡頓的問題 。官方其實藏了不少寶藏案例,但很
    發(fā)表于 06-12 17:47

    鴻蒙5開發(fā)寶藏案例分享---長列表性能優(yōu)化解析

    鴻蒙長列表性能優(yōu)化大揭秘!告別卡頓,實戰(zhàn)代碼解析來了! 大家好呀~今天在翻鴻蒙開發(fā)者文檔時,發(fā)現(xiàn)了個 性能優(yōu)化寶藏案例 !官方居然悄悄放出了長列表卡頓的完整解決方案,實測效果炸裂!我連
    發(fā)表于 06-12 17:40

    鴻蒙5開發(fā)寶藏案例分享---應(yīng)用性能優(yōu)化指南

    鴻蒙性能優(yōu)化實戰(zhàn)指南:讓你的應(yīng)用飛起來 ? 大家好!今天咱們聊聊鴻蒙(HarmonyOS)應(yīng)用性能優(yōu)化的實戰(zhàn)技巧。結(jié)合官方文檔和最佳實踐,我整理了8大核心
    發(fā)表于 06-12 17:17

    鴻蒙5開發(fā)寶藏案例分享---性能優(yōu)化案例解析

    鴻蒙性能優(yōu)化寶藏指南:實戰(zhàn)工具與代碼案例解析 大家好呀!今天在翻鴻蒙開發(fā)者文檔時,意外挖到一個 性能優(yōu)化寶藏庫 ——原來官方早就提供了超多實用工具和案例,但很多小伙伴可能沒發(fā)現(xiàn)!這篇就
    發(fā)表于 06-12 16:36

    HarmonyOS優(yōu)化應(yīng)用內(nèi)存占用問題性能優(yōu)化

    應(yīng)用開發(fā)過程中注重內(nèi)存管理,積極采取措施來減少內(nèi)存占用,以優(yōu)化應(yīng)用程序的性能和用戶體驗。 HarmonyOS提供了一些內(nèi)存管理的工具和接口,幫助開發(fā)者有效地管理內(nèi)存資源: onMemoryLevel接口
    發(fā)表于 05-21 11:27

    快手上線鴻蒙應(yīng)用高性能解決方案:數(shù)據(jù)反序列化性能提升90%

    近日,快手在Gitee平臺上線了鴻蒙應(yīng)用性能優(yōu)化解決方案“QuickTransformer”,該方案針對鴻蒙應(yīng)用開發(fā)中廣泛使用的三方庫“class-transformer”進行了深度優(yōu)化,有效提升
    發(fā)表于 05-15 10:01

    快手上線鴻蒙應(yīng)用高性能解決方案

    近日,快手在Gitee平臺上線了鴻蒙應(yīng)用性能優(yōu)化解決方案“QuickTransformer”,該方案針對鴻蒙應(yīng)用開發(fā)中廣泛使用的三方庫“class-transformer”進行了深度優(yōu)化,有效提升
    的頭像 發(fā)表于 05-14 09:11 ?1220次閱讀
    快手上線鴻蒙應(yīng)用高<b class='flag-5'>性能</b>解決方案

    解決應(yīng)用性能問題的策略

    性能調(diào)優(yōu)貫穿于鴻蒙應(yīng)用開發(fā)的整個生命周期中,開發(fā)前有性能最佳指南等賦能套件讓你快速上手學(xué)習(xí),開發(fā)過程中有性能工具開發(fā)套件覆蓋應(yīng)用開發(fā)各階段,應(yīng)用開發(fā)完成上架后有專業(yè)的性能測試工具檢查測
    的頭像 發(fā)表于 04-24 11:42 ?833次閱讀
    解決<b class='flag-5'>應(yīng)用性能</b>問題的策略