Android 5.x 免 Root 升級系統(tǒng) WebView

前言

Android 的系統(tǒng)碎片化問題可以說是 Android 系統(tǒng)最大的硬傷了刹淌,自這個系統(tǒng)誕生以來十幾年過去了,依然沒能很好的解決芹橡,碎片化問題也是每個 Android 開發(fā)工程師心中的隱痛??毒坛,每次處理系統(tǒng)碎片化帶來的問題時,血壓也能分分鐘飆升到 200+,為了減輕其他同仁的痛苦以及此后再遇到類似問題能少踩幾個坑煎殷,就之前的爬坑經(jīng)歷做個記錄吧屡谐。

1、WebView

有關(guān) WebieView 的重要性和其使用不是本文的重點蝌数,但是有幾個相關(guān)的屬性我們必須了解:

WebView 迭代歷史

在Android4.4(API level 19)系統(tǒng)以前愕掏,Android使用了原生自帶的Android Webkit內(nèi)核,這個內(nèi)核對HTML5的支持不是很好顶伞,現(xiàn)在使用4.4以下機子的也不多了饵撑,就不對這個內(nèi)核做過多介紹了,有興趣可以看下這篇文章唆貌。

從Android4.4系統(tǒng)開始滑潘,Chromium內(nèi)核取代了Webkit內(nèi)核,正式地接管了WebView的渲染工作锨咙。Chromium是一個開源的瀏覽器內(nèi)核項目语卤,基于Chromium開源項目修改實現(xiàn)的瀏覽器非常多,包括最著名的Chrome瀏覽器酪刀,以及一眾國內(nèi)瀏覽器(360瀏覽器粹舵、QQ瀏覽器等)。其中Chromium在Android上面的實現(xiàn)是Android System WebView^1骂倘。

從Android5.0系統(tǒng)開始眼滤,WebView移植成了一個獨立的apk,可以不依賴系統(tǒng)而獨立存在和更新历涝,我們可以在系統(tǒng)->設(shè)置->Android System WebView看到WebView的當(dāng)前版本诅需。

從Android7.0系統(tǒng)開始,如果系統(tǒng)安裝了Chrome (version>51)荧库,那么Chrome將會直接為應(yīng)用的WebView提供渲染堰塌,WebView版本會隨著Chrome的更新而更新,用戶也可以選擇WebView的服務(wù)提供方(在開發(fā)者選項->WebView Implementation里)分衫,WebView可以脫離應(yīng)用场刑,在一個獨立的沙盒進程中渲染頁面(需要在開發(fā)者選項里打開)^2

從Android8.0系統(tǒng)開始丐箩,默認(rèn)開啟WebView多進程模式摇邦,即WebView運行在獨立的沙盒進程中^3。―― 節(jié)選自 如何設(shè)計一個優(yōu)雅健壯的Android WebView屎勘?(上)

Pakage Name

WebView 的包名在 AOSP 中的值是 com.android.webview施籍,該值是在 AOSP 構(gòu)建過程中編譯的版本,也就是說它是和系統(tǒng)一起被編譯出來的概漱,由于大部分的第三方手機制造商都有自己的定制 ROM丑慎,所以包名也是不盡相同,比如 MIUI ROM 中它已經(jīng)被改為 com.mi.webkit.core 。從 WebView 的版本歷史中可以看到自 Android 5.0 開始 WebView 移植成了一個獨立的 apk竿裂,可以不依賴系統(tǒng)而獨立存在和更新玉吁,這時候起 WebView 的包名就正式改為 com.google.android.webview 了。

所以這就是為什么網(wǎng)上一堆人問為啥升級了一下系統(tǒng) WebView 腻异,App 內(nèi)使用到 WebView 的地方或者是內(nèi)置瀏覽器一碰就報 PackageManager$NameNotFoundException: com.google.android.webview 或者 PackageManager$NameNotFoundException: com.android.webview 之類的錯誤进副,這些問題在 Android 5.0 的機器上非常常見,因為你升級了 WebView 之后 TMD 包名都變了??悔常,而 ROM 定制商一般在版本銜接時都很保守影斑,所以即使系統(tǒng)升到了 Android 5.0 ,解決方案未必就是最新的机打,內(nèi)置的 WebView 依然可能是硬編碼進 ROM 的矫户,所以系統(tǒng)環(huán)境引用的包名可能依舊是 com.android.webview ,你升級到 com.google.android.webview 它當(dāng)然不認(rèn)識了??残邀。

2皆辽、找到合適的 WebView.apk

