Prebuilt stub not available to platform is handled correctly
When a shared library providing stubs is included in an APEX, only the stub variant (i.e. version:"1", etc.) gets emitted to Android.mk. This enforces that everything in the Make world to link to the stub providing only the public APIs of the library. The non-stub variant (i.e. version:"") isn't exposed, otherwise, others will be able to access private part of the lib which isn't guaranteed to be stable. This has been done by unhiding the stub variant when it is known that the library is actually included in an APEX. Note that stub variants are by default hidden. The above mechanism however doesn't work when the shared library is replaced by a prebuilt and when the APEX is also replaced by a prebuilt. Then, the fact that the prebuilt library is actually in the APEX gets lost. In that case, AnyVariantDirectlyInAnyApex() returns false for the prebuilt library. As a result, the stub variant remains hidden and not emitted to Android.mk. This change fixes the problem by checking if the lib isn't available for the platform at all. If not available for the platform (e.g. apex_available doesn't have "//apex_available:platform"), the lib is assumed to be included in an APEX even when it actually didn't go through the apex mutator (... because it's a prebuilt). Bug: 175166063 Test: m nothing Change-Id: I41fabd5b368baecf4dc3c5a080b466f8bcd79d77
Loading
Please register or sign in to comment