Android: Prefer direct interface classpaths

Previously we passed in the transitive interface classpath to each java
target for compiles. This means that if A depends on B which depends on
C, any changes to C will require that both A and B are re-compiled, even
if B does not change after compilation, since A directly depended on
both B and C.

After switching to direct interface classpaths, a change in C no longer
automatically means that A needs to be recompiled, thus speeding up the
build and reducing the number of edges in our build graph. This is a
step towards being explicit about what each target actually depends on.

Since each directory needs to have its files updated to
include missing direct deps (for annotations, imports, parameters,
transitive classes), a temporary allowlist has been added to make the
transition easier. Follow-up CLs will remove each entry from the
allowlist after updating all the files in that directory.

Transitive classes generated by turbine in the META-INF/TRANSITIVE dir
are also added to the classpath. This removes the necessity of adding a
direct dependency on an indirectly used class (e.g. method on parent of
parent class).

Bug: 1082904
Change-Id: Ideb374c985bc278e5c14bde4da06f8725d9359d1
Commit-Queue: Peter Wen <>
Auto-Submit: Peter Wen <>
Reviewed-by: Andrew Grieve <>
Cr-Original-Commit-Position: refs/heads/master@{#786922}
Cr-Mirrored-Commit: 03e5cc4f26c556749515b11ebdbe7fab4a79873c
3 files changed