
Android System WebView Canary 安卓最新版v134.0.6984.0
軟件類(lèi)型: 系統(tǒng)安全 | 軟件大小: 4.85MB
軟件語(yǔ)言: 簡(jiǎn)體中文 | 更新時(shí)間: 2025-01-27
Android System WebView Canary也就是WebView金絲雀版本,在這里大家可以體驗(yàn)到最新的功能,但是有點(diǎn)不穩(wěn)定,可能會(huì)出現(xiàn)一些小bug之類(lèi)的。以前的人下礦洞的時(shí)候都會(huì)帶金絲雀,如果金絲雀不行了,那么大家就會(huì)馬上撤離,因此金絲雀現(xiàn)在都用來(lái)命名先行版。由chrome提供支持的系統(tǒng)組件,它允許android應(yīng)用程序顯示web內(nèi)容。此組件已預(yù)安裝在您的設(shè)備上,應(yīng)保持最新?tīng)顟B(tài),以確保您擁有最新的安全更新和其他錯(cuò)誤修復(fù)。webview是一個(gè)可視化的組件,是作為原生APP的視覺(jué)部分。可以?xún)?nèi)嵌在移動(dòng)端,實(shí)現(xiàn)前端的混合式開(kāi)發(fā),大多數(shù)混合式開(kāi)發(fā)框架都是基于WebView模式進(jìn)行二次開(kāi)發(fā)的。比如:APIcloud、uni-app等等的框架。
軟件特色
一、play商店里經(jīng)常提示更新,是因?yàn)樵腶ndroid系統(tǒng)webview和谷歌瀏覽器是單獨(dú)管理的,谷歌對(duì)android系統(tǒng)webview提供單獨(dú)升級(jí)。
二、國(guó)內(nèi)的應(yīng)用商城從來(lái)都不更新,一是因?yàn)椋瑖?guó)內(nèi)手機(jī)上的瀏覽器大都自己內(nèi)置了webview,因此升級(jí)瀏覽器時(shí)自動(dòng)會(huì)更新瀏覽器內(nèi)置的webview(例如:UC瀏覽器、QQ瀏覽器、華為瀏覽器等),只有一些很小眾的輕量級(jí)瀏覽器才直接使用系統(tǒng)的webview;
三、國(guó)內(nèi)手機(jī)的系統(tǒng)webview一般會(huì)隨著各自手機(jī)廠商的系統(tǒng)軟件更新一起升級(jí)。
軟件功能
1、系統(tǒng)組件
2、組件安裝
3、插件安裝
4、網(wǎng)頁(yè)測(cè)試
軟件優(yōu)勢(shì)
1、Android開(kāi)發(fā)時(shí)要經(jīng)常用到webview,小編提供的這款A(yù)ndroid System WebView Canary更新比較頻繁,比較適合開(kāi)發(fā)者使用!
2、Android System WebView Canary是由 Chrome 提供支持的系統(tǒng)組件,可讓 Android 應(yīng)用顯示網(wǎng)頁(yè)內(nèi)容。
3、您的設(shè)備已預(yù)安裝該組件,并會(huì)持續(xù)更新這項(xiàng)組件,以確保您獲取最新的安全更新和其他問(wèn)題修復(fù)方法。
幾個(gè)常見(jiàn)功能使用方法
android的WebView組件可以說(shuō)是相當(dāng)?shù)膹?qiáng)大,現(xiàn)將項(xiàng)目中經(jīng)常用到的幾個(gè)功能總結(jié)如下:
一、背景設(shè)置
WebView.setBackgroundColor(0);//先設(shè)置背景色為transparent
WebView.setBackgroundResource(R.drawable.yourImage);//然后設(shè)置背景圖片
二、獲得WebView網(wǎng)頁(yè)加載初始化和完成事件
Android System WebView Canary步驟:
1、創(chuàng)建一個(gè)自己的WebViewClient(繼承 WebViewClient 類(lèi))如WebViewClient
2、重載里面的 onPageFinished(WebView view, String url)方法,(webview加載完成會(huì)調(diào)用這個(gè)方法),這個(gè)方法放自己想要做的事情,在webview加載完成以后
3、關(guān)聯(lián)你自己的webviewclient 與 webview 通過(guò) 這個(gè)方法:webView.setWebViewClient( new WebViewClient();
如果需要監(jiān)視加載進(jìn)度的,需要?jiǎng)?chuàng)建一個(gè)自己的WebChromeClient類(lèi),并重載方法onProgressChanged,再
Android System WebView Canary布局文件:
要注意的是,其中的webView的一系列用法,比如 webView.getSettings()。setJavaScriptEnabled(true);設(shè)置可以使用javscript;
等等,具體參考API
而進(jìn)度條的使用是在new出一個(gè)setWebChromeClient后,可以在內(nèi)部類(lèi)中寫(xiě) onProgressChanged事件
總結(jié):在WebView的設(shè)計(jì)中,不是什么事都要WebView類(lèi)干的,有些雜事是分給其他人的,這樣WebView專(zhuān)心干好自己的解析、渲染工作就行了。
WebViewClient就是幫助WebView處理各種通知、請(qǐng)求事件的,具體來(lái)說(shuō)包括:
onLoadResource
onPageStart
onPageFinish
onReceiveError
onReceivedHttpAuthRequest
WebChromeClient是輔助WebView處理Javascript的對(duì)話(huà)框,網(wǎng)站圖標(biāo),網(wǎng)站title,加載進(jìn)度等
onCloseWindow(關(guān)閉WebView)
onCreateWindow()
onJsAlert (WebView上alert是彈不出來(lái)東西的,需要定制你的WebChromeClient處理彈出)
onJsPrompt
onJsConfirm
onProgressChanged
onReceivedIcon
onReceivedTitle
具體實(shí)現(xiàn)與Chromium渲染引擎啟動(dòng)過(guò)程
這里以Android 8.0的源碼為來(lái)說(shuō)明,是先找到WebView的真正的構(gòu)造函數(shù):
這個(gè)構(gòu)造函數(shù)會(huì)調(diào)用另外一個(gè)成員函數(shù)ensureProviderCreated()確保Chromium動(dòng)態(tài)庫(kù)已經(jīng)加載。在Chromium動(dòng)態(tài)庫(kù)已經(jīng)加載的情況下,WebView類(lèi)的成員函數(shù)ensureProviderCreated還會(huì)創(chuàng)建一個(gè)WebViewProvider對(duì)象,并且保存在成員變量mProvider中。這個(gè)WebViewProvider其實(shí)才是真正用來(lái)實(shí)現(xiàn)WebView的功能的幕后大佬。上訴那些Android WebView主要的方式基本都是通過(guò)mProvider來(lái)實(shí)現(xiàn)的,例如loadUrl(String url)等方法。
有了這個(gè)mProvider之后,WebView類(lèi)的構(gòu)造函數(shù)就會(huì)繼續(xù)調(diào)用mProvider.init(javaScriptInterfaces, privatepowsing)啟動(dòng)網(wǎng)頁(yè)渲染引擎。對(duì)于基于Chromium實(shí)現(xiàn)的WebView來(lái)說(shuō),它使用的WebViewProvider是一個(gè)WebViewChromium對(duì)象。當(dāng)這個(gè)WebViewChromium對(duì)象的成員函數(shù)init被調(diào)用的時(shí)候,它就會(huì)啟動(dòng)Chromium的網(wǎng)頁(yè)渲染引擎。
所以,我們接下來(lái)看一下ensureProviderCreated的實(shí)現(xiàn):
WebView類(lèi)的成員函數(shù)ensureProviderCreated首先調(diào)用成員函數(shù)checkThread確保它是在WebView的創(chuàng)建線程中調(diào)用的,接下來(lái)又會(huì)判斷成員變量mProvider的值是否為null。如果為null,就表示它還沒(méi)有當(dāng)前創(chuàng)建的WebView創(chuàng)建過(guò)Provider。在這種情況下,它首先會(huì)調(diào)用成員函數(shù)getFactory獲得一個(gè)WebViewFactory。有了這個(gè)WebViewFactory之后,就可以調(diào)用它的成員函數(shù)createWebView創(chuàng)建一個(gè)WebViewProvider。
接下來(lái)我們?cè)倏匆幌耮etFactory()方法以及它的實(shí)現(xiàn):
getFactory返回的WebView Factory是通過(guò)調(diào)用WebViewFactory類(lèi)的靜態(tài)成員函數(shù)getProvider獲得的,getProvider首先是判斷靜態(tài)成員變量sProviderInstance的值是否等于null。如果等于null,那么就說(shuō)明當(dāng)前的App進(jìn)程還沒(méi)有加載過(guò)Chromium動(dòng)態(tài)庫(kù)。在這種情況下,就需要加載Chromium動(dòng)態(tài)庫(kù),并且創(chuàng)建一個(gè)WebView Factory,保存在靜態(tài)成員變量sProviderInstance。接下來(lái)我們就先分析Chromium動(dòng)態(tài)庫(kù)的加載過(guò)程,然后再分析WebView Factory的創(chuàng)建過(guò)程。
Android System WebView Canary加載Chromium動(dòng)態(tài)庫(kù)是通過(guò)調(diào)用WebViewFactory類(lèi)的靜態(tài)成員函數(shù)loadNativeLipary實(shí)現(xiàn)的:
loadNativeLipary首先會(huì)調(diào)用成員函數(shù)getWebViewNativeLiparyPaths獲得要加載的Chromium動(dòng)態(tài)庫(kù)的文件路徑,然后再調(diào)用另外一個(gè)靜態(tài)成員函數(shù)nativeLoadWithRelroFile對(duì)它進(jìn)行加載。在加載的時(shí)候,會(huì)指定一個(gè)Chromium GNURELRO Section文件。這個(gè)Chromium GNURELRO Section文件是系統(tǒng)啟動(dòng)時(shí)候,通過(guò)啟動(dòng)一個(gè)臨時(shí)進(jìn)程生成的。其中靜態(tài)成員函數(shù)nativeLoadWithRelroFile是一個(gè)JNI方法,它由C++層的函數(shù)LoadWithRelroFile實(shí)現(xiàn):
LoadWithRelroFile判斷自己是32位還是64位的實(shí)現(xiàn),然后從參數(shù)lib32和lib64中選擇對(duì)應(yīng)的Chromium動(dòng)態(tài)庫(kù)進(jìn)行加載。
這個(gè)加載過(guò)程是通過(guò)調(diào)用另外一個(gè)函數(shù)DoLoadWithRelroFile實(shí)現(xiàn)的:
函數(shù)DoLoadWithRelroFile的實(shí)現(xiàn)是通過(guò)Linker導(dǎo)出的函數(shù)androiddlopenext在Zyogote進(jìn)程保留的地址空間中加載Chromium動(dòng)態(tài)庫(kù)的。注意,App進(jìn)程是Zygote進(jìn)程fork出來(lái)的,因此它同樣會(huì)獲得Zygote進(jìn)程預(yù)留的地址空間。不過(guò),函數(shù)DoLoadWithRelroFile會(huì)將告訴函數(shù)androiddlopenext在加載Chromium動(dòng)態(tài)庫(kù)的時(shí)候,將參數(shù)relro描述的Chromium GNURELRO Section文件內(nèi)存映射到內(nèi)存來(lái),并且代替掉已經(jīng)加載的Chromium動(dòng)態(tài)庫(kù)的GNURELRO Section。這是通過(guò)將指定一個(gè)ANDROIDDLEXTUSERELRO標(biāo)志實(shí)現(xiàn)的。之所以可以這樣做,是因?yàn)閰?shù)relro描述的Chromium GNURELRO Section文件對(duì)應(yīng)的Chromium動(dòng)態(tài)庫(kù)的加載地址與當(dāng)前App進(jìn)程加載的Chromium動(dòng)態(tài)庫(kù)的地址一致。只要兩個(gè)相同的動(dòng)態(tài)庫(kù)在兩個(gè)不同的進(jìn)程中的加載地址一致,它們的鏈接和重定位信息就是完全一致的,因此就可以通過(guò)文件內(nèi)存映射的方式進(jìn)行共享。共享之后,就可以達(dá)到節(jié)省內(nèi)存的目的了。
這一步執(zhí)行完成之后,App進(jìn)程就加載完成Chromium動(dòng)態(tài)庫(kù)了。回到前面分析的WebViewFactory類(lèi)的靜態(tài)成員函數(shù)getProvider,它接下來(lái)繼續(xù)創(chuàng)建一個(gè)WebViewFactory。這個(gè)WebViewFactory以后就可以用來(lái)創(chuàng)建WebViewProvider。
WebViewFactory類(lèi)的靜態(tài)成員函數(shù)getProvider首先要確定要?jiǎng)?chuàng)建的WebView Factory的類(lèi)型。這個(gè)類(lèi)型是通過(guò)調(diào)用另外一個(gè)靜態(tài)成員函數(shù)getFactoryClass獲得的:
從這里可以看到,WebViewFactory類(lèi)的靜態(tài)成員函數(shù)getFactoryClass返回的WebView Factory的類(lèi)型為com.android.webview.chromium.WebViewChromiumFactoryProviderForO。這個(gè)com.android.webview.chromium.WebViewChromiumFactoryProviderForO類(lèi)是由前面提到的WebView Package提供的。這意味著WebViewFactory類(lèi)的靜態(tài)成員函數(shù)getProvider創(chuàng)建的WebView Factory是一個(gè)WebViewChromiumFactoryProvider對(duì)象:
WebViewChromiumFactoryProvider類(lèi)的構(gòu)造函數(shù)會(huì)調(diào)用AwpowserProcess類(lèi)的靜態(tài)成員函數(shù)loadLipary對(duì)前面加載的Chromium動(dòng)態(tài)庫(kù)進(jìn)行初始化:
AwpowserProcess類(lèi)的靜態(tài)成員函數(shù)loadLipary又調(diào)用LiparyLoader類(lèi)的靜態(tài)成員函數(shù)loadNow對(duì)前面加載的Chromium動(dòng)態(tài)庫(kù)進(jìn)行初始化:
LiparyLoader類(lèi)的靜態(tài)成員函數(shù)loadNow又調(diào)用另外一個(gè)重載版本的靜態(tài)成員函數(shù)loadNow對(duì)前面加載的Chromium動(dòng)態(tài)庫(kù)進(jìn)行初始化:
LiparyLoader類(lèi)重載版本的靜態(tài)成員函數(shù)loadNow又調(diào)用另外一個(gè)靜態(tài)成員函數(shù)loadAlreadyLocked對(duì)前面加載的Chromium動(dòng)態(tài)庫(kù)進(jìn)行初始化:
由于并不是所有的系統(tǒng)都支持在加載動(dòng)態(tài)庫(kù)時(shí),以文件內(nèi)存映射的方式代替它的GNURELRO Section,因此Chromium自己提供了一個(gè)Linker。通過(guò)這個(gè)Linker加載動(dòng)態(tài)庫(kù)時(shí),能夠以文件內(nèi)存映射的方式代替要加載的動(dòng)態(tài)庫(kù)的GNURELRO Section,也就是實(shí)現(xiàn)前面提到的函數(shù)androiddlopenext的功能。在高于Android 5.0中,由于系統(tǒng)已經(jīng)提供了函數(shù)androiddlopenext,因此,Chromium就不會(huì)使用自己的Linker加載動(dòng)態(tài)庫(kù),而是使用Android系統(tǒng)提供的Linker來(lái)加載動(dòng)態(tài)庫(kù)。通過(guò)調(diào)用System類(lèi)的靜態(tài)成員函數(shù)loadLipary即可以使用系統(tǒng)提供的Linker來(lái)加載動(dòng)態(tài)庫(kù)。LiparyLoader類(lèi)的靜態(tài)成員函數(shù)loadAlreadyLocked要加載的動(dòng)態(tài)庫(kù)由NativeLiparies類(lèi)的靜態(tài)成員變量LIpARIES指定:
從這里可以知道,LiparyLoader類(lèi)的靜態(tài)成員函數(shù)loadAlreadyLocked要加載的動(dòng)態(tài)庫(kù)就是Chromium動(dòng)態(tài)庫(kù)。這個(gè)Chromium動(dòng)態(tài)庫(kù)前面已經(jīng)加載過(guò)了,因此這里通過(guò)調(diào)用System類(lèi)的靜態(tài)成員函數(shù)loadLipary再加載時(shí),僅僅是只會(huì)觸發(fā)它導(dǎo)出的函數(shù)JNIOnLoad被調(diào)用,而不會(huì)重新被加載。Chromium動(dòng)態(tài)庫(kù)導(dǎo)出的JNIOnLoad被調(diào)用的時(shí)候,Chromium動(dòng)態(tài)庫(kù)就會(huì)執(zhí)行初始化工作:
其中的一個(gè)初始化操作是給Chromium的Content層設(shè)置一個(gè)類(lèi)型為AwMainDelegate的Main Delegate。這個(gè)AwMainDelegate實(shí)現(xiàn)在Chromium的androidwebview模塊中。Android WebView是通過(guò)Chromium的androidwebview模塊加載和渲染網(wǎng)頁(yè)的。Chromium加載和渲染網(wǎng)頁(yè)的功能又是實(shí)現(xiàn)在Content層的,因此,Chromium的androidwebview模塊又要通過(guò)Content層實(shí)現(xiàn)加載和渲染網(wǎng)頁(yè)功能。這樣,Chromium的androidwebview模塊就可以設(shè)置一個(gè)Main Delegate給Content層,以便它們可以互相通信。給Chromium的Content層設(shè)置一個(gè)Main Delegate是通過(guò)調(diào)用函數(shù)SetContentMainDelegate實(shí)現(xiàn)的:
從前面的分析可以知道,參數(shù)delegate指向的是一個(gè)AwMainDelegate對(duì)象,這個(gè)AwMainDelegate對(duì)象會(huì)被函數(shù)SetContentMainDelegate保存在全局變量gcontentmain_delegate中。這一步執(zhí)行完成后,Chromium動(dòng)態(tài)庫(kù)就在App進(jìn)程中加載完畢,并且也已經(jīng)完成了初始化工作。與此同時(shí),系統(tǒng)也為App進(jìn)程創(chuàng)建了一個(gè)類(lèi)型為WebViewChromiumFactoryProvider的WebViewFactory。回到前面分析的WebView類(lèi)的成員函數(shù)ensureProviderCreated中,這時(shí)候就它會(huì)通過(guò)調(diào)用上述類(lèi)型為WebViewChromiumFactoryProvider的WebViewFactory的成員函數(shù)createWebView為當(dāng)前創(chuàng)建的WebView創(chuàng)建一個(gè)WebView Provider:
WebViewChromiumFactoryProvider類(lèi)的成員函數(shù)createWebView創(chuàng)建的是一個(gè)類(lèi)型為WebViewChromium的WebView Provider。這個(gè)WebView Provider將會(huì)返回給WebView類(lèi)的成員函數(shù)ensureProviderCreated。WebView類(lèi)的成員函數(shù)ensureProviderCreated再將該WebView Provider保存在成員變量mProvider中。這樣,正在創(chuàng)建的WebView就獲得了一個(gè)類(lèi)型為WebViewChromium的WebView Provider。以后通過(guò)這個(gè)WebView Provider,就可以通過(guò)Chromium來(lái)加載和渲染網(wǎng)頁(yè)了。
推薦理由
1、Webview是chrome瀏覽器的內(nèi)核,所有安卓手機(jī)必須預(yù)裝,用于顯示網(wǎng)頁(yè),手機(jī)的APP可以調(diào)用它顯示網(wǎng)頁(yè)而不需要瀏覽器
2、android system webview是一項(xiàng)由 Chrome 提供支持的系統(tǒng)組件,使 Android 應(yīng)用能夠顯示網(wǎng)頁(yè)內(nèi)容。
3、該組件已經(jīng)預(yù)裝在您的設(shè)備上,您需要及時(shí)更新該組件,以確保系統(tǒng)擁有最新的安全更新,并修正其他錯(cuò)誤。
androidsystemwebview怎么用
安卓系統(tǒng)內(nèi)置webkit內(nèi)核瀏覽器的一個(gè)組件,組件名稱(chēng)為Webview。
WebView是安卓系統(tǒng)中一款基于webkit引擎、展現(xiàn)web頁(yè)面的控件。 Android的Webview在低版本和高版本采用了不同的webkit版本內(nèi)核,在版本更新到4.4后直接使用了Chrome版本。
WebView能夠?qū)eb頁(yè)面進(jìn)行i顯示和渲染,可以直接使用html文件(網(wǎng)絡(luò)上或本地assets中)作布局,更可以可和JavaScript交互調(diào)用。
WebView控件功能強(qiáng)大,除了具有一般View的屬性和設(shè)置外,還可以對(duì)url請(qǐng)求、頁(yè)面加載、渲染、頁(yè)面交互進(jìn)行強(qiáng)大的處理。
android system webview可以刪除嗎
不能
“webview是安卓的一個(gè)瀏覽器內(nèi)核,手機(jī)上的應(yīng)用可以通過(guò)調(diào)用它來(lái)直接顯示網(wǎng)頁(yè)內(nèi)容,這次更新主要是為了解決一些應(yīng)用不能正常顯示網(wǎng)頁(yè)內(nèi)容的問(wèn)題。
特別說(shuō)明
軟件信息
- 廠商:Google LLC
- 包名:com.google.android.webview.canary
- MD5:F72B74BD6F493412860AB48DCE21A361
隨著人們手機(jī)使用頻率的上升,手機(jī)瀏覽器的重要程度也在不斷上升。好的瀏覽器能幫你更快的搜索到想要的結(jié)果,提高工作效率,下面小編帶來(lái)一些好用的手機(jī)瀏覽器,感興趣的話(huà)就快來(lái)下載使用吧!
男生必備的瀏覽器大全之中為各位用戶(hù)們帶來(lái)了諸多好用的手機(jī)瀏覽器應(yīng)用,有需要的用戶(hù)快來(lái)了解一下吧。
相關(guān)下載
相關(guān)閱讀
網(wǎng)友評(píng)論
-
谷歌查找我的設(shè)備
系統(tǒng)安全 |11.7MB |01-23
5 -
悅動(dòng)瀏覽器
新聞閱讀 |767.54KB |01-16
5 -
夸克高考志愿填報(bào)2025
生活服務(wù) |116.65MB |01-15
5
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
CC魔盒7