You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启动含WebView的Activity时出现PacProcessor类解析失败错误

问题分析与解决方案

问题描述

我尝试通过以下代码启动一个内嵌WebView的FAWebLoginActivity:

private val importUserConnection = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){ 
        activityResult -> println(activityResult)
}

private val openWebLogin(){
    val loginIntent = Intent(this, FAWebLoginActivity::class.java)
    loginIntent.putExtra("FormUrl", response.getString("url"))
    loginIntent.putExtra("FormId", response.getString("id"))
    importUserConnection.launch(login)
}

但该Activity无法正常打开(未发生崩溃),同时收到如下重复的异常信息:

Rejecting re-init on previously-failed class java.lang.Class: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/webkit/PacProcessor;
at java.lang.Class java.lang.Class.classForName(java.lang.String, boolean, java.lang.ClassLoader) (Class.java:-2)
...
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.webkit.PacProcessor" on path: DexPathList[[zip file "/data/app/com.android.chrome-gB7COKcevzhR1AjBnPvR-g==/base.apk"],nativeLibraryDirectories=[/data/app/com.android.chrome-gB7COKcevzhR1AjBnPvR-g==/lib/arm64, /data/app/com.android.chrome-gB7COKcevzhR1AjBnPvR-g==/base.apk!/lib/arm64-v8a, /system/lib64, /system/vendor/lib64]]
...

异常信息翻译

拒绝重新初始化之前初始化失败的类java.lang.Class<Se2>:java.lang.NoClassDefFoundError:无法解析类android.webkit.PacProcessor;
在java.lang.Class java.lang.Class.classForName(java.lang.String, boolean, java.lang.ClassLoader) (Class.java:-2)
...
原因:java.lang.ClassNotFoundException:在路径DexPathList[[zip 文件 "/data/app/com.android.chrome-gB7COKcevzhR1AjBnPvR-g==/base.apk"],nativeLibraryDirectories=[/data/app/com.android.chrome-gB7COKcevzhR1AjBnPvR-g==/lib/arm64, /data/app/com.android.chrome-gB7COKcevzhR1AjBnPvR-g==/base.apk!/lib/arm64-v8a, /system/lib64, /system/vendor/lib64]]上未找到类android.webkit.PacProcessor
...

解决方案

1. 修复代码语法错误

代码存在两处明显问题:

  • 函数声明错误:private val openWebLogin(){ 应改为private fun openWebLogin(){(这是函数而非属性)
  • 启动参数错误:importUserConnection.launch(login) 中的login未定义,需替换为loginIntent

修正后的代码:

private val importUserConnection = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){ 
        activityResult -> println(activityResult)
}

private fun openWebLogin(){
    val loginIntent = Intent(this, FAWebLoginActivity::class.java)
    loginIntent.putExtra("FormUrl", response.getString("url"))
    loginIntent.putExtra("FormId", response.getString("id"))
    importUserConnection.launch(loginIntent)
}

2. 检查并修复系统WebView组件

android.webkit.PacProcessor是系统WebView的核心类,找不到该类通常是WebView组件异常:

  • 打开设备设置 → 应用 → 查看所有应用 → 找到Android System WebView,检查是否为最新版本,若不是则更新;
  • 若更新后问题依旧,尝试卸载WebView的更新,再重新安装最新版本。

3. 配置WebView兼容设置

如果FAWebLoginActivity内部使用自定义WebView,添加以下兼容配置避免加载异常:

val webView = findViewById<WebView>(R.id.web_view)
val webSettings = webView.settings

// 基础配置
webSettings.javaScriptEnabled = true
webSettings.setSupportZoom(true)
webSettings.domStorageEnabled = true

// Android 11+ 兼容配置
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    webView.isForceDarkAllowed = false
}

4. 排查多Dex配置问题

若应用开启了多Dex,需确保WebView相关类被包含在主Dex中:

  • 在build.gradle中启用MultiDex:
android {
    defaultConfig {
        multiDexEnabled true
    }
}
dependencies {
    implementation 'androidx.multidex:multidex:2.0.1'
}
  • 自定义Application类继承MultiDexApplication,或在attachBaseContext中初始化:
class MyApp : Application() {
    override fun attachBaseContext(base: Context) {
        super.attachBaseContext(base)
        MultiDex.install(this)
    }
}

内容的提问来源于stack exchange,提问作者M_droid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 11:00:56