通過上面一通廢話,你應(yīng)該知道了芥挣,替換的坑就在如果你換上去的 WebView 包名和原內(nèi)置的 WebView 包名不一致驱闷,就無法使用,所以就需要找一個包名一致的高版本 APK 了九秀,還有一種方法是在系統(tǒng)目錄某個配置文件里改個什么值遗嗽,也就是包名引用,這樣你就能換成任何包名的 APK 了鼓蜒,這個暫時沒仔細(xì)研究,后續(xù)有結(jié)果了再更新征字。

APKMirror是一個 APK 鏡像站點都弹,在這里可以找到很多 APK 的 release 版本以及歷史版本,尤其 Google 全家桶系列的 APK 非常全匙姜,我們在這里根據(jù)需求直接搜索包名就可以了畅厢,我這里需要 com.android.webview ,檢索到如下結(jié)果氮昧,可以看到這些都是從第三方 ROM 里提取出來的框杜。

image

因為 Google 官方早在 WebView 40 的時候就已經(jīng)將包名換成 com.google.android.webview了,最新的是 72.xxx 袖肥,我翻了 15 頁才找到最早改名并獨立出來的那個版本??咪辱。

image

3、通過 ADB 替換系統(tǒng) WebView

連接到目標(biāo)機器

adb connect 192.168.18.235

獲取 su 權(quán)限

adb shell

su

重新掛載 /system 目錄獲取寫入權(quán)限

mount -o rw,remount /system

移動原目錄下的 webview.apk 到備份目錄

image

這里原目錄下的文件分別有 /webview/webview.apk/webview/lib/arm/libwebviewchromium.so椎组,備份原目錄:

cd /system/app
mv webview/ webview-b/
mkdir -p webview/lib/arm/

將準(zhǔn)備好的安裝包中的 .so 文件提取出來

這里很簡單油狂,文件后綴 .apk 直接改成 .zip 然后解壓縮,復(fù)制出libwebviewchromium.so 即可

image

上傳文件到 /system/app/webview

先上傳文件到設(shè)備 /sdcard ,然后執(zhí)行如下命令移動過去专筷,和原路徑以及原文件名保持一致即可弱贼。

mv /sdcard/xxx.apk /system/app/webview/webview.apk

mv /sdcard/xxx.so /system/app/webview/lib/arm/libwebviewchromium.so

設(shè)置目錄執(zhí)行權(quán)限

cd /system/app/
chmod 777 webview/*

重啟設(shè)備

adb reboot

4、結(jié)語

如上一頓操作磷蛹,其實也沒什么難度吮旅,主要的坑就是包名一致的問題,還有一些系統(tǒng)目錄訪問權(quán)限之類的問題味咳,之前網(wǎng)上搜了好多哩陕,都說不 root 沒法換嘉抒,或者換了會出問題,root 權(quán)限其實就是為了訪問和寫入系統(tǒng)目錄,通過重新掛載就解決了箕慧,換了會崩掉的問題其實就是歷史遺留問題,從 4.x 過度到 5.0 WebView 獨立了预明,所以包名變了状知,或者是 ROM 定制方不按套路來導(dǎo)致?lián)Q上去的 WebView 不被系統(tǒng)識別,只要找到合適的包就解決了堡纬。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末聂受,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子烤镐,更是在濱河造成了極大的恐慌蛋济,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炮叶,死亡現(xiàn)場離奇詭異碗旅,居然都是意外死亡,警方通過查閱死者的電腦和手機镜悉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門祟辟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人侣肄,你說我怎么就攤上這事旧困。” “怎么了稼锅?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵吼具,是天一觀的道長。 經(jīng)常有香客問我矩距,道長拗盒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任剩晴,我火速辦了婚禮锣咒,結(jié)果婚禮上侵状,老公的妹妹穿的比我還像新娘。我一直安慰自己毅整,他們只是感情好趣兄,可當(dāng)我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著悼嫉,像睡著了一般艇潭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上戏蔑,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天蹋凝,我揣著相機與錄音,去河邊找鬼总棵。 笑死鳍寂,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的情龄。 我是一名探鬼主播迄汛,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼骤视!你這毒婦竟也來了鞍爱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤专酗,失蹤者是張志新(化名)和其女友劉穎睹逃,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體祷肯,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡沉填,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了躬柬。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拜轨。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖允青,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情卵沉,我是刑警寧澤颠锉,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站史汗,受9級特大地震影響琼掠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜停撞,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一瓷蛙、第九天 我趴在偏房一處隱蔽的房頂上張望悼瓮。 院中可真熱鬧,春花似錦艰猬、人聲如沸横堡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽命贴。三九已至,卻和暖如春食听,著一層夾襖步出監(jiān)牢的瞬間胸蛛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工樱报, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留葬项,地道東北人。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓迹蛤,卻偏偏與公主長得像民珍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子笤受,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,629評論 2 354