免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

Androidwebveiw出現(xiàn)棧錯誤解決辦法

Android webveiw 出現(xiàn)棧錯誤解決辦法

專注于為中小企業(yè)提供網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)和平免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上1000家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。

前言:

最近做一個項目,項目調(diào)試基礎(chǔ)庫的一個調(diào)試工具展示設(shè)備信息頁面使用WebView。有一個應(yīng)用集成調(diào)試基礎(chǔ)庫展示內(nèi)容時出現(xiàn)

java.lang.UnsupportedOperationException: For security reasons, WebView is not allowed in privileged processes

因為應(yīng)用是系統(tǒng)級別的,在AndroidManifest.xml中添加了android:sharedUserId="android.uid.system"

根據(jù)exception提示出于安全原因,所以初步斷定很可能跟應(yīng)用為系統(tǒng)應(yīng)用有很大關(guān)系,于是開始了查找代碼尋源之旅

首先我們看一下具體的錯誤堆棧

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
at android.app.ActivityThread.access$800(ActivityThread.java:151) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5257) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:955) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:750) 
aused by: android.view.InflateException: Binary XML file line #17: Error inflating class android.webkit.WebView 
at android.view.LayoutInflater.createView(LayoutInflater.java:633) 
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55) 
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:504) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:365) 
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:379) 
at android.app.Activity.setContentView(Activity.java:2145) 
at com.mipt.store.activity.InfoActivity.onCreate(Unknown Source) 
at android.app.Activity.performCreate(Activity.java:5990) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 
... 10 more 
aused by: java.lang.reflect.InvocationTargetException 
at java.lang.reflect.Constructor.newInstance(Native Method) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:288) 
at android.view.LayoutInflater.createView(LayoutInflater.java:607) 
... 23 more 
aused by: java.lang.UnsupportedOperationException: For security reasons, WebView is not allowed in privileged processes 
at android.webkit.WebViewFactory.getProvider(WebViewFactory.java:96) 
at android.webkit.WebView.getFactory(WebView.java:2194) 
at android.webkit.WebView.ensureProviderCreated(WebView.java:2189) 
at android.webkit.WebView.setOverScrollMode(WebView.java:2248) 
at android.view.View.<init>(View.java:3588) 
at android.view.View.<init>(View.java:3682) 
at android.view.ViewGroup.<init>(ViewGroup.java:497) 
at android.widget.AbsoluteLayout.<init>(AbsoluteLayout.java:55) 
at android.webkit.WebView.<init>(WebView.java:544) 
at android.webkit.WebView.<init>(WebView.java:489) 
at android.webkit.WebView.<init>(WebView.java:472) 
at android.webkit.WebView.<init>(WebView.java:459) 
... 26 more 

錯誤提示顯示為“Caused by: java.lang.UnsupportedOperationException: For security reasons, WebView is not allowed in privileged processes”

security reasons即安全原因。為了查明原因直接查看android源碼。經(jīng)過一番查找,發(fā)現(xiàn)拋出Exception的在

frameworks/base/master/core/java/android/webkit/WebViewFactory.java

static WebViewFactoryProvider getProvider() { 
 synchronized (sProviderLock) { 
  // For now the main purpose of this function (and the factory abstraction) is to keep 
  // us honest and minimize usage of WebView internals when binding the proxy. 
  if (sProviderInstance != null) return sProviderInstance; 
  final int uid = android.os.Process.myUid(); 
  if (uid == android.os.Process.ROOT_UID || uid == android.os.Process.SYSTEM_UID) { 
   throw new UnsupportedOperationException( 
     "For security reasons, WebView is not allowed in privileged processes"); 
  } 
  StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); 
  Trace.traceBegin(Trace.TRACE_TAG_WEBVIEW, "WebViewFactory.getProvider()"); 
  try { 
   Class<WebViewFactoryProvider> providerClass = getProviderClass(); 
   Trace.traceBegin(Trace.TRACE_TAG_WEBVIEW, "providerClass.newInstance()"); 
   try { 
    sProviderInstance = providerClass.getConstructor(WebViewDelegate.class) 
      .newInstance(new WebViewDelegate()); 
    if (DEBUG) Log.v(LOGTAG, "Loaded provider: " + sProviderInstance); 
    return sProviderInstance; 
   } catch (Exception e) { 
    Log.e(LOGTAG, "error instantiating provider", e); 
    throw new AndroidRuntimeException(e); 
   } finally { 
    Trace.traceEnd(Trace.TRACE_TAG_WEBVIEW); 
   } 
  } finally { 
   Trace.traceEnd(Trace.TRACE_TAG_WEBVIEW); 
   StrictMode.setThreadPolicy(oldPolicy); 
  } 
 } 
} 

WebView在初始化的時候會檢查初始化進程的id.

final int uid = android.os.Process.myUid(); 
if (uid == android.os.Process.ROOT_UID || uid == android.os.Process.SYSTEM_UID) { 
 throw new UnsupportedOperationException( 
  "For security reasons, WebView is not allowed in privileged processes"); 
} 

如果進程ID是root或者system,就會拋出UnsupportedOperationException。為什么會有這種安全機制呢?因為webview允許運行js,如果用戶通過js注入安全代碼,那么js就可以肆無忌憚的使用系統(tǒng)權(quán)限,這無疑是一個漏洞,可謂門戶大開。

果不其然就是android:sharedUserId="android.uid.system"的問題,因為是系統(tǒng)應(yīng)用所以只能修改基礎(chǔ)調(diào)試庫的展示控件,把展示調(diào)試信息的webview改為textview。

感謝閱讀,希望能通過本文幫助到大家,謝謝大家對本站的支持,如有疑問請留言或者到本站社區(qū)交流討論,大家共同進步!

分享標題:Androidwebveiw出現(xiàn)棧錯誤解決辦法
本文路徑:http://m.newbst.com/article28/gohgcp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計全網(wǎng)營銷推廣電子商務(wù)移動網(wǎng)站建設(shè)網(wǎng)站收錄微信公眾號

廣告

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

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