启动含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

