Webview loadurl 崩溃

Dom*_*HDD 5 java android webview android-things

当尝试在我的 Android Things webview 中加载 url 时,页面最初加载,然后 UI 崩溃,错误消息指向 IoT FrameworkPackageStubs。

我在 Dev Preview 5.1 上使用 Raspberry Pi,它支持 Webviews 和 OpenGL,但不知道为什么我的非常简单的应用程序似乎崩溃了。它的代码如下

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    WebView webView = (WebView) findViewById(R.id.webView);
    if(webView != null)
    webView.loadUrl("https://www.facebook.com");
}
Run Code Online (Sandbox Code Playgroud)

这是我的清单文件

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.airborneathletics.videohwtest">

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <uses-library android:name="com.google.android.things" android:required="false"/>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
Run Code Online (Sandbox Code Playgroud)

和我的 Gradle 依赖

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.+'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'

    provided 'com.google.android.things:androidthings:0.5.1-devpreview'
}
Run Code Online (Sandbox Code Playgroud)

最后是我在拨打电话时收到的错误消息。

    --------- beginning of crash
08-31 20:30:33.458 10146-10146/com.google.android.iot.frameworkpackagestubs E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                              Process: com.google.android.iot.frameworkpackagestubs, PID: 10146
                                                                                              java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.google.android.iot.frameworkpackagestubs/com.google.android.iot.frameworkpackagestubs.Stubs$BrowserStub}: java.lang.ClassNotFoundException: Didn't find class "com.google.android.iot.frameworkpackagestubs.Stubs$BrowserStub" on path: DexPathList[[zip file "/system/app/IoTFrameworkPackageStubs/IoTFrameworkPackageStubs.apk"],nativeLibraryDirectories=[/system/app/IoTFrameworkPackageStubs/lib/arm, /system/lib, /system/vendor/lib, /system/lib, /system/vendor/lib]]
                                                                                                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2718)
                                                                                                  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.ClassNotFoundException: Didn't find class "com.google.android.iot.frameworkpackagestubs.Stubs$BrowserStub" on path: DexPathList[[zip file "/system/app/IoTFrameworkPackageStubs/IoTFrameworkPackageStubs.apk"],nativeLibraryDirectories=[/system/app/IoTFrameworkPackageStubs/lib/arm, /system/lib, /system/vendor/lib, /system/lib, /system/vendor/lib]]
                                                                                                  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93)
                                                                                                  at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
                                                                                                  at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
                                                                                                  at android.app.Instrumentation.newActivity(Instrumentation.java:1173)
                                                                                                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2708)
                                                                                                  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) 
Run Code Online (Sandbox Code Playgroud)

我承认有些网站确实有效,但是当我转到https://www.google.com并输入搜索时,它会崩溃并显示相同的消息。

感谢您的帮助。

小智 3

您可能会遇到与此处相同的问题。

当 Android 中加载链接时,默认情况下,系统将尝试启动一个应用程序来处理 URL,在本例中为浏览器。然而,Android Things 默认情况下不包含浏览器,因此它无法处理 URL 并崩溃。

您可以通过在加载任何 URL 之前在应用程序中设置 WebViewClient 来覆盖此默认行为并将 URL 加载到应用程序的 WebView 中:

WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setWebViewClient(new WebViewClient());
Run Code Online (Sandbox Code Playgroud)

此处记录了这一点。