Android O не может раздуть веб-просмотр после регистрации в AFW

Я использую последнюю бета-версию Android O на устройстве Pixel XL. Это мой веб-просмотр в xml.

<WebView
    android:id="@+id/launch_anim"
    android:layout_width="match_parent"
    android:layout_height="150dp"
    android:layout_centerHorizontal="true" />

Вот как он используется в моем классе Activity

WebView launch_anim = (WebView)findViewById(R.id.launch_anim);
launch_anim.loadUrl("file:///android_asset/launch_anim_centered.html");

Это мой файл launch_anim_centered.html в каталоге ресурсов.

<HTML>
<head>
    <style>
body {
    background-color: #FFFFFF;
}
</style>
</head>
<body>
<CENTER>
    <IMG SRC="launch_anim_1x.gif">
</CENTER>
</body>
</HTML>

Файл launch_anim_1x.gif представляет собой файл gif, содержащий вращающееся изображение. Когда я запускаю приложение, нет проблем с запуском этого действия. Затем я делаю регистрацию Android-For-Work. После регистрации, как только приложение запускается, это действие не отображается и выдает подобное исключение.

07-28 15:39:55.352 16538-16538/? I/WebViewFactory: Loading com.google.android.webview version 58.0.3029.125 (code 303012500)
07-28 15:39:55.353 16538-16538/? D/AndroidRuntime: Shutting down VM
07-28 15:39:55.354 16538-16538/? E/AndroidRuntime: FATAL EXCEPTION: main
                                                   Process: com.sample.app, PID: 16538
                                                   java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sample.app/com.sample.app.ui.StartupActivity}: android.view.InflateException: Binary XML file line #25: Binary XML file line #25: Error inflating class android.webkit.WebView
                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
                                                       at android.app.ActivityThread.-wrap11(Unknown Source:0)
                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
                                                       at android.os.Handler.dispatchMessage(Handler.java:105)
                                                       at android.os.Looper.loop(Looper.java:164)
                                                       at android.app.ActivityThread.main(ActivityThread.java:6541)
                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                       at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
                                                    Caused by: android.view.InflateException: Binary XML file line #25: Binary XML file line #25: Error inflating class android.webkit.WebView
                                                    Caused by: android.view.InflateException: Binary XML file line #25: Error inflating class android.webkit.WebView
                                                    Caused by: java.lang.reflect.InvocationTargetException
                                                       at java.lang.reflect.Constructor.newInstance0(Native Method)
                                                       at java.lang.reflect.Constructor.newInstance(Constructor.java:334)
                                                       at android.view.LayoutInflater.createView(LayoutInflater.java:647)
                                                       at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58)
                                                       at android.view.LayoutInflater.onCreateView(LayoutInflater.java:720)
                                                       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:788)
                                                       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
                                                       at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
                                                       at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
                                                       at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
                                                       at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
                                                       at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
                                                       at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:418)
                                                       at android.app.Activity.setContentView(Activity.java:2654)
                                                       at com.sample.app.ui.StartupActivity.onCreate(Unknown Source:37)
                                                       at android.app.Activity.performCreate(Activity.java:6975)
                                                       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)
                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
                                                       at android.app.ActivityThread.-wrap11(Unknown Source:0)
                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
                                                       at android.os.Handler.dispatchMessage(Handler.java:105)
                                                       at android.os.Looper.loop(Looper.java:164)
                                                       at android.app.ActivityThread.main(ActivityThread.java:6541)
                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                       at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
                                                    Caused by: java.lang.NullPointerException
                                                       at android.content.res.AssetManager.addAssetPathNative(Native Method)
                                                       at android.content.res.AssetManager.addAssetPathInternal(AssetManager.java:689)
                                                       at android.content.res.AssetManager.addAssetPathAsSharedLibrary(AssetManager.java:684)
                                                       at android.webkit.WebViewFactory.getProviderClass(WebViewFactory.java:407)
                                                       at android.webkit.WebViewFactory.getProvider(WebViewFactory.java:211)
                                                       at android.webkit.WebView.getFactory(WebView.java:2467)
                                                       at android.webkit.WebView.ensureProviderCreated(WebView.java:2462)
                                                       at android.webkit.WebView.setOverScrollMode(WebView.java:2527)
                                                       at android.view.View.<init>(View.java:4536)
                                                       at android.view.View.<init>(View.java:4668)
                                                       at android.view.ViewGroup.<init>(ViewGroup.java:597)
                                                       at android.widget.AbsoluteLayout.<init>(AbsoluteLayout.java:55)
07-28 15:39:55.354 16538-16538/? E/AndroidRuntime:     at android.webkit.WebView.<init>(WebView.java:636)
                                                       at android.webkit.WebView.<init>(WebView.java:581)
                                                       at android.webkit.WebView.<init>(WebView.java:564)
                                                       at android.webkit.WebView.<init>(WebView.java:551)
                                                        ... 27 more

