Files
frameworks_base/location/lib
Jiyong Park 5366ea2089 Cut the dependency to framework from droiddoc modules
droiddoc modules for the SDK API documentation and stubs library
generations have depended on the 'framework' (which was recently changed
to framework-minus-apex' module to get the list of Java source files to
be processed.

This however caused a circular dependency when we tried to modularize
some classes in the framework library as a separate library. The
separate java library depended on the stubs library (because it should
only use SDK APIs) and the stubs library depended on the framework
library. The framework library itself depended on the separated library
(or its stub) to use APIs from the separated library, thus forming a
circular dependency.

This change fixes the problem by directly giving the framework source
files via a filegroup `framework-sources-to-document` where all Java
and AIDL files that are to be documented are included in.

This change also put the generated R.java and Manifest.java files from
framework-res into the filegroup for framework sources.

Bug: 70046217
Bug: 135922046
Test: m

Exempt-From-Owner-Approval: Approved internally
Merged-In: I09ad88da47540d31ad089aad5e1151a4b6877ec2
(cherry picked from commit 20426538f8)
Change-Id: I09ad88da47540d31ad089aad5e1151a4b6877ec2
2019-08-30 05:14:08 +00:00
..
2019-02-22 14:15:30 -08:00

This library (com.android.location.provider.jar) is a shared java library
containing classes required by unbundled location providers.

--- Rules of this library ---
o This library is effectively a PUBLIC API for unbundled location providers
  that may be distributed outside the system image. So it MUST BE API STABLE.
  You can add but not remove. The rules are the same as for the
  public platform SDK API.
o This library can see and instantiate internal platform classes (such as
  ProviderRequest.java), but it must not expose them in any public method
  (or by extending them via inheritance). This would break clients of the
  library because they cannot see the internal platform classes.

This library is distributed in the system image, and loaded as
a shared library. So you can change the implementation, but not
the interface. In this way it is like framework.jar.

--- Why does this library exists? ---

Unbundled location providers (such as the NetworkLocationProvider)
can not use internal platform classes.

So ideally all of these classes would be part of the public platform SDK API,
but that doesn't seem like a great idea when only applications with a special
signature can implement this API.

The compromise is this library.

It wraps internal platform classes (like ProviderRequest) with a stable
API that does not leak the internal classes.