2015-03-24 10 views
5

Provo a selezionare una sottosistema nell'app impostazioni del mio dispositivo e vedo questa eccezione. Questo significa che le impostazioni sono un processo privilegiato e non possono accedere a Webview?java.lang.UnsupportedOperationException: Per motivi di sicurezza, WebView non è consentito nei processi privilegiati

Ho provato selezionando un'opzione HDMI dalle impostazioni, questo è lo stack eccezione:

03-23 08:45:03.301 E/AndroidRuntime(3299): Caused by: java.lang.UnsupportedOperationException: For security reasons, WebView is not allowed in privileged processes 
03-23 08:45:03.301 E/AndroidRuntime(3299):  at android.webkit.WebViewFactory.getProvider(WebViewFactory.java:96) 
03-23 08:45:03.301 E/AndroidRuntime(3299):  at android.webkit.WebView.getFactory(WebView.java:2194) 
03-23 08:45:03.301 E/AndroidRuntime(3299):  at android.webkit.WebView.ensureProviderCreated(WebView.java:2189) 
03-23 08:45:03.301 E/AndroidRuntime(3299):  at android.webkit.WebView.setOverScrollMode(WebView.java:2248) 
03-23 08:45:03.301 E/AndroidRuntime(3299):  at android.view.View.<init>(View.java:3588) 
03-23 08:45:03.301 E/AndroidRuntime(3299):  at android.view.View.<init>(View.java:3682) 
03-23 08:45:03.301 E/AndroidRuntime(3299):  at android.view.ViewGroup.<init>(ViewGroup.java:497) 
03-23 08:45:03.301 E/AndroidRuntime(3299):  at android.widget.AbsoluteLayout.<init>(AbsoluteLayout.java:55) 
03-23 08:45:03.301 E/AndroidRuntime(3299):  at android.webkit.WebView.<init>(WebView.java:544) 
03-23 08:45:03.301 E/AndroidRuntime(3299):  at android.webkit.WebView.<init>(WebView.java:489) 
03-23 08:45:03.301 E/AndroidRuntime(3299):  at android.webkit.WebView.<init>(WebView.java:472) 
03-23 08:45:03.301 E/AndroidRuntime(3299):  at android.webkit.WebView.<init>(WebView.java:459) 
03-23 08:45:03.301 E/AndroidRuntime(3299):  at android.webkit.WebView.<init>(WebView.java:449) 
03-23 08:45:03.301 E/AndroidRuntime(3299):  at com.android.settings.HDMI3DPlaySettings.onCreate(HDMI3DPlaySettings.java:123) 
03-23 08:45:03.301 E/AndroidRuntime(3299):  at android.app.Fragment.performCreate(Fragment.java:2031) 
03-23 08:45:03.301 E/AndroidRuntime(3299):  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:863) 
03-23 08:45:03.301 E/AndroidRuntime(3299):  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
03-23 08:45:03.301 E/AndroidRuntime(3299):  at android.app.BackStackRecord.run(BackStackRecord.java:834) 
03-23 08:45:03.301 E/AndroidRuntime(3299):  at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1452) 
03-23 08:45:03.301 E/AndroidRuntime(3299):  at android.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:483) 
03-23 08:45:03.301 E/AndroidRuntime(3299):  at com.android.settings.SettingsActivity.switchToFragment(SettingsActivity.java:1002) 
03-23 08:45:03.301 E/AndroidRuntime(3299):  at com.android.settings.SettingsActivity.onCreate(SettingsActivity.java:599) 
03-23 08:45:03.301 E/AndroidRuntime(3299):  at android.app.Activity.performCreate(Activity.java:5990) 
03-23 08:45:03.301 E/AndroidRuntime(3299):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
03-23 08:45:03.301 E/AndroidRuntime(3299):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2320) 
+0

Hai '' sul tuo manifest? –

+0

Sì ... l'eccezione è presente qui nel codice sorgente di Android: https: //android.googlesource.com/platform/frameworks/base/+/master/core/java/android/webkit/WebViewFactory.java final int uid = android .os.Process.myUid(); if (uid == android.os.Process.ROOT_UID || uid == android.os.Process.SYSTEM_UID) { throw new UnsupportedOperationException ( "Per motivi di sicurezza, WebView non è consentito nei processi privilegiati"); –

+0

sì, l'autorizzazione è presente nell'app. –

risposta

3

Ho incontrato lo stesso caso; Aggiunto [android: sharedUserId = "android.uid.system"] in manifest e utilizzato la webview in APP; Era tutto a posto in Android 5.0.2 del progetto, mentre non è riuscito a 5.1 progetto ...

+0

Ho appreso che l'uso di webview in un'app di sistema compromette la sicurezza del sistema, quindi se possibile è possibile trovare alternative all'utilizzo di webview. –

+0

Hai trovato una soluzione alternativa? Grazie. – sjkm

+1

Non funziona ancora in 6.0.1, hai trovato qualche alternativa? Se è così, si prega di commentare lo stesso. – Jaydev

0

Questa eccezione è generata da WebViewFactory, ecco il codice:

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

modo, se si cercherà di usa la visualizzazione web con l'utilizzo UID menzionato, l'app si blocca.

Ho anche bisogno di usare webView per mostrare html nella mia app, ma non riesco a trovare alcuna soluzione standard.

+0

prova ad utilizzare alcune librerie come questa: https://github.com/PrivacyApps/html-textview –

Problemi correlati