初めまして、普段Androidアプリを開発している杉山です。
Androidアプリを開発するうえでWebViewのデバッグが必要になるときがあると思います。今回はPCのChromeからDeveloper Toolsを使用してデバッグする方法を紹介したいと思います。
本記事は以前レコチョクが紹介したChromeを使ったAndroid WebViewページのデバッグの内容を2024年の最新版にアップデートする形で書かせていただきます。
※今回紹介する機能は、デバッグ向けの機能であるためリリースアプリは適応しないようにしてください。
環境
- PC
- MacOS Sonoma(14.5)
- Chrome(バージョン:129.0.6668.59)
- Androidデバイス
- Pixel 7a
- Android OS 14(APIレベル 34)
- 事前に開発者向けオプションを有効にし、USBデバッグを有効にしてください
- IDE
- Android Studio Koala | 2024.1.1 Patch 1
1) WebViewのサンプルアプリを準備します。
AndroidManifest.xml
AndroidManifest.xml にはインターネット接続の許可するパーミッション android.permission.INTERNET を追加しておきます。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> // インターネット接続のパーミッション <uses-permission android:name="android.permission.INTERNET"/> <application android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.WebViewDebugSample" tools:targetApi="31"> <activity android:name=".MainActivity" android:exported="true" android:label="@string/app_name" android:theme="@style/Theme.WebViewDebugSample"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> |
WebViewに関してはxmlを用いる方法とComposeを用いる方法の2パターンで紹介します。以降のデモはComposeの方のサンプルアプリで行います。
xmlの場合
activity_main.xml
今回はWebView表示のサンプルアプリであるため、簡単な追加にしています。
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.webvewdebugsamplexml.MainActivity"> <!-- WebView部分の記述 --> <WebView android:id="@+id/webView1" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout> |
MainActivity.kt
WebViewを呼び出すには以下の2行をインポートします。
import android.webkit.WebView import android.webkit.WebViewClient |
またデバッグをするために、以下の設定を追加します。
この設定を有効にしないとChromeでデバッグをすることができません。(アプリの
minSdkが19以上であれば条件文は必要ありません)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { // APIレベル19(Android4.4)以上 WebView.setWebContentsDebuggingEnabled(true) } |
表示対象URLを
loadUrlに記述します。
サンプルは「レコチョク」のコーポレートサイトにしています。
myWebView.loadUrl("https://recochoku.jp/corporate/") |
まとめると以下のようになります。
package com.example.webvewdebugsamplexml import android.annotation.SuppressLint import android.os.Build import android.os.Bundle import android.view.View import android.webkit.WebView import android.webkit.WebViewClient import androidx.appcompat.app.AppCompatActivity class MainActivity : AppCompatActivity() { @SuppressLint("SetJavaScriptEnabled") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { // APIレベル19(Android4.4)以上 WebView.setWebContentsDebuggingEnabled(true) } setContentView(R.layout.activity_main) val myWebView = (findViewById<View>(R.id.webView1) as WebView).apply { settings.javaScriptEnabled = true } // WebViewでリンクをクリックした際、標準ブラウザでなくWebView内で表示するようにする myWebView.webViewClient = WebViewClient() // アプリ起動時に読み込むURLの指定 myWebView.loadUrl("https://recochoku.jp/corporate/") } } |
Composeの場合
MainActivity.kt
Composeの場合でもWebViewに必要なインポートは変わりません。
ただしWebViewを表示するために、以下のように
AndroidViewを使う必要があります。
AndroidView(factory = { context -> WebView(context).apply { settings.javaScriptEnabled = true WebView.setWebContentsDebuggingEnabled(true) // xmlと同様にデバッグ用の設定を追加します webViewClient = WebViewClient() loadUrl("https://recochoku.jp/corporate/") } }, modifier = modifier.fillMaxSize()) |
まとめると以下のようになります。
package com.example.webviewdebugsample import android.annotation.SuppressLint import android.os.Bundle import android.webkit.WebView import android.webkit.WebViewClient import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.viewinterop.AndroidView import com.example.webviewdebugsample.ui.theme.WebViewDebugSampleTheme class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { WebViewDebugSampleTheme { Surface( modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background ) { WebScreen() } } } } } @SuppressLint("SetJavaScriptEnabled") @Composable fun WebScreen(modifier: Modifier = Modifier) { AndroidView(factory = { context -> WebView(context).apply { settings.javaScriptEnabled = true WebView.setWebContentsDebuggingEnabled(true) webViewClient = WebViewClient() loadUrl("https://recochoku.jp/corporate/") } }, modifier = modifier.fillMaxSize()) } @Preview(showBackground = true) @Composable fun WebScreenPreview() { WebViewDebugSampleTheme { WebScreen() } } |
2) Android端末を使用してUSBデバッグを行う
検証する端末をPCに接続し、サンプルアプリをビルド実行すると、WebViewで「レコチョク」のコーポレートサイトが表示されました。
PCでChromeを起動して「chrome://inspect」へアクセスすると、デバッグが有効なデバイスとWebViewのリストが表示されます。
※以前の記事紹介した「検証 > remote devices」からのアクセス方法は2019年に削除されてしまったようです。
リストが表示されたら、接続している端末の検証したいWebViewを探してください。
今回は下の画像にある赤線の部分が検証したいWebViewになります。
そして、赤枠で囲った「inspect」をクリックするとDeveloper Toolsを別ウィンドウで表示してくれます。
※本記事ではPixel 7aで検証していますが、実際は各環境で接続している端末の検証したいWebViewの「inspect」をクリックしてください。
クリックすると、端末に表示されているWebViewの画面が、PCにスクリーンキャストされます。
これでAndroidデバイスで表示されているWebViewをPCからデバッグすることが可能になります。
エラーがあると以下のように警告が表示されます。
Chrome Developer Tools の機能についてはこちらを参考にしてください。
最後に
ChromeのDeveloper ToolsはPCサイトのデバッグによく利用されることが多いですが、Android端末とPCを接続することで、Android端末のWebViewのデバッグ作業も簡単に行えるようになります。
どちらもGoogleによって開発されているものなので、6年経った今でも変わらずデバッグが行えるようです。(導線が減ってしまったことは少し悲しいですが、、、)
是非活用してみてはいかがでしょうか?
この記事を書いた人
最近書いた記事
- 2024.09.30【2024年最新版】Chromeを使ったAndroid WebView ページのデバッグ
- 2024.04.25フラーさんと合同勉強会を実施しました!
- 2023.12.02【Kotlin】音楽アプリにAndroid Autoのアイテム表示を実装してみた
- 2023.07.21パイオニアさんと第二回合同勉強会を実施しました!(2023年7月)