AndroidP新增檢測(cè)項(xiàng)問(wèn)題怎么修復(fù)

這篇文章主要講解了“Android P新增檢測(cè)項(xiàng)問(wèn)題怎么修復(fù)”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Android P新增檢測(cè)項(xiàng)問(wèn)題怎么修復(fù)”吧!

韶關(guān)網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),韶關(guān)網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為韶關(guān)上千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的韶關(guān)做網(wǎng)站的公司定做!

問(wèn)題原因:

Android P新增檢測(cè)項(xiàng)問(wèn)題怎么修復(fù)

commit 7c947996ca9426a8ae3abf9feb110f166d8f11daAuthor: Vladimir Marko <vmarko@google.com>Date:   Thu Apr 26 09:18:10 2018 +0100

    AOT inlined method lookup should stay within dex file.
    
    Rewrite the AOT inlined method lookup and guard against
    crossing dex file boundary. The compiler does not currently
    support inlining across dex files, so this is an indication
    of multiple dex files defining the same class and the AOT
    code having used a definition which is not used at runtime.    
    Test: m test-art-host-gtest    Test: testrunner.py --host --optimizing --jit    Test: Pixel 2 XL boots.    Test: testrunner.py --target --optimizing --jit    Bug: 74410240
    
    (cherry picked from commit 63a9f3e9e1b9fb8d98d8ca9abe626f3aa11e5692)
    
    Change-Id: Ibe9792f952d0c963b8560f10d57a951e227b24aa

從提交的日志可以看出,內(nèi)斂inline應(yīng)該存放在一個(gè)dex文件中,不允許跨dex文件

關(guān)于art/runtime/entrypoints/entrypoint_utils-inl.h的日志:


Android P新增檢測(cè)項(xiàng)問(wèn)題怎么修復(fù)


1、問(wèn)題場(chǎng)景

由于國(guó)內(nèi)大多數(shù)應(yīng)用基本上都集成了熱修復(fù)功能,所以 Android P的這個(gè)特性對(duì)國(guó)內(nèi)應(yīng)用影響較大。(不太理解熱修復(fù)的童鞋可以參考:阿里的Android熱修復(fù)技術(shù)原理.pdf)

目前發(fā)現(xiàn)主要有兩種情況:

  • 場(chǎng)景一

應(yīng)用原始apk中的dex A和從應(yīng)用服務(wù)端下載的熱修復(fù)dex B存在重復(fù)類,觸發(fā)熱修復(fù)且系統(tǒng)后臺(tái)優(yōu)化inline編譯后,便會(huì)出現(xiàn)此問(wèn)題。

  • 場(chǎng)景二

由 classloader A 加載的 class1 調(diào)用一個(gè)由 classloader B 加載的 class2里的某個(gè) inline 方法,將導(dǎo)致應(yīng)用閃退。

2、應(yīng)用如何自檢?

  • 1.首先建議應(yīng)用在Android P中測(cè)試驗(yàn)證是否有該問(wèn)題:

adb shell cmd package compile –m speed –f 應(yīng)用包名 (inline編譯)。
啟動(dòng)應(yīng)用,構(gòu)造熱修復(fù)場(chǎng)景,在應(yīng)用側(cè)觸發(fā)熱修復(fù)。
熱修復(fù)完成之后,重啟應(yīng)用,檢測(cè)有無(wú)閃退和無(wú)響應(yīng)問(wèn)題。

  • 2.通過(guò)關(guān)鍵日志分析確認(rèn)問(wèn)題:

如果問(wèn)題日志中有這個(gè)關(guān)鍵日志:This must be due to duplicate classes or playing wrongly with class loaders,可以確定就是該問(wèn)題。

如下圖:

06-20 19:07:24.597 30376 30376 F m.taobao.taoba:entrypoint_utils-inl.h:94]
Inlined method resolution crossed dex file boundary: 
from void com.ali.mobisecenhance.Init.doInstallCodeCoverage
(android.app.Application, android.content.Context) in/data/app/com.taobao.taobao-YPDeV7WbuyZckOfy-5AuKw==/base.apk!classes3.dex/0xece238f0to void com.ali.mobisecenhance.code.CodeCoverageEntry.CoverageInit
(android.app.Application, android.content.Context) in/data/user/0/com.taobao.taobao/files/storage/com.taobao.maindex
/dexpatch/1111/com_taobao_maindex.zip!classes4.dex/0xebda4320. 
This must be due to duplicate classes or playing wrongly with class loaders
  • 3、修復(fù)建議

    • 1.不要將ROM中預(yù)置的jar包打包至apk。

    • 2.不要使用相同的class loader加載重復(fù)類。

    • 3.如果必須要有重復(fù)類的話,避免內(nèi)聯(lián)現(xiàn)象(比如,在不期望被inline的函數(shù)里面加try catch,這樣compiler就不會(huì)將此函數(shù)inline)。

感謝各位的閱讀,以上就是“Android P新增檢測(cè)項(xiàng)問(wèn)題怎么修復(fù)”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Android P新增檢測(cè)項(xiàng)問(wèn)題怎么修復(fù)這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

名稱欄目:AndroidP新增檢測(cè)項(xiàng)問(wèn)題怎么修復(fù)
分享地址:http://bm7419.com/article22/jjesjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、網(wǎng)站收錄、域名注冊(cè)云服務(wù)器、商城網(wǎng)站網(wǎng)站營(yíng)銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名