In an email thread about an Android automerger conflict on a system_api OWNERS change, there was some discussion about why Android is using system_api (which holds Chrome OS D-Bus constants, mostly) in the first place.
deymo@ wrote this helpful explanation:
"In DBus, the API style is to pass around string values for enums (such as the update_engine::Status enum: IDLE, DOWNLOADING, ...) which means that UE needs to convert from string to enum and back using the strings from the system_api for DBus. Now, in Android we are not compiling DBus anymore, so we could technically get rid of these strings. Unfortunately, many other places in UE also need to convert from the Status enum to a string to display it in the logs mainly, and thus they re-use the UpdateStatusToString() function which depends on the system_api constants. At the time (5+ years ago?), it didn't make sense to write a UpdateStatusToString() separated from the one that was used on DBus repeating the same constants. I believe that now if you split this function in for DBus and for Logging you could probably get rid of the system_api dependency at least for UE which wasn't really a problem (it is just a few strings in a header). When doing so, you must be careful to use the exact same string values since autotest tests look for these strings in the logs to determine what happened with the test (like in the "log" output update_engine_client command). I don't know if there are other uses of this system_api in Android."
It'd be nice to clean this up and drop the dependency. I think Android will see another merge conflict the next time the OWNERS file is updated on the Chrome OS side, for instance.