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

Android版Chromium发行版构建启动后崩溃问题求助

问题描述

我按照Chromium官方文档步骤构建Android版Chromium,使用的构建命令如下:

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH="$PATH:/path/to/depot_tools"
mkdir ~/chromium && cd ~/chromium
fetch --nohooks android
cd src
echo "target_os = [ 'android' ]" >> ../.gclient
gclient sync -D --force
gn args out/Default
autoninja -C out/Default monochrome_public_bundle

当is_debug设为true时程序运行正常,但设为false时,生成的APK启动2秒后崩溃。使用的构建参数如下:

target_os = "android"
target_cpu = "arm"  

is_debug = false
symbol_level = 1

该参数配置在Chromium 107版本可用,但在109至115版本中均出现崩溃问题,且已在Android 10、11、12、13系统上测试,问题复现。

错误日志如下:

Failed to deliver inset state change to w=Window{e2e9dfb u0 org.chromium.chrome.stable/org.chromium.chrome.browser.firstrun.FirstRunActivity EXITING}
android.os.DeadObjectException
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(BinderProxy.java:646)
at android.view.IWindow$Stub$Proxy.insetsControlChanged(IWindow.java:551)
at com.android.server.wm.WindowState.notifyInsetsControlChanged(WindowState.java:4374)
at com.android.server.wm.InsetsStateController.lambda$notifyPendingInsetsControlChanged$5$com-android-server-wm-InsetsStateController(InsetsStateController.java:348)
at com.android.server.wm.InsetsStateController$$ExternalSyntheticLambda4.run(Unknown Source:2)
at com.android.server.wm.WindowAnimator.executeAfterPrepareSurfacesRunnables(WindowAnimator.java:357)
at com.android.server.wm.WindowAnimator.animate(WindowAnimator.java:238)
at com.android.server.wm.WindowAnimator.lambda$new$1$com-android-server-wm-WindowAnimator(WindowAnimator.java:109)
at com.android.server.wm.WindowAnimator$$ExternalSyntheticLambda1.doFrame(Unknown Source:2)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1384)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1394)
at android.view.Choreographer.doCallbacks(Choreographer.java:1013)
at android.view.Choreographer.doFrame(Choreographer.java:904)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1366)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:211)
at android.os.Looper.loop(Looper.java:300)
at android.os.HandlerThread.run(HandlerThread.java:67)
at com.android.server.ServiceThread.run(ServiceThread.java:46)
shouldWaitAnimatingExit: isAnimating: Window{e2e9dfb u0 org.chromium.chrome.stable/org.chromium.chrome.browser.firstrun.FirstRunActivity EXITING}
Exception thrown during dispatchAppVisibility Window{e2e9dfb u0 org.chromium.chrome.stable/org.chromium.chrome.browser.firstrun.FirstRunActivity EXITING}
android.os.DeadObjectException
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(BinderProxy.java:646)
at android.view.IWindow$Stub$Proxy.dispatchAppVisibility(IWindow.java:614)
at com.android.server.wm.WindowState.sendAppVisibilityToClients(WindowState.java:3772)
at com.android.server.wm.WindowContainer.sendAppVisibilityToClients(WindowContainer.java:1290)
at com.android.server.wm.WindowToken.setClientVisible(WindowToken.java:419)
at com.android.server.wm.ActivityRecord.setClientVisible(ActivityRecord.java:7277)
at com.android.server.wm.ActivityRecord.onAnimationFinished(ActivityRecord.java:8152)
at com.android.server.wm.ActivityRecord.postApplyAnimation(ActivityRecord.java:5888)
at com.android.server.wm.ActivityRecord.commitVisibility(ActivityRecord.java:5860)
at com.android.server.wm.ActivityRecord.commitVisibility(ActivityRecord.java:5864)
at com.android.server.wm.AppTransitionController.handleClosingApps(AppTransitionController.java:1196)
at com.android.server.wm.AppTransitionController.handleAppTransitionReady(AppTransitionController.java:295)
at com.android.server.wm.RootWindowContainer.checkAppTransitionReady(RootWindowContainer.java:1028)
at com.android.server.wm.RootWindowContainer.performSurfacePlacementNoTrace(RootWindowContainer.java:895)
at com.android.server.wm.RootWindowContainer.performSurfacePlacement(RootWindowContainer.java:835)
at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacementLoop(WindowSurfacePlacer.java:199)
at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacement(WindowSurfacePlacer.java:148)
at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacement(WindowSurfacePlacer.java:137)
at com.android.server.wm.WindowSurfacePlacer$Traverser.run(WindowSurfacePlacer.java:79)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:211)
at android.os.Looper.loop(Looper.java:300)
at android.os.HandlerThread.run(HandlerThread.java:67)
at com.android.server.ServiceThread.run(ServiceThread.java:46)
解决方法

1. 调整GN构建参数

尝试添加以下参数到你的GN配置中:

enable_android_InsetsController_support = true
is_official_build = true

Chromium 109+版本对Android窗口Insets机制做了底层适配,显式开启enable_android_InsetsController_support可修复Release模式下的Binder通信异常;is_official_build=true会启用官方构建的兼容性配置,避免非官方Release模式下的潜在问题。

2. 升级NDK版本

确保使用Chromium对应版本要求的NDK(比如109+版本推荐r25b及以上),旧版NDK在Release编译时可能导致原生层Binder通信逻辑出错。

3. 优化FirstRunActivity生命周期处理

崩溃发生在FirstRunActivity退出阶段,可尝试:

  • 同步Chromium主线的FirstRunActivity代码,官方在109+版本中可能修复了Insets相关的生命周期问题
  • 临时修改启动逻辑,跳过FirstRun流程直接启动主Activity,验证是否为FirstRunActivity导致的崩溃

4. 调整符号级别与编译优化

如果以上方法无效,临时调整参数获取更详细的崩溃日志:

symbol_level = 2
enable_incremental_javac = false

更高的symbol_level能生成更完整的符号表,帮助定位具体崩溃点;禁用增量编译可避免Release模式下的代码混淆或编译产物异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:49:56