lspatch免root版官方版(開發(fā)工具)v0.6安卓版
6.87MB / 05-27
快捷開發(fā)者助手 for Android V1.2 安卓手機版
12.3MB / 09-17
webcat編輯器下載 v3.04 安卓版
6.49MB / 03-16
android開發(fā)工具箱 v3.1.1 安卓版
20.93MB / 09-13
安卓反編譯開發(fā)工具 Android開發(fā)助手 v6.9.9-cs 安卓手機版
6.7MB / 08-15
AIDE集成開發(fā)環(huán)境(AIDE Android Java IDE) v3.2.2 安卓漢化版
40.07MB / 02-06
萬象小組件(原會話微件) v5.3.620250312 安卓版
26.98MB / 03-22
Android System WebView(Android組件開發(fā)) v130.0.6723.40 安卓
225.65M / 10-16
Super Widget(桌面小組件助手)v1.0.0安卓版
38.73MB / 10-07
小圓點(懸浮功能集助手) for Android v1.2.0.4 安卓手機版
37.40MB / 05-29
-
萬能格式轉(zhuǎn)換器(文件格式轉(zhuǎn)換軟件) v1.2.7 安卓版 系統(tǒng)工具 / 67.2MB
-
調(diào)試全能王(網(wǎng)絡(luò)/串口調(diào)試)v1.3.51.231112 安卓手機版 系統(tǒng)工具 / 26.8MB
-
文件傳輸寶 V1.0.3 安卓版 系統(tǒng)工具 / 18MB
-
RS文件瀏覽器 V1.0.3 安卓版 系統(tǒng)工具 / 34.1.MB
-
猿爸爸上網(wǎng)守護(手機上網(wǎng)管理軟件) v2.2.3 安卓版 系統(tǒng)工具 / 27.64MB
-
-
雷電清理(系統(tǒng)垃圾清理軟件 )v1.8.3 安卓手機版 系統(tǒng)工具 / 27.57MB
-
-
快捷指令(快捷方式設(shè)置工具) v2.0.8 安卓版 系統(tǒng)工具 / 9.62MB
-
二維碼生成大師(二維碼制作軟件) v2.0.4 安卓版 系統(tǒng)工具 / 8.02MB
詳情介紹
Android System WebView是Android操作系統(tǒng)中的一個組件,它允許Android應(yīng)用程序在應(yīng)用程序的用戶界面內(nèi)顯示網(wǎng)頁內(nèi)容。它充當(dāng)了一個Web瀏覽器引擎,負責(zé)渲染網(wǎng)頁、執(zhí)行JavaScript代碼和處理其他與Web相關(guān)的功能,在Android 7.0(Nougat)之前,WebView作為一個單獨的應(yīng)用程序捆綁在一起,并通過Google Play商店進行更新,從Android 7.0開始,WebView成為一個系統(tǒng)組件,通過常規(guī)系統(tǒng)更新進行更新。
許多Android應(yīng)用程序,特別是那些包含網(wǎng)頁內(nèi)容或基于Web的功能的應(yīng)用程序,依賴于WebView來顯示網(wǎng)頁或與Web服務(wù)進行交互。通過利用WebView,開發(fā)人員可以無縫地在其應(yīng)用程序中嵌入網(wǎng)頁內(nèi)容,從而創(chuàng)建更加集成的用戶體驗。通過WebView顯示的Web內(nèi)容通?;谠O(shè)備上默認的Web瀏覽器使用的相同渲染引擎,例如Google Chrome或Android瀏覽器(在Chrome成為默認瀏覽器之前使用的瀏覽器)。這樣可以確保開發(fā)人員在不同的應(yīng)用程序中提供一致的Web體驗,并確保與Web標準和技術(shù)的兼容性。
軟件介紹
webview是一個可視化的組件,是作為原生APP的視覺部分??梢詢?nèi)嵌在移動端,實現(xiàn)前端的混合式開發(fā),大多數(shù)混合式開發(fā)框架都是基于WebView模式進行二次開發(fā)的。比如:APIcloud、uni-app等等的框架。
【webview入門知識】
我們通常是用瀏覽器來瀏覽網(wǎng)頁,你很清楚的知道你正在使用瀏覽器,要么是PC客戶端,要么是手機上的app。但是webview是一個嵌入式的瀏覽器,是嵌入在原生應(yīng)用中的,你可能都意識不到你在用瀏覽器。
傳統(tǒng)瀏覽器分為兩個部分,UI(地址欄、導(dǎo)航欄)和瀏覽器引擎。webview就是原生應(yīng)用中的瀏覽器引擎。
webview只是一個可視化的組件,是作為原生APP的視覺部分。
用webview展示的內(nèi)容是不需要存儲在本地的,可以直接從服務(wù)器獲取。
這種靈活性打開了瀏覽器端的web應(yīng)用和希望展示在原生應(yīng)用中的web應(yīng)用代碼直接可重用的世界。
運行在webview中的JS代碼有能力調(diào)用原生的系統(tǒng)API,沒有傳統(tǒng)瀏覽器沙箱的限制。
沙箱的存在是因為,你永遠不能完全信任加載的web內(nèi)容,所以不能允許它調(diào)用原生的系統(tǒng)API。而在webview中開發(fā)人員通??梢酝耆刂萍虞d的內(nèi)容,惡意代碼進入并在設(shè)備上造成混亂的可能性很低。
在webview中,JS代碼可以跟原生應(yīng)用代碼相互通信,也可以調(diào)用原生API集成酷炫的系統(tǒng)級功能,如傳感器、存儲、日歷、聯(lián)系人等。
【webview的用法】
作為APP內(nèi)置瀏覽器,顯示鏈接的內(nèi)容。
用來顯示廣告。
完全承載APP內(nèi)的所有交互。從技術(shù)角度看這些仍是原生應(yīng)用,但它做的唯一原生操作就是托管webview,這種應(yīng)用被稱為混合應(yīng)用。從部署和更新的角度來看,混合應(yīng)用非常方便。
作為原生應(yīng)用的擴展。許多原生應(yīng)用會提供加載項或擴展程序來擴展其功能,由于web技術(shù)的簡單性和強大,這些加載項和擴展通常以HTML、CSS、JS而不是C++、C#或其他來構(gòu)建。
【webview的精髓】
webview其實只是一個再應(yīng)用中設(shè)置好位置和大小的瀏覽器,而且不會放置任何花哨的UI。
在大多數(shù)情況下,除非你調(diào)用了原生API,否則不必在webview中專門測試web應(yīng)用。
使用方法
android的WebView組件可以說是相當(dāng)?shù)膹姶?,現(xiàn)將項目中經(jīng)常用到的幾個功能總結(jié)如下:
【背景設(shè)置】
WebView.setBackgroundColor(0);//先設(shè)置背景色為transparent
WebView.setBackgroundResource(R.drawable.yourImage);//然后設(shè)置背景圖片
【獲得WebView網(wǎng)頁加載初始化和完成事件】
步驟:
創(chuàng)建一個自己的WebViewClient(繼承 WebViewClient 類)如WebViewClient
重載里面的 onPageFinished(WebView view, String url)方法,(webview加載完成會調(diào)用這個方法),這個方法放自己想要做的事情,在webview加載完成以后
關(guān)聯(lián)你自己的webviewclient 與 webview 通過 這個方法:webView.setWebViewClient( new WebViewClient();
如果需要監(jiān)視加載進度的,需要創(chuàng)建一個自己的WebChromeClient類,并重載方法onProgressChanged,再
布局文件:
要注意的是,其中的webView的一系列用法,比如 webView.getSettings()。setJavaScriptEnabled(true);設(shè)置可以使用javscript;
等等,具體參考API
而進度條的使用是在new出一個setWebChromeClient后,可以在內(nèi)部類中寫 onProgressChanged事件
總結(jié):在WebView的設(shè)計中,不是什么事都要WebView類干的,有些雜事是分給其他人的,這樣WebView專心干好自己的解析、渲染工作就行了。
WebViewClient就是幫助WebView處理各種通知、請求事件的,具體來說包括:
onLoadResource
onPageStart
onPageFinish
onReceiveError
onReceivedHttpAuthRequest
WebChromeClient是輔助WebView處理Javascript的對話框,網(wǎng)站圖標,網(wǎng)站title,加載進度等
onCloseWindow(關(guān)閉WebView)
onCreateWindow()
onJsAlert (WebView上alert是彈不出來東西的,需要定制你的WebChromeClient處理彈出)
onJsPrompt
onJsConfirm
onProgressChanged
onReceivedIcon
onReceivedTitle
【Android WebView的具體實現(xiàn)與Chromium渲染引擎啟動過程】
這里以Android 8.0的源碼為來說明,是先找到WebView的真正的構(gòu)造函數(shù):
這個構(gòu)造函數(shù)會調(diào)用另外一個成員函數(shù)ensureProviderCreated()確保Chromium動態(tài)庫已經(jīng)加載。在Chromium動態(tài)庫已經(jīng)加載的情況下,WebView類的成員函數(shù)ensureProviderCreated還會創(chuàng)建一個WebViewProvider對象,并且保存在成員變量mProvider中。這個WebViewProvider其實才是真正用來實現(xiàn)WebView的功能的幕后大佬。上訴那些Android WebView主要的方式基本都是通過mProvider來實現(xiàn)的,例如loadUrl(String url)等方法。
有了這個mProvider之后,WebView類的構(gòu)造函數(shù)就會繼續(xù)調(diào)用mProvider.init(javaScriptInterfaces, privatepowsing)啟動網(wǎng)頁渲染引擎。對于基于Chromium實現(xiàn)的WebView來說,它使用的WebViewProvider是一個WebViewChromium對象。當(dāng)這個WebViewChromium對象的成員函數(shù)init被調(diào)用的時候,它就會啟動Chromium的網(wǎng)頁渲染引擎。
所以,我們接下來看一下ensureProviderCreated的實現(xiàn):
WebView類的成員函數(shù)ensureProviderCreated首先調(diào)用成員函數(shù)checkThread確保它是在WebView的創(chuàng)建線程中調(diào)用的,接下來又會判斷成員變量mProvider的值是否為null。如果為null,就表示它還沒有當(dāng)前創(chuàng)建的WebView創(chuàng)建過Provider。在這種情況下,它首先會調(diào)用成員函數(shù)getFactory獲得一個WebViewFactory。有了這個WebViewFactory之后,就可以調(diào)用它的成員函數(shù)createWebView創(chuàng)建一個WebViewProvider。
接下來我們再看一下getFactory()方法以及它的實現(xiàn):
getFactory返回的WebView Factory是通過調(diào)用WebViewFactory類的靜態(tài)成員函數(shù)getProvider獲得的,getProvider首先是判斷靜態(tài)成員變量sProviderInstance的值是否等于null。如果等于null,那么就說明當(dāng)前的App進程還沒有加載過Chromium動態(tài)庫。在這種情況下,就需要加載Chromium動態(tài)庫,并且創(chuàng)建一個WebView Factory,保存在靜態(tài)成員變量sProviderInstance。接下來我們就先分析Chromium動態(tài)庫的加載過程,然后再分析WebView Factory的創(chuàng)建過程。
加載Chromium動態(tài)庫是通過調(diào)用WebViewFactory類的靜態(tài)成員函數(shù)loadNativeLipary實現(xiàn)的:
loadNativeLipary首先會調(diào)用成員函數(shù)getWebViewNativeLiparyPaths獲得要加載的Chromium動態(tài)庫的文件路徑,然后再調(diào)用另外一個靜態(tài)成員函數(shù)nativeLoadWithRelroFile對它進行加載。在加載的時候,會指定一個Chromium GNURELRO Section文件。這個Chromium GNURELRO Section文件是系統(tǒng)啟動時候,通過啟動一個臨時進程生成的。其中靜態(tài)成員函數(shù)nativeLoadWithRelroFile是一個JNI方法,它由C++層的函數(shù)LoadWithRelroFile實現(xiàn):
LoadWithRelroFile判斷自己是32位還是64位的實現(xiàn),然后從參數(shù)lib32和lib64中選擇對應(yīng)的Chromium動態(tài)庫進行加載。
這個加載過程是通過調(diào)用另外一個函數(shù)DoLoadWithRelroFile實現(xiàn)的:
函數(shù)DoLoadWithRelroFile的實現(xiàn)是通過Linker導(dǎo)出的函數(shù)androiddlopenext在Zyogote進程保留的地址空間中加載Chromium動態(tài)庫的。注意,App進程是Zygote進程fork出來的,因此它同樣會獲得Zygote進程預(yù)留的地址空間。不過,函數(shù)DoLoadWithRelroFile會將告訴函數(shù)androiddlopenext在加載Chromium動態(tài)庫的時候,將參數(shù)relro描述的Chromium GNURELRO Section文件內(nèi)存映射到內(nèi)存來,并且代替掉已經(jīng)加載的Chromium動態(tài)庫的GNURELRO Section。這是通過將指定一個ANDROIDDLEXTUSERELRO標志實現(xiàn)的。之所以可以這樣做,是因為參數(shù)relro描述的Chromium GNURELRO Section文件對應(yīng)的Chromium動態(tài)庫的加載地址與當(dāng)前App進程加載的Chromium動態(tài)庫的地址一致。只要兩個相同的動態(tài)庫在兩個不同的進程中的加載地址一致,它們的鏈接和重定位信息就是完全一致的,因此就可以通過文件內(nèi)存映射的方式進行共享。共享之后,就可以達到節(jié)省內(nèi)存的目的了。
這一步執(zhí)行完成之后,App進程就加載完成Chromium動態(tài)庫了?;氐角懊娣治龅腤ebViewFactory類的靜態(tài)成員函數(shù)getProvider,它接下來繼續(xù)創(chuàng)建一個WebViewFactory。這個WebViewFactory以后就可以用來創(chuàng)建WebViewProvider。
WebViewFactory類的靜態(tài)成員函數(shù)getProvider首先要確定要創(chuàng)建的WebView Factory的類型。這個類型是通過調(diào)用另外一個靜態(tài)成員函數(shù)getFactoryClass獲得的:
從這里可以看到,WebViewFactory類的靜態(tài)成員函數(shù)getFactoryClass返回的WebView Factory的類型為com.android.webview.chromium.WebViewChromiumFactoryProviderForO。這個com.android.webview.chromium.WebViewChromiumFactoryProviderForO類是由前面提到的WebView Package提供的。這意味著WebViewFactory類的靜態(tài)成員函數(shù)getProvider創(chuàng)建的WebView Factory是一個WebViewChromiumFactoryProvider對象:
WebViewChromiumFactoryProvider類的構(gòu)造函數(shù)會調(diào)用AwpowserProcess類的靜態(tài)成員函數(shù)loadLipary對前面加載的Chromium動態(tài)庫進行初始化:
AwpowserProcess類的靜態(tài)成員函數(shù)loadLipary又調(diào)用LiparyLoader類的靜態(tài)成員函數(shù)loadNow對前面加載的Chromium動態(tài)庫進行初始化:
LiparyLoader類的靜態(tài)成員函數(shù)loadNow又調(diào)用另外一個重載版本的靜態(tài)成員函數(shù)loadNow對前面加載的Chromium動態(tài)庫進行初始化:
LiparyLoader類重載版本的靜態(tài)成員函數(shù)loadNow又調(diào)用另外一個靜態(tài)成員函數(shù)loadAlreadyLocked對前面加載的Chromium動態(tài)庫進行初始化:
由于并不是所有的系統(tǒng)都支持在加載動態(tài)庫時,以文件內(nèi)存映射的方式代替它的GNURELRO Section,因此Chromium自己提供了一個Linker。通過這個Linker加載動態(tài)庫時,能夠以文件內(nèi)存映射的方式代替要加載的動態(tài)庫的GNURELRO Section,也就是實現(xiàn)前面提到的函數(shù)androiddlopenext的功能。在高于Android 5.0中,由于系統(tǒng)已經(jīng)提供了函數(shù)androiddlopenext,因此,Chromium就不會使用自己的Linker加載動態(tài)庫,而是使用Android系統(tǒng)提供的Linker來加載動態(tài)庫。通過調(diào)用System類的靜態(tài)成員函數(shù)loadLipary即可以使用系統(tǒng)提供的Linker來加載動態(tài)庫。LiparyLoader類的靜態(tài)成員函數(shù)loadAlreadyLocked要加載的動態(tài)庫由NativeLiparies類的靜態(tài)成員變量LIpARIES指定:
從這里可以知道,LiparyLoader類的靜態(tài)成員函數(shù)loadAlreadyLocked要加載的動態(tài)庫就是Chromium動態(tài)庫。這個Chromium動態(tài)庫前面已經(jīng)加載過了,因此這里通過調(diào)用System類的靜態(tài)成員函數(shù)loadLipary再加載時,僅僅是只會觸發(fā)它導(dǎo)出的函數(shù)JNIOnLoad被調(diào)用,而不會重新被加載。Chromium動態(tài)庫導(dǎo)出的JNIOnLoad被調(diào)用的時候,Chromium動態(tài)庫就會執(zhí)行初始化工作:
其中的一個初始化操作是給Chromium的Content層設(shè)置一個類型為AwMainDelegate的Main Delegate。這個AwMainDelegate實現(xiàn)在Chromium的androidwebview模塊中。Android WebView是通過Chromium的androidwebview模塊加載和渲染網(wǎng)頁的。Chromium加載和渲染網(wǎng)頁的功能又是實現(xiàn)在Content層的,因此,Chromium的androidwebview模塊又要通過Content層實現(xiàn)加載和渲染網(wǎng)頁功能。這樣,Chromium的androidwebview模塊就可以設(shè)置一個Main Delegate給Content層,以便它們可以互相通信。給Chromium的Content層設(shè)置一個Main Delegate是通過調(diào)用函數(shù)SetContentMainDelegate實現(xiàn)的:
從前面的分析可以知道,參數(shù)delegate指向的是一個AwMainDelegate對象,這個AwMainDelegate對象會被函數(shù)SetContentMainDelegate保存在全局變量gcontentmain_delegate中。這一步執(zhí)行完成后,Chromium動態(tài)庫就在App進程中加載完畢,并且也已經(jīng)完成了初始化工作。與此同時,系統(tǒng)也為App進程創(chuàng)建了一個類型為WebViewChromiumFactoryProvider的WebViewFactory。回到前面分析的WebView類的成員函數(shù)ensureProviderCreated中,這時候就它會通過調(diào)用上述類型為WebViewChromiumFactoryProvider的WebViewFactory的成員函數(shù)createWebView為當(dāng)前創(chuàng)建的WebView創(chuàng)建一個WebView Provider:
WebViewChromiumFactoryProvider類的成員函數(shù)createWebView創(chuàng)建的是一個類型為WebViewChromium的WebView Provider。這個WebView Provider將會返回給WebView類的成員函數(shù)ensureProviderCreated。WebView類的成員函數(shù)ensureProviderCreated再將該WebView Provider保存在成員變量mProvider中。這樣,正在創(chuàng)建的WebView就獲得了一個類型為WebViewChromium的WebView Provider。以后通過這個WebView Provider,就可以通過Chromium來加載和渲染網(wǎng)頁了。
更新日志
v130.0.6723.40版本
修復(fù)了一些小錯誤并進行了改進。
v128.0.6613.40版本
功能升級,提供優(yōu)質(zhì)服務(wù);
適配更新系統(tǒng)及機型;
修復(fù)已知問題,提升用戶體驗。
下載地址
其它版本
更多版本
人氣軟件
谷歌play服務(wù)框架(Google Play Services) v25.08.32-23 官方安卓
黃鳥抓包App2025最新版(抓包工具) v2.31.2 安卓版
gg修改器中文版(定制修改應(yīng)用神器) v101.1安卓版
dynamicSpot(模擬靈動島工具) v2.00 安卓版
AppShare(應(yīng)用分享軟件) v4.0.3 安卓版
playstation(PS應(yīng)用游戲商店) v25.1.0 安卓最新版
lsp框架2025最新版(LSPosed) v1.10.1 安卓版
谷歌搜索(網(wǎng)絡(luò)搜索軟件)官方版 v16.11.33 安卓手機版
UltData(手機數(shù)據(jù)恢復(fù)軟件) v3.4.9 安卓手機版
iVCam(手機用作電腦攝像頭軟件) v7.2.1 安卓版
相關(guān)文章
-
微軟新版Outlook將推出郵件分類快捷鍵及多項優(yōu)化:5月開始部署
微軟計劃在新版Outlook for Windows中引入郵件分類快捷功能,用戶可通過預(yù)設(shè)快捷鍵快速對郵件進行分類,從而大幅提升工作效率并優(yōu)化管理流程...
-
輕巧好用的macOS電源與充電狀態(tài)監(jiān)控神器推薦之Powerflow
Powerflow 是一款專門為 macOS 設(shè)計的應(yīng)用程序,它致力于幫助用戶實時監(jiān)控 Mac 和 iOS 設(shè)備的電力消耗以及充電狀態(tài),用戶可以深入了解設(shè)備的功耗情況,優(yōu)化使用習(xí)慣,從而...
-
WebStorm如何調(diào)試Vue項目? webstorm配置vue開發(fā)環(huán)境指南
WebStorm 支持多種調(diào)試工具,包括瀏覽器的開發(fā)者工具,但本文主要講解的是使用 WebStorm 自帶的調(diào)試功能...
-
VSCode和webstorm怎么設(shè)置綠色護眼背景? 綠豆沙背景色的設(shè)置方法
護眼色一定程度能保護眼睛,緩解疲勞,VSCode和webstorm這兩款常用的軟件怎么設(shè)置護眼色呢?詳細請看下文介紹...
-
WebStorm常用插件以及實用設(shè)置分享
WebStorm本身已經(jīng)足夠強大,但一些優(yōu)秀的插件能錦上添花,顯著提升開發(fā)效率,詳細請看下文介紹...
-
如何安裝配置WebStorm? WebStorm安裝與使用全方位指南
WebStorm軟件在前端和后端開發(fā)領(lǐng)域都備受青睞,很多朋友不知道該怎么下載安裝,下面我們就來看看詳細的安裝配置教程...
下載聲明
☉ 解壓密碼:www.dbjr.com.cn 就是本站主域名,希望大家看清楚,[ 分享碼的獲取方法 ]可以參考這篇文章
☉ 推薦使用 [ 迅雷 ] 下載,使用 [ WinRAR v5 ] 以上版本解壓本站軟件。
☉ 如果這個軟件總是不能下載的請在評論中留言,我們會盡快修復(fù),謝謝!
☉ 下載本站資源,如果服務(wù)器暫不能下載請過一段時間重試!或者多試試幾個下載地址
☉ 如果遇到什么問題,請評論留言,我們定會解決問題,謝謝大家支持!
☉ 本站提供的一些商業(yè)軟件是供學(xué)習(xí)研究之用,如用于商業(yè)用途,請購買正版。
☉ 本站提供的Android System WebView(Android組件開發(fā)) v130.0.6723.40 安卓版資源來源互聯(lián)網(wǎng),版權(quán)歸該下載資源的合法擁有者所有。