Android 记录锁屏的上层相关源码以及debug WindowManager

SettingsProvider

  • frameworks/base/packages/SettingsProvider/res/values/defaults.xml

  • device/rockchip/rk356x/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml

    //device的overlay会覆盖frameworks的SettingsProvider
    // 关于锁屏配置
    0x60000
    false

KeyGuard

  • frameworks/base/services/core/java/com/android/server/wm/RootWindowContainer.java

    final int type = attrs.type;
    // This function assumes that the contents of the default display are processed first
    // before secondary displays.
    final DisplayContent displayContent = w.getDisplayContent();
    if (displayContent != null && displayContent.isDefaultDisplay) {
    // While a dream or keyguard is showing, obscure ordinary application content on
    // secondary displays (by forcibly enabling mirroring unless there is other content
    // we want to show) but still allow opaque keyguard dialogs to be shown.
    if (w.isDreamWindow() || mWmService.mPolicy.isKeyguardShowing()) {
    mObscureApplicationContentOnSecondaryDisplays = true;
    }
    displayHasContent = true;
    } else if (displayContent != null &&
    (!mObscureApplicationContentOnSecondaryDisplays
    || (obscured && type == TYPE_KEYGUARD_DIALOG))) {
    // Allow full screen keyguard presentation dialogs to be seen.
    displayHasContent = true;
    }
    if ((privateflags & PRIVATE_FLAG_SUSTAINED_PERFORMANCE_MODE) != 0) {
    mSustainedPerformanceModeCurrent = true;
    }

FallbackHome

  • frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java

    //box:skip FallbackHome to fix 2-3s black screen before launcher.
    if (!"box".equals(SystemProperties.get("ro.target.product"))) {
    if (!mBootAnimationStopped) {
    Trace.asyncTraceBegin(TRACE_TAG_WINDOW_MANAGER, "Stop bootanim", 0);
    // stop boot animation
    // formerly we would just kill the process, but we now ask it to exit so it
    // can choose where to stop the animation.
    SystemProperties.set("service.bootanim.exit", "1");
    mBootAnimationStopped = true;
    }

    复制代码
              if (!mForceDisplayEnabled && !checkBootAnimationCompleteLocked()) {
                  ProtoLog.i(WM_DEBUG_BOOT, "performEnableScreen: Waiting for anim complete");
                  return;
              }
    
              try {
                  IBinder surfaceFlinger = ServiceManager.getService("SurfaceFlinger");
                  if (surfaceFlinger != null) {
                      ProtoLog.i(WM_ERROR, "******* TELLING SURFACE FLINGER WE ARE BOOTED!");
                      Parcel data = Parcel.obtain();
                      data.writeInterfaceToken("android.ui.ISurfaceComposer");
                      surfaceFlinger.transact(IBinder.FIRST_CALL_TRANSACTION, // BOOT_FINISHED
                              data, null, 0);
                      data.recycle();
                  }
              } catch (RemoteException ex) {
                  ProtoLog.e(WM_ERROR, "Boot completed: SurfaceFlinger is dead!");
              }
          }

调试

  • frameworks/base/services/core/java/com/android/server/wm/WindowManagerDebugConfig.java
    打开对应日志打印,来debug WindowManager

    复制代码
      static final String TAG_WM = "WindowManager";
    
      static final boolean DEBUG = false;
      static final boolean DEBUG_ANIM = false;
      static final boolean DEBUG_LAYOUT = false;
      static final boolean DEBUG_LAYERS = false;
      static final boolean DEBUG_INPUT = false;
      static final boolean DEBUG_INPUT_METHOD = false;
      static final boolean DEBUG_VISIBILITY = false;
      static final boolean DEBUG_CONFIGURATION = false;
      static final boolean DEBUG_STARTING_WINDOW_VERBOSE = false;
      static final boolean DEBUG_WALLPAPER = false;
      static final boolean DEBUG_WALLPAPER_LIGHT = false || DEBUG_WALLPAPER;
      static final boolean DEBUG_DRAG = false;
      static final boolean DEBUG_SCREENSHOT = false;
      static final boolean DEBUG_LAYOUT_REPEATS = false;
      static final boolean DEBUG_WINDOW_TRACE = false;
相关推荐
Mr数据杨8 小时前
【Codex】用学生入学评估模块建立新生能力画像
android·java·javascript·django·codex·项目开发
●VON8 小时前
谁小时候不想要一个游戏修改器?我把电脑 Skill 做成了 Android 小助手
android·游戏·电脑
刃神太酷啦9 小时前
Linux 系统 MySQL 完整安装配置教程:从卸载 MariaDB 到优化 my.cnf----《Hello MySQL!》(1)
android·linux·c语言·c++·mysql·leetcode·mariadb
里欧跑得慢9 小时前
Flutter 三方库 function_tree — 鸿蒙应用开发中的动态数学公式解析与计算神器,实现鸿蒙深度适配下的复杂函数逻辑运行时求值实战(适配鸿蒙 HarmonyOS Next ohos)
android·前端·安全·flutter·华为·harmonyos
IT毕设实战小研9 小时前
基于安卓的空气质量查询系统
android·大数据·vue.js·爬虫·python·django·课程设计
雨声不在11 小时前
docker-android Android 16 支持与编译修改
android
天空之城--17 小时前
【无标题】
android
mmsx18 小时前
osmdroid 接入谷歌影像底图:瓦片 URL 拼接与多域名轮询实战
android·osmdroid
ZYJCSZKJ18 小时前
基于大语言模型的地域实体语义增强:生成式引擎优化(GEO)中的多模态内容生成实践
android·人工智能·语言模型
ssshooter18 小时前
Tauri + GitHub Actions 自动化发布 Android APK 技术总结
android·github·android studio