Earlier this year the "apilint.py" script was removed from the build,
since it's been replaced by Metalava. However, several features
haven't been ported yet, so this change revives them to support the
SDK finalization process.
This change also updates the script to handle "Signature format: 2.0"
files, and reads the API surface from a directory which contains
several ".txt" files to support the new Mainline API structuring.
Bug: 189224267
Test: manual
Change-Id: Ifc4c24a7e159db6725897800d67947d1fd8b9880
If the Ignore-AOSP-First tag is in a commit message, it means the
committer is intentionally bypassing the AOSP source of truth. Check
for this tag in the AOSP-first presubmit hook so that devs don't have
to turn off hooks to get past the AOSP-first policy in exceptional
cases.
Bug: 189139990
Change-Id: I18231b93d7f213c13ace0a0af24bb20a394cc50f
Test: Manual testing with various commit messages
Calling pop_back on an empty container results in undefined behavior.
aapt2 dump badging seg faults when used on an APK with no uses-sdk.
Bug: 188461703
Test: aapt2 dump badging HelloAppTest.apk
Change-Id: I8d8308a06d542f003ae399629bdbfb5b845674fc
This function, ironically, is being removed. This is one of only two
users, and it's pretty hard to use correctly. In this case, using one
of the existing constructors to keep a prefix seems clearer even in a
world where remove() was better implemented.
Test: treehugger
Change-Id: Icdf02d9fcc059c396c13787d9bb4e8bda5658656
When passing a single iterator to std::vector::eraase, only element at
that iterator is removed. If no elements are filtered, std::remove_if()
returns the end iterator, attempting to erase() the end iterator can
cause segmentation fault. This bug causes signing test to fail.
https://atp.googleplex.com/tests/asit/ota/signing?tabId=test_run
Test: aapt2
PRODUCT/app/CalculatorGooglePrebuilt/CalculatorGooglePrebuilt.apk
Bug: 175789289
Bug: 178554651
Change-Id: I813055238bef2dcbdf76172a00b3f44ae940b759
(cherry picked from commit b88ccf80aa)
Fixes BinaryResourceParser loading of alias chunk and makes changes
that did not get committed in 2fedba9a32.
Bug: 183411356
Test: aapt2_test
Change-Id: Ieff9166100019f38ddcfe900014709b15db24e43
To allow apps that compiled against a pre-release SDK to continue
working for a period of time after API finalization, a new tag,
<staging-public-group-final>, has been added to aapt2.
When finalizing the framework resource API, converting
<staging-public-group> tags to <staging-public-group-final> will
cause aapt2 to generate the resource table so that there is a resource
entry for the old non-finalized (staged) resource ID and another entry
for the finalized resource ID of newly finalized resources. This allows
an application that compiled against the pre-release SDK to continue
resolving resources using pre-release resource IDs.
All references to pre-release resource IDs will be rewritten to their
finalized resource IDs through the information stored in the new staged
alias chunk. This allows applications compiled against
<staging-public-group> resources to use the newly finalized
resource ID without re-compilation.
When an application is re-compiled against the SDK with
<staging-public-group-final> tags, the application will use the
finalized resource IDs.
This change limits the use of the alias chunk to the framework for S.
Bug: 183411356
Test: aapt2_test
Change-Id: Iba1c3033c3c2f32de8e4a19b58d3921c971092c4
Unsigned subtraction lead to arithmetic overflow which caused aapt
to reference the vector out of its bounds.
Bug: 175789289
Test: dump badging on a manifest with no uses-sdk tag
Change-Id: Id1b96376a8bfe13c0c195bb6f62b681c3d686034
Adds aapt to aapt2_artifacts dist target so the binary will appear
in the ub-aapt2-release branch.
Bug: 175789289
Test: none
Change-Id: I8963eecfd7667196fc3651a00d9a744cddd2c24b
When an APK defines multiple "uses-sdk" tags, the Android runtime only
uses the minSdkVersion and targetSdkVersion values from the last
occurrence of the "uses-sdk" tag.
For example an application with the following tags:
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="29"/>
<uses-sdk android:maxSdkVersion="28"/>
Will have the following version codes at runtime:
minSdk=1 targetSdk=1
Another example:
<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="28"/>
<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="19"/>
Will have the following version codes at runtime:
minSdk=5 targetSdk=19
AAPT2 must print the version data from only the last tag, skipping other
occurrences of the tag.
Bug: 175789289
Test: manual
Change-Id: If0fece7de1d96046221c89d1b12515bc5c15c301
When an APK defines multiple "uses-sdk" tags, the Android runtime only
uses the minSdkVersion and targetSdkVersion values from the last
occurrence of the "uses-sdk" tag.
For example an application with the following tags:
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="29"/>
<uses-sdk android:maxSdkVersion="28"/>
Will have the following version codes at runtime:
minSdk=1 targetSdk=1
Another example:
<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="28"/>
<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="19"/>
Will have the following version codes at runtime:
minSdk=5 targetSdk=19
AAPT must print the version data from only the last tag, skipping other
occurrences of the tag.
Bug: 175789289
Test: manual
Change-Id: Ic855ff920d0b7abedd250d977bfa55189f4c8946
AAPT2 Macros are compile-time resources definitions that are expanded
when referenced during the link phase.
A macro must be defined in the res/values.xml directory. A macro
definition for a macro named "foo" looks like the following:
<macro name="foo">contents</macro>
When "@macro/foo" is used in the res/values directory or in a compiled
XML file, the contents of the macro replace the macro reference and
then the substituted contents are compiled and linked. If the macro
contents reference xml namespaces from its original definition, the
namespaces of the original macro definition will be used to determine
which package is being referenced.
Macros can be used anywhere resources can be referenced using the
@package:type/entry syntax.
Macros are not included in the final resource table or the R.java since
they are not actual resources.
Bug: 175616308
Test: aapt2_tests
Change-Id: I48b29ab6564357b32b4b4e32bff7ef06036382bc
For future macro support, aapt2 must be able to convert Reference
values into other Value types. Currently a DescendingValueVisitor is
used to visit all of the References in a ResourceTable or a compiled
XML file to set their resource ids during the link phase. This was fine
since we were only mutating the resource id of the visited Reference.
A macro may reference a String, BinaryPrimitive, or any other Item
type. During the link phase, we will need to transform references to
macros into the values of the macros.
The only parameter in the methods of the ValueVisitor interface is a
raw pointer to the type being visited. The visitor interface does not
support reassigning the visited type to a different type.
ValueTransformer is a new interface for consuming a Value type and
transforming it into a compatible Value type. This change refactors
Value::Clone to use this interface.
Bug: 175616308
Test: aapt2_tests
Change-Id: Ic1b9d718b932c208764114cd9c74d880e189ccb0
Stops it being specific to frameworks/base. This change works because
$2 is $(REPO_ROOT) and $(REPO_ROOT)/frameworks/base is the same as $PWD
when this script is used in the frameworks/base repo.
Also removes boot/ from the path that identifies hidden API flag files.
This keeps the directory structure needed in the repositories into
which hidden API flag files will be moved simple by removing the need
to have a boot/ directory. The hiddenapi/ directory is required as the
files need their own separate OWNERS file.
A follow up change will move this file into tools/platform-compat to
allow it to be used by other repos.
Bug: 177892522
Test: try and upload changes to hiddenapi flag files
Change-Id: Ifb3690e7c596249fda84eff82f5a53f0b1b6f991
The com.android.i18n.phonenumbers is not used by any libcore code and
is no longer managed by the libcore team.
Bug: 177892522
Test: n/a
Change-Id: Ib445e652746a8b9b42c6bee7d27a062d6b62a4ec
The top-level Android.bp file is very large, so move modules that can be
in subdirs.
Also rename the vague "base_defaults" module to something more suitable.
Bug: 185128417
Test: m
Change-Id: I5f3106b74edb91ac9db5b3e66cc61566d0f16e9b
The top-level Android.bp file is very large, so move modules that can be
in subdirs.
Also rename the vague "base_defaults" module to something more suitable.
Bug: 185128417
Test: m
Merged-In: I5f3106b74edb91ac9db5b3e66cc61566d0f16e9b
Change-Id: I5f3106b74edb91ac9db5b3e66cc61566d0f16e9b
The config/hiddenapi-*.txt files have moved so this change updates the
preupload scripts to match their new location.
Test: Modify the boot/hiddenapi/hiddenapi-*.txt files in various ways
to verify the scripts fail.
Change-Id: I725458e809d9871b2c21bc4e18f62441aaa775a9