为什么任何适用于 Android 的 chromium 版本都会在运行时崩溃?

问题描述 投票:0回答:1

我想为 Android 构建 chromium,并按照此页面上的所有说明进行操作 .
当我将 arg

is_debug
设置为 true 时,一切正常,但是当我将其设置为 false 时,构建的
apk
在打开应用程序后 2 秒内崩溃。
这是构建
apk
使用的参数:

target_os = "android"
target_cpu = "arm"  

is_debug = false
symbol_level = 1

这些参数适用于版本 107,但在较新的版本中会崩溃。我尝试过从 109 到 115 的不同版本的 chromium,并在不同版本的 android 10、11、12、13 上进行测试,但 chromium 不断崩溃。

错误日志:

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)

欲了解更多详情,请参阅此处

android google-chrome build crash chromium
1个回答
0
投票

构建 Chromium 非常复杂,似乎您遇到了窗口生命周期问题

FirstRunActivity

DeadObjectException
通常表明 IPC 正在尝试与死(终止/崩溃)进程进行通信。

如果我是你,我会尝试以下步骤来解决这个问题:

  1. 确保 Proguard(或任何其他混淆)不会重命名或剥离类或方法。在 Proguard 中,您可以检查设置以查看是否存在针对 Cromium 或其依赖项的任何规则。
  2. 尝试调整
    symbol_level
    参数
    ,因为这控制构建的调试符号级别。 IMO,将其设置为 1 非常简单。尝试调整此设置以查看是否影响构建。
  3. 详细日志记录可能会帮助您,特别是使用
    adb logcat
    来执行此操作,如下所示:
    adb logcat "*:V" | grep chromium
    。这会捕获所有日志并过滤掉 chromium 日志。
  4. 返回到已知的工作配置。如果您的 GN args 适用于版本 107,请在较新版本中尝试此配置,看看是否会出现相同的问题。
  5. 潜在的依赖冲突。仔细检查以确保版本之间的库或组件之间不存在冲突。
  6. 干净构建。确保您从头开始。删除
    out
    目录然后重新构建:
rm -rf out/
gclient sync
gn gen out/Default
  1. FirstRunActivity
    既然日志中提到了,请尝试检测与
    FirstRunActivity
    相关的任何自定义更改或配置。

  2. 社区帮助。您可以加入 Chromium 开发者邮件列表甚至加入 Chromium 论坛来检查更多潜在的解决方案。

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.