1# What is the WindowManager Shell
2
3---
4
5## Motivation
6
7The primary motivation for the WindowManager Shell (WMShell) library is to effectively scale
8WindowManager by making it easy™ and safe to create windowing features to fit the needs of
9various Android products and form factors.
10
11To achieve this, WindowManager separates the policy of managing windows (WMCore) from the
12presentation of surfaces (WMShell) and provides a minimal interface boundary for the two to
13communicate.
14
15## Who is using the library?
16
17Currently, the WMShell library is used to drive the windowing experience on handheld
18(phones & tablets), TV, Auto, Arc++, and Wear to varying degrees.
19
20## Where does the code live
21
22The core WMShell library code is currently located in the [frameworks/base/libs/WindowManager/Shell](frameworks/base/libs/WindowManager/Shell)
23directory and is included as a part dependency of the host SystemUI apk.
24
25## How do I build the Shell library
26
27The library can be built directly by running (using [go/makepush](http://go/makepush)):
28```shell
29mp :WindowManager-Shell
30```
31But this is mainly useful for inspecting the contents of the library or verifying it builds. The
32various targets can be found in the Shell library's [Android.bp](frameworks/base/libs/WindowManager/Shell/Android.bp)
33file.
34
35Normally, you would build it as a part of the host SystemUI, for example via commandline:
36```shell
37# Phone SystemUI variant
38mp sysuig
39# Building Shell & SysUI changes along w/ framework changes
40mp core services sysuig
41```
42
43Or preferably, if you are making WMShell/SysUI only changes (no other framework changes), then
44building via [go/sysui-studio](http://go/sysui-studio) allows for very quick iteration (one click
45build and push of SysUI in < 30s).
46
47If you are making framework changes and are using `aidegen` to set up your platform IDE, make sure
48to include the appropriate directories to build, for example:
49```shell
50# frameworks/base will include base/libs/WindowManager/Shell and base/packages/SystemUI
51aidegen frameworks/base \
52    vendor/<oem>/packages/SystemUI \
53    ...
54```
55
56## Other useful links
57- [go/o-o-summit-20](go/o-o-summit-20) (Video presentations from the WM team)
58- [go/o-o-summit-21](go/o-o-summit-21)