apk加载H5页面时报错WebView is not allowed in privileged processes是需要hook下
fun hookWebView() {
val sdkInt = Build.VERSION.SDK_INT
try {
val factoryClass = Class.forName("android.webkit.WebViewFactory")
val field = factoryClass.getDeclaredField("sProviderInstance")
field.isAccessible = true
var sProviderInstance: Any? = field.get(null)
if (sProviderInstance != null) {
Log.i(TAG, "sProviderInstance isn't null")
return
}
val getProviderClassMethod: Method
if (sdkInt > 22) {
getProviderClassMethod = factoryClass.getDeclaredMethod("getProviderClass")
} else if (sdkInt == 22) {
getProviderClassMethod = factoryClass.getDeclaredMethod("getFactoryClass")
} else {
Log.i(TAG, "Don't need to Hook WebView")
return
}
getProviderClassMethod.isAccessible = true
val factoryProviderClass = getProviderClassMethod.invoke(factoryClass) as Class<*>
val delegateClass = Class.forName("android.webkit.WebViewDelegate")
val delegateConstructor = delegateClass.getDeclaredConstructor()
delegateConstructor.isAccessible = true
if (sdkInt < 26) {//低于Android O版本
val providerConstructor = factoryProviderClass.getConstructor(delegateClass)
if (providerConstructor != null) {
providerConstructor.isAccessible = true
sProviderInstance =
providerConstructor.newInstance(delegateConstructor.newInstance())
}
} else {
val chromiumMethodName =
factoryClass.getDeclaredField("CHROMIUM_WEBVIEW_FACTORY_METHOD")
chromiumMethodName.isAccessible = true
var chromiumMethodNameStr: String? = chromiumMethodName.get(null) as String
if (chromiumMethodNameStr == null) {
chromiumMethodNameStr = "create"
}
val staticFactory =
factoryProviderClass.getMethod(chromiumMethodNameStr, delegateClass)
if (staticFactory != null) {
sProviderInstance =
staticFactory.invoke(null, delegateConstructor.newInstance())
}
}
if (sProviderInstance != null) {
field.set("sProviderInstance", sProviderInstance)
Log.i(TAG, "Hook success!")
} else {
Log.i(TAG, "Hook failed!")
}
} catch (e: Throwable) {
Log.w(TAG, e)
}
}
**apk加载H5 webview加载不出来的问题**
这个还是9.0权限管理的问题,通过log可以看出来
avc: denied { read } for name=“config.gz” dev=“proc” ino=4026532109 scontext=u:r:isolated_app:s0 tcontext=u:object_r:ystem_app_data_file:s0 tclass=file permissive=0
在isolated_app.te中添加 read权限
system/sepolicy/private/isolated_app.te
allow isolated_app system_app_data_file:file {read write };
下面是H5报错的log
untime: Process: com.neostra.funbooksettings, PID: 3087
untime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.neostra.funbooksettings/com.neostra.feedback.WebviewActivity}: android.view.InflateException: Binary XML file line #23: Binary XML file line #23: Error inflating class android.webkit.WebView
untime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2944)
untime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3079)
untime: at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
untime: at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
untime: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
untime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1836)
untime: at android.os.Handler.dispatchMessage(Handler.java:106)
untime: at android.os.Looper.loop(Looper.java:193)
untime: at android.app.ActivityThread.main(ActivityThread.java:6702)
untime: at java.lang.reflect.Method.invoke(Native Method)
untime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
untime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:911)
untime: Caused by: android.view.InflateException: Binary XML file line #23: Binary XML file line #23: Error inflating class android.webkit.WebView
untime: Caused by: android.view.InflateException: Binary XML file line #23: Error inflating class android.webkit.WebView
untime: Caused by: java.lang.reflect.InvocationTargetException
untime: at java.lang.reflect.Constructor.newInstance0(Native Method)
untime: at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
untime: at android.view.LayoutInflater.createView(LayoutInflater.java:647)
untime: at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58)
untime: at android.view.LayoutInflater.onCreateView(LayoutInflater.java:720)
untime: at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:803)
untime: at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
untime: at android.view.LayoutInflater.rInflate(LayoutInflater.java:880)
untime: at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:841)
untime: at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
untime: at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
untime: at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
untime: at android.support.v7.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:469)
untime: at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
untime: at com.neostra.feedback.WebviewActivity.onCreate(WebviewActivity.java:34)
untime: at android.app.Activity.performCreate(Activity.java:7136)
untime: at android.app.Activity.performCreate(Activity.java:7127)
untime: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
untime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2924)
untime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3079)
untime: at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
untime: at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
untime: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
untime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1836)
untime: at android.os.Handler.dispatchMessage(Handler.java:106)
untime: at android.os.Looper.loop(Looper.java:193)
untime: at android.app.ActivityThread.main(ActivityThread.java:6702)
untime: at java.lang.reflect.Method.invoke(Native Method)
untime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
untime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:911)
untime: Caused by: java.lang.UnsupportedOperationException: For security reasons, WebView is not allowed in privileged processes
untime: at android.webkit.WebViewFactory.getProvider(WebViewFactory.java:235)
untime: at android.webkit.WebView.getFactory(WebView.java:2681)
untime: at android.webkit.WebView.ensureProviderCreated(WebView.java:2676)
untime: at android.webkit.WebView.setOverScrollMode(WebView.java:2741)
untime: at android.view.View.<init>(View.java:4809)
untime: at android.view.View.<init>(View.java:4950)
untime: at android.view.ViewGroup.<init>(ViewGroup.java:660)
untime: at android.widget.AbsoluteLayout.<init>(AbsoluteLayout.java:55)
untime: at android.webkit.WebView.<init>(WebView.java:659)
untime: at android.webkit.WebView.<init>(WebView.java:604)
untime: at android.webkit.WebView.<init>(WebView.java:587)
untime: at android.webkit.WebView.<init>(WebView.java:574)
untime: ... 30 more
orHal: getWifiLinkLayerStats(l.937) failed {.code = ERROR_NOT_SUPPORTED, .description = }
orHal: getWifiLinkLayerStats(l.937) failed {.code = ERROR_NOT_SUPPORTED, .description = }
: getDiskStats failed with result NOT_SUPPORTED and size 0
hapingUtils: Exception openLteGateByDataShaping in java.lang.NullPointerException: null receiver
orHal: getWifiLinkLayerStats(l.937) failed {.code = ERROR_NOT_SUPPORTED, .description = }
aultHeartbeatImpl: |[seq:umeng:5d4158e04ca35700f300040d.AWCN2_1] close session in background session:Session@[umeng:5d4158e04ca35700f300040d.AWCN2_1|http2_0rtt_acs]
tSpdySession: |[seq:umeng:5d4158e04ca35700f300040d.AWCN2_1] force close! session:Session@[umeng:5d4158e04ca35700f300040d.AWCN2_1|http2_0rtt_acs]
sion: |[seq:umeng:5d4158e04ca35700f300040d.AWCN2_1] notifyStatus status:DISCONNECTING
tSpdySession: |[seq:umeng:5d4158e04ca35700f300040d.AWCN2_1] spdySessionCloseCallback errorCode::-2002
sion: |[seq:umeng:5d4158e04ca35700f300040d.AWCN2_1] notifyStatus status:DISCONNECTED
orHal: getWifiLinkLayerStats(l.937) failed {.code = ERROR_NOT_SUPPORTED, .description = }