Эта проблема наблюдается только на устройствах Pixel и PixelXL. Устройство Nexus работает нормально. Любая помощь в решении этой проблемы приветствуется. Спасибо РЕДАКТИРОВАТЬ: Новая информация. Поэтому я отключил веб-просмотр, чтобы увидеть, что происходит, но затем приложение вылетает при попытке доступа к CookieManager.getInstance(). Это трассировка стека:

07-31 09:21:51.767 11267-11557/com.airwatch.vmworkspace I/WebViewFactory: Loading com.google.android.webview version 58.0.3029.125 (code 303012500)
07-31 09:21:51.775 13243-13276/? I/ConfigUpdater: Update started

                                                  --------- beginning of crash
07-31 09:21:51.775 11267-11557/com.airwatch.vmworkspace E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3
                                                                          Process: com.airwatch.vmworkspace, PID: 11267
                                                                          java.lang.RuntimeException: An error occurred while executing doInBackground()
                                                                              at android.os.AsyncTask$3.done(AsyncTask.java:353)
                                                                              at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
                                                                              at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
                                                                              at java.util.concurrent.FutureTask.run(FutureTask.java:271)
                                                                              at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
                                                                              at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
                                                                              at java.lang.Thread.run(Thread.java:764)
                                                                           Caused by: java.lang.NullPointerException
                                                                              at android.content.res.AssetManager.addAssetPathNative(Native Method)
                                                                              at android.content.res.AssetManager.addAssetPathInternal(AssetManager.java:689)
                                                                              at android.content.res.AssetManager.addAssetPathAsSharedLibrary(AssetManager.java:684)
                                                                              at android.webkit.WebViewFactory.getProviderClass(WebViewFactory.java:407)
                                                                              at android.webkit.WebViewFactory.getProvider(WebViewFactory.java:211)
                                                                              at android.webkit.CookieManager.getInstance(CookieManager.java:39)
                                                                              at com.sample.app.network.communication.MyCookieManager.<init>(MyCookieManager.java:48)

Я думаю, что настоящая проблема заключается в исключении NullPointerException на android.content.res.AssetManager.addAssetPathNative (собственный метод). Есть идеи, как это исправить?


person kdas    schedule 31.07.2017    source источник
comment
Пробовали ли вы включить Chrome в рабочем профиле с помощью DevicePolicyManager.enableSystemApp или установка из Play Маркета?   -  person Fred    schedule 02.08.2017


Ответы (2)


Это ошибка в Android O: если Chrome отключен в одном из профилей, WebView не работает для обоих профилей, пока он не будет обновлен Play.

Чтобы устранить эту проблему во время подготовки и не обновлять WebView, вы можете включить Chrome в рабочем профиле с помощью DevicePolicyManager.enableSystemApp() с именем пакета com.android.chrome, а затем запретить пользователю отключать его с помощью DevicePolicyManager.setUninstallBlocked() .

Если затем вы хотите запретить пользователю использовать браузер Chrome, вы должны использовать DevicePolicyManager.setPackagesSuspended() вместо DevicePolicyManager.setApplicationHidden().

person Fred    schedule 11.08.2017

Я нашел обходной путь, который может помочь кому-то еще. Прежде чем мы начнем регистрацию в AFW, параметры разработчика на устройстве показывают, что реализация Webview — это Chrome. Система Android Webview отключена. В этот момент, если я захожу в магазин игр, я вижу веб-просмотр системы Android, но ничего не происходит, когда я нажимаю «Включить». После того, как мы выполним AFW и увидим, что управляемый профиль был успешно создан, если я сейчас зайду в магазин игр, я увижу кнопку «обновить» для Android System Webview и смогу выполнить обновление. После завершения, если я посмотрю на параметры разработчика, реализация веб-просмотра переключилась с хрома на системный веб-просмотр. После этого, если я запускаю свое приложение в рабочем контейнере, я не вижу сбоя, и приложение работает должным образом. Кроме того, как только мы удалили рабочий профиль, реализация веб-просмотра снова переключается на хром. Обратите внимание, что то же самое происходит и на устройстве Nexus, но нам не нужно было обновлять веб-просмотр. Реализация веб-просмотра переключается между хромом и системным веб-просмотром, и все работает. Только в Pixel мы делаем обновление, чтобы заставить его работать.

person kdas    schedule 02.08.2017
comment
Этот обходной путь работает, но это плохой опыт. Вместо этого вы можете включить Chrome в рабочем профиле во время подготовки и не обновлять WebView. Смотрите мой ответ. - person Fred; 11.08.2017
comment
Эта ошибка теперь появляется в OnePlus 5 Open Beta 1, и этот обходной путь не работает ни с тем, что предложил Фред. - person Ishaan Kumar; 29.11.2017