Hidden API lists are auto-generated using a combination of Doclava
/Makefile rules and manually curated lists. As OEMs make their own
changes to the framework, they might arrive at slightly different
lists. This is not desirable as the entire ecosystem should enforce
the same rules. This patch adds the files generated by Doclava to
the code base, which will stabilize the lists for everyone.
The problem is exacerbated by the fact that the Doclava-generated
private-dex.txt contains only classes explored by Doclava. This can
change rather unexpectedly as OEMs make changes and start/stop using
internal classes otherwise only used in unexplored code. If the file
is extended, they might start blacklisting new APIs. If the file
shrinks, they might start whitelisting APIs they should restrict
access to and have trouble passing CTS.
(Avoid merging out of pi trees)
Test: m ; check that produced lists have not changed
Bug: 109824927
Merged-In: I0e9653d9cd7e4b748870bacb6fbcecae535ebb2a
Change-Id: I1463a06d6510e7051a64d5d516f4c589638ca11c
This reverts commit 726df7efc9.
Reason for revert: <Didn't add Merged-in which flows this change down to pi-dev-plus-aosp>
Bug: b/78245848
Change-Id: Ie15181bcb91314718ee9902402179cd010f17553
Also removed --exact-api flag since Metalava has not supported it yet.
Test: Manually checked-in prebuilt metalava.jar to my local src tree and
compare the results between old and new docs/stubs generation.
Bug: b/78245848
Change-Id: I863430a563a25370f2ad65c19984cab37f611c2e
Merged-In: Ie0943d306af4176d965425ec85236cd173c1e870
The dark greylist is meant to contain non-SDK APIs which are "related"
to APIs accessible to apps without restrictions. The list used to be
built as all non-SDK APIs in the same package as those on the light
greylist. That is not sufficient and should include the public SDK API
packages too.
This patch modifies the makefile to generate a list of public API DEX
signatures with Doclava and then use that as a basis for the dark
greylist generation.
This should not be merged outside P branches as the build rules have
been migrated to Soong.
Bug: 80461842
Bug: 64382372
Test: make out/target/common/obj/PACKAGING/hiddenapi-blacklist.txt
Change-Id: Ief5e050280fbe0e87eba539fb73c34661d5fd83e
Merged-In: I357fcba75909495ba2b46b9ed1b532e65fee3fe1
Dark greylist has so far been populated with the remaining class
members of classes listed on the light greylist. This patch changes
the rule to include all remaining classes and class members in the
same package (sub-packages not included).
Bug: 64382372
Test: make -j64 out/target/common/obj/PACKAGING/hiddenapi-dark-greylist.txt
Change-Id: Icf3f60f1e776f092103c612fc3995ce0e66617ea
Previous CL introduced the concept of populating the dark greylist
with remaining members of classes on the light greylist. This breaks
the assumption that some methods/fields will always remain blacklisted.
Introduce a new file which forces their blacklisting and adjust the
build rules accordingly.
Bug: 64382372
Test: make out/target/common/obj/PACKAGING/hiddenapi-blacklist.txt
Change-Id: I8b20e03c50f4027a24d2a6081bedb08bc8a34011
This patch will iterate over all classes in the light greylist and
add the remaining (currently blacklisted) class members into the
dark greylist. This is meant to mitigate the impact of the feature
on legacy apps, in case their hidden API uses have not been detected
by our analyses. The dark greylist entries will be available to apps
targeting pre-P SDK versions, but blocked for apps targeting P or later.
Bug: 64382372
Test: make out/target/common/obj/PACKAGING/hiddenapi-dark-greylist.txt
Change-Id: Id1ef4ab523b3b4d1333b5fbf2b3e6622ef2be607
The build rules were getting messy and too difficult to extend.
Extract assertions into own functions, create shared variables.
Bug: 64382372
Test: make out/target/common/obj/PACKAGING/hiddenapi-blacklist.txt
Change-Id: Ie34adb8b5349b30daa2e9e4976d285f6d9711f0e
@removed APIs are not part of the public SDK but we do not want
to block access to them. Use the recently added removed-dex.txt
list of @removed API signatures and merge it into the hidden API
light greylist programmatically.
Note that due to Doclava's rule precedence, @removed APIs which
override a public SDK method are considered public and are
whitelisted. We have to intersect removed-dex.txt with private-dex.txt
to satisfy the rule that light greylist is a subset of private-dex.txt.
Bug: 78182899
Test: make out/target/common/obj/PACKAGING/removed-dex.txt
Change-Id: I44e54c405fc667d54a990b9ded1de8456802545e
CL Iba8869ce6e4f401a8e420ad83ab459d25bbbaae0 added Doclava support
to generate a list of @removed API. Add a rule which builds that
list.
Bug: 78182899
Test: make out/target/common/obj/PACKAGING/removed-dex.txt
Merged-In: Ifa912f8751025b7de24a982a1a227a9c27d18267
Merged-In: I80860c2b9f7213db65d0a9ca65bd645187aa0ce0
Change-Id: I688c14e0d2fbfafe9ac212e6abdc3593cb744ef9
I'm replacing this list with a for-loop in master, so it shouldn't need
updating in future (except for temporary apis).
Bug: 77588754
Test: make docs
Change-Id: Ib48218e303b53e2b16a13866e4423ee2ad1c2f4a
APIs which have not been explicitly greylisted have so far been put
on the dark greylist. This patch changes the default to blacklist and
therefore enables strict enforcement.
This reverts commit f712b23d56.
Bug: 64382372
Test: make
Change-Id: I1608b1adbe5dcafd13335691ddeb94abbb2c6e71
This patch adds a build-time rule that adds all members with signatures:
readObject(Ljava/io/ObjectInputStream;)V
readObjectNoData()V
readResolve()Ljava/lang/Object;
serialVersionUID:J
serialPersistentFields:[Ljava/io/ObjectStreamField
writeObject(Ljava/io/ObjectOutputStream;)V
writeReplace()Ljava/lang/Object;
to the hidden API light greylist. This is needed so that apps can retain
the ability to write their own serializers.
Bug: 64382372
Bug: 73255398
Test: make
Change-Id: I0103f47044e957bbff0a39230ff53562f3feddac
This reverts commit 16bfa11b73.
Reason for revert: Revert until b/76138670 is fixed
Bug: 64382372
Bug: 76138670
Bug: 76157445
Change-Id: Iaf6c76b773fbea4d4710b38808dee2e7e06f5e78
APIs which have not been explicitly greylisted have so far been put
on the dark greylist. This patch changes the default to blacklist and
therefore enables strict enforcement.
Bug: 64382372
Test: make
Test: device boots
Change-Id: Id38dd14382e9c2f0e853698ad7df7e9602084336
These will move into the dark greylist once we remove the UI toast.
Merge them with light greylist for now.
Bug: 64382372
Bug: 74589747
Bug: 74588266
Bug: 74586173
Bug: 74586969
Test: make
Change-Id: I8c1d3b67b763e8b14a66874705ba7165cf421e72
Merged-In: I5d0ec308a0187d67df6d9a4f0778c9285dc1e2af
We used to greylist @SystemApi and @TestApi individually, but we should
allow all of them to be used. Run Doclava in a separate pass to generate
a list of private APIs, assuming that @SystemApi and @TestApi override
the @hide annotation.
Bug: 64382372
Bug: 74346885
Test: check generated files
Change-Id: Ie3726a294a4fdeb03fc8888878b013c9ad5bd04b
com.android.internal.* is meant to be hidden from documentation,
but most of it is erroneously not hidden via @hide or -hidePackage
directives; why documentation is currently generated for Predicate
but not other classes from com.android.internal.util, and why some
but not all classes from that package show up in package-level
documentation (package-summary.html), is not currently understood.
There appears to be a behavior difference between OpenJDK 8 and
OpenJDK 9's javadoc that results in additional classes showing up
in package-summary.html. This CL fixes this by adding -hidePackage
directives for com.android.internal{.util}; other sub-packages of
com.android.internal do not currently show up in documentation and
are not touched by this CL.
Test: Patched this CL into the internal-master branch and ran:
USE_R8=true EXPERIMENTAL_USE_OPENJDK9=true make offline-sdk-docs
Checked that this removes all documentation for com.*
(com.android.internal.util was the only com.* package for which
documentation was previously generated).
In other words: Before this CL, [1] existed, but after
this CL, the entire directory subtree [2] does not exist.
Test: Checked that Predicate was already missing from stubs before this
CL. In other words, [3] already did not exist before this CL.
[1] out/target/common/docs/offline-sdk/reference/com/android/internal/util/Predicate.html
[2] out/target/common/docs/offline-sdk/reference/com
[3] out/target/common/obj/JAVA_LIBRARIES/android_system_stubs_current_intermediates/classes/com
Bug: 69736344
Bug: 69736236
(cherry picked from commit 97bb6cf371)
Merged-In: Ic9757f4966f54092aac0191896581fa4222cc634
Change-Id: Ic9757f4966f54092aac0191896581fa4222cc634
Based this on SMain@ 's changes in ag/1936024 , which added the O
API level for the O preview.
Doc is staged to:
go/dac-stage/reference/
For an example of a new API class with the watermark, see:
go/dac-stage/reference/android/media/MediaPlayer2.html
Test: make ds-docs
Bug: 73009741
Change-Id: I591419c903222c9ad0c541dcd4bfce6a38ba1f2c
This dependency is no longer required: it was added
for libcore when libcore was implemented in terms of
com.icu classes. libcore has since moved to android.icu
(in core-libart) and so the droiddoc dependency is no
longer required.
Test: make droid docs
Merged-In: I6e4e79a7df201fdc2cefa60037adf831593eaa0f
Change-Id: I6e4e79a7df201fdc2cefa60037adf831593eaa0f
This dependency is no longer required: it was added
for libcore when libcore was implemented in terms of
com.icu classes. libcore has since moved to android.icu
(in core-libart) and so the droiddoc dependency is no
longer required.
Test: make droid docs
Change-Id: I6e4e79a7df201fdc2cefa60037adf831593eaa0f
platformprotosnano is used by cts-amwm-util and this is causing
link-type check warning because cts-amwm-util is built using SDK but
platformprotosnano isn't.
Since platformprotosnano can actually be built with SDK APIs only,
setting LOCAL_SDK_VERSION to 'current' instead of building against
core-oj and core-libart which contain private APIs.
LOCAL_SDK_VERSION := core_current has been tried but it didn't work
because libprotobuf-java-nano is using Android APIs (thus marked as
java:sdk). java:core -> java:sdk dependency is not allowed.
Bug: 69899800
Test: m -j platformprotosnano
Change-Id: I14a9a80bb218dae63e8320b7aab40d7ad48a7a13
Parcelable shouldn't be in the list of parcelables in framework.aidl.
Remove it to fix warning when running aidl:
framework.aidl:287 attempt to redefine built in class android.os.Parcelable
Also make the dependency on sdk_parcelables not be order-only so
framework.aidl gets rebuilt when sdk_parcelables changes.
Bug: 73135791
Test: ParcelableDetectorTest
Test: out/target/common/obj/framework.aidl does not contain android.os.Parcelable
Change-Id: If5222879be9ec1e5fa08810adc624ec526ddc0ec
Bug: 64382372
This reverts commit 3f4136c3b7.
Reason for revert: Causing too many downstream issues together
with I2c1353d31386da447456b17f9643c0470128ee3d. Revert to
unblock pi-release and testing.
Bug: 73105914
Bug: 73103669
Bug: 73106486
Bug: 64382372
Bug: 73103081
Bug: 73119220
Bug: 73114663
Change-Id: I072dd571f779e2b5e405d21eecce5a60d1b3c7f2
Starting with DP1 we will move private APIs that have not been
explicitly greylisted into the blacklist. Modify Android.mk to
generate the API lists accordingly.
Bug: 64382372
Test: make, inspect out/target/common/obj/PACKAGING/hiddenapi-*
Change-Id: I1d817ba6b95058ad052a2c7663ef99257bdeffc1
In order to tune the API lists, we initialize the light greylist with
APIs we know are used by popular apps. All the other private APIs are
moved into dark greylist. Light greylist will be set to not warn at
all, while dark greylist will produce warnings. This will allow us to
collect logs and tune the lists without breaking all of our dogfooders.
Bug: 64382372
Bug: 72793280
Test: make
Change-Id: Ice6c487eeca8900e6a70abe1b87e8c211ef1066e
Protos are very noisy with MissingOverride and other warnings.
Bug: 72714520
Test: m javac-check-platformprotoslite RUN_ERROR_PRONE=true
Change-Id: I91cf96df12e82866dde36ab4f58b6ba7be9f2c4e
This change is meant for ART buildbots which build against a pinned
commit of the framework and thus do not have the commit which
introduced hidden API lists. Normal builds will now copy the blacklist
and dark greylist into the build folder first, and then generate the
light greylist as usual. If a buildbot does not have the framework
changes, it can create dummy API lists in the build folder before
starting the build and avoid the issue.
Test: make
Bug: 64382372
Change-Id: Ib6e53a45bcc917abb4ba67fdcbf01d4a19c2d56f
Android is beginning to put restrictions on the usage of private APIs.
In order to facilitate a transitionary period, some APIs will remain
accessible but issue a warning (greylist), other will see restrictions
right away (blacklist).
This patch create two new text files which will be used to store manual
lists of dex signatures of hidden APIs. These are the blacklist and
dark greylist. They should be mutually exclusive and both be subsets of
INTERNAL_PLATFORM_PRIVATE_DEX_API_FILE. The last list, light greylist,
is generated as INTERNAL_PLATFORM_PRIVATE_DEX_API_FILE minus the two
manual lists.
Bug: 64382372
Test: m
Change-Id: Ia694ef79bece819c87db853ccaea5e95f38d3e84
to check if the report is uploadable.
Move incidentheader.proto to libincident so statds is able to include a lite
proto class for incident header.
Change IncidentReportArgs to add the proto object instead of serialized
bytes to prevent caller gives meaningless data.
Bug: 70241842
Test: push config to statsd and verify incidentd generate the report
with correct header.
Change-Id: If95b655be71047b019b229e5903a08f3c21a1f29
This CL invokes the perfetto client utility to start the
collection of a trace when an anomaly that subscribed to
Perfetto is detected. The code simply spawns the
/system/bin/perfetto client and passes the trace config via
stdin. The client takes care of the dropbox upload.
The CollectPerfettoTraceAndUploadToDropbox() function does
NOT wait for the full trace collection (in order to avoid
blocking statsd) and instead returns immediately after having
spawned perfetto.
Change-Id: I4f02067bad7a46ede7b6e4841cdcf381c1a4e2a7
Bug: 71795552
Doclava now generates API signatures of classes and their members
which are not part of the public SDK. Adjust the arguments passed
to Doclava to enable that feature.
Bug: 64382372
Test: m
Change-Id: I47de683dd2b00fce73b82581a13fbe1013ef625f