summaryrefslogtreecommitdiff
path: root/tools/aapt2/xml/XmlDom.cpp
AgeCommit message (Collapse)Author
2021-04-21Aapt2 ValueTransformerRyan Mitchell
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
2020-03-06Suppress bugprone-use-after-move warningsChih-Hung Hsieh
Bug: 150783499 Test: WITH_TIDY=1 make Change-Id: Ifdd5d89d2207caba765e8f74e8a86f6b6b4ff609
2019-03-05Add --trace_folder to aapt2Fabien Sanglard
Add a tracing API and instrument key functions in order to profile aapt2 bottleneck. The API allows to generate systrace fragment files. Impact on performance is neglibible with each Trace requiring less than 1us and the final Flush operation at the end of a command requiring around 40us. Bug: None Test: None Change-Id: I51b564d3694e9384679f43b878b32295527dddf6
2018-05-30Add support for --replace-version to aapt2Colin Cross
Implement --replace-version to match aapt1. Bug: 79755007 Test: aapt2_tests Change-Id: Iee2bd9a3981c7d4681509f18b735c6e9e6c1a336
2018-02-23AAPT2: Fix issue with String flattening in XmlFlattenerAdam Lesinski
Compiled Strings (previously not encountered) in an XML resource were using a different StringPool than the one being referred to in the XmlFlattener, and so the indices were all wrong. Bug: 72700446 Test: make aapt2_tests Change-Id: I663924f8fad50fd4c69cfa196318dc63fb641a25
2018-02-14AAPT2: Fix issue with deserializing binary XMLAdam Lesinski
We assumed that a raw text value set for an attribute meant there were no compiled values set either. This would only really happen for attributes that did not belong to any namespace (no prefix:), since we always kept their raw string values in case some code relied on it. Bug: 72700446 Test: make aapt2_tests Change-Id: Icba40a1d4b181bfe7cad73131c4dbe5ba7f8b085
2017-12-04AAPT2: Embed version of framework an app was compiled against.Adam Lesinski
This change injects the 'android:compileSdkVersion' and 'android:compileSdkVersionCodename' into an app's AndroidManifest.xml, whose values are dervied from the version name and version code of the framework AndroidManifest.xml that is being linked against. Bug: 63388434 Test: make aapt2_tests Change-Id: I7b607192ecb337307c4bcb5770e7f716c6d4c9d2
2017-11-01AAPT2: Add convert commandAdam Lesinski
This command allows a developer to convert their proto APK (generated from the link phase using --proto-format) into a binary APK suitable for use on device. aapt2 convert -o output.apk input.apk Test: manual + make aapt2_tests Change-Id: I10a7c33bb4b57006d01fe00a8bf92f78e04e7e50
2017-10-19AAPT2: Define and Implement AAPT Container FormatAdam Lesinski
AAPT Container Format (.apc) is a simple container that enumerates the various intermediate files that AAPT2 generates during the compile phase. The format is defined in formats.md. For now, continue using the .flat extension for the container file, and keep making use of the .flata zip for storing multiple files. This will allow easier integration with existing build systems and allow the evolution of the APC format to better handle arbitrarily large files. Test: make aapt2_tests Change-Id: Id7216e5b76316bdd683f0fa4eaf2d2da273ba815
2017-09-28AAPT2: Cleanup Visitors for XML and ValuesAdam Lesinski
Test: make aapt2_tests Change-Id: Ib61f64c155a380115610edeaf2d65e60258a2426
2017-09-11AAPT2: Handle inflating compiled attributes.Shane Farmer
* Added the resource ID pulled from the XML parser into the compiled attribattribue. This allows binary attributes such as the version code and min SDK values to be available whern flattening the XmlResource back into an APK file. * Only add a compiled value if the attribute value was not a string. This allows string values like the package name and version name to be flattened back into an APK file. Before making this change, aapt would segfault when dumping the manifest and dumping badging would be missing values. After making this change, the manifest and badging are dumping correctly. Test: ran unit tests Test: manually ran optimize against an APK Change-Id: I885bb06557b032b9f702e8065d637d359c2b519b
2017-08-23AAPT2: Fixup namespace implementationAdam Lesinski
A few pieces were missing in the namespace mangling implementation. Namespace aware libraries now work, along with R class generation. Bug: 64706588 Test: make AaptTestNamespace_App Change-Id: I12f78d6aa909e782c0faf7ceaa36058f2e6c864a
2017-08-17AAPT2: Change XmlDom to exclude Namespace as a nodeAdam Lesinski
In preparation for exporting an XML proto format for UAM to consume, this change brings the XML DOM API more in line with other APIs that do not make the Namespace a separate node. Treating Namespace declarations as just properties of an Element node makes the implementation of algorithms much simpler, as the constraints that Namespace nodes have only one child are now built in and traversing to find Element nodes is much simpler. Also made a bunch of quality of life improvements, like formatting and comment style. Test: make aapt2_tests Change-Id: Ib97ff1c4252b7907e2cc1f13a448dc4ca3b809a4
2017-08-03AAPT2: Fix windows unicode path issuesAdam Lesinski
Mingw64 was being difficult, so instead of defining a wmain entrypoint, the command line parameters are parsed manually using built-in Windows methods that support Unicode. The results are converted to UTF8 and handled just like the rest of the linux/mac version of the code. This also removes dependencies on std::istream in favour of a FileInputStream which calls the appropriate unicode version of open to read a file. No speed regressions found on Linux or MacOS. Bug: 62336414 Bug: 63830502 Test: manual Change-Id: I597da51e33729ed1b98bf246e7e773337fd3fee8
2017-05-24AAPT2: Implement attribute compat versioningAdam Lesinski
This change defines some hardcoded rules to degrade attributes in newer SDKs to specific older attributes. An attribute with a degrade rule will generate a new XML for the API in which the attribute resulting from the degradation was introduced. Since API 22 (Lollipop MR1), attributes are correctly ignored and do not need to be versioned. In XML files defined for APIs 22+, the original and degraded attributes coexist in the same XML file. One such example is paddingHorizontal, introduced in API 26. paddingHorizontal degrades to paddingLeft and paddingRight, which were both introduced in API 1. Bug: 35763493 Test: make aapt2_tests Change-Id: I4aa8755a9ee2c0cc5afdc55c3d30093fd3a47f3d
2017-04-28AAPT2: Fix string escapingAdam Lesinski
We were processing escaped strings too early, before parsing of values into types. Now the escaped strings get processed when they are being flattened. Bug: 37715376 Test: make aapt2_tests Change-Id: Ic59aa2e3a20c40756c219752ff74b2a4f8a602ba
2017-04-13AAPT2: Fix order-of-destruction crashAdam Lesinski
Make sure that users of StringPool are destroyed before the StringPool itself. Test: valgrind aapt2 optimize -o opt.apk out/target/common/obj/APPS/framework-res_intermediates/package-export.apk Change-Id: I140c2d32f8449028976795d5d6865d83e1409b53
2017-04-10AAPT2: Share split functionality between link and optimizeAdam Lesinski
Generating splits should be possible to do from the optimize command. This means that a lot of infrastructure around split APKs can be shared by both the optimize and link phase. Bug: 35925830 Change-Id: Ia88b9e4bff300a56353b2f7a4a2547c8eb43a299 Test: manual
2017-03-02AAPT2: Fix escaping sequence processing in XML parsingAdam Lesinski
Bug: 35483813 Test: make aapt2_tests Change-Id: I68baba17ab3639c220b734a2a68d86aad0dedf8c
2017-01-17Move StringPiece to libandroidfwAdam Lesinski
libandroidfw needs to make use of StringPiece, so move it to libandroidfw and update all code referencing StringPiece in aapt2. Test: make libandroidfw_tests libaapt2_tests Change-Id: I68d7f0fc7c651b048d9d1f5e7971f10ef5349fa1
2016-10-27AAPT2: Insert <uses-sdk> element before <application>Adam Lesinski
PackageParser on the device uses the targetSdkVersion of the app while it parses <application>. That means that if the <uses-sdk> tag comes after <application>, the targetSdkVersion is assumed to be 0. Test: make libaapt2_tests Change-Id: I60f2179a7ff44e7419217afb53f3d24f8c030f6e
2016-10-26AAPT2: Rename to match new styleAdam Lesinski
Use Google3 naming style to match new projects' and open source google projects' style. Preferred to do this in a massive CL so as to avoid style inconsistencies that plague legacy code bases. This is a relatively NEW code base, may as well keep it up to date. Test: name/style refactor - existing tests pass Change-Id: Ie80ecb78d46ec53efdfca2336bb57d96cbb7fb87
2016-08-31AAPT2: Add Inline Complex XML supportAdam Lesinski
See: https://developer.android.com/guide/topics/resources/complex-xml-resources.html Change-Id: I8274c85e25cabf90423141c228697e873167d136
2016-07-13AAPT2: Remove usage of u16stringAdam Lesinski
For legacy reasons, we kept around the use of UTF-16 internally in AAPT2. We don't need this and this CL removes all instances of std::u16string and StringPiece16. The only places still needed are when interacting with the ResTable APIs that only operate in UTF16. Change-Id: I492475b84bb9014fa13bf992cff447ee7a5fe588
2016-04-06AAPT2: Enable windows build and make sure it buildsAdam Lesinski
Mingw32 4.8 is kind of picky with macros and some complicated template stuff. Luckily there was another way to represent the SFINAE code that works on all platforms. Yay! Change-Id: Idc2e38f47bfdc57b394550bfa0f53cc0b825df25
2015-11-19AAPT2: Fail compiling when private symbols are referencedAdam Lesinski
Also moved some XML specific stuff into its own directory, and refactored ReferenceLinker a bit. Change-Id: I912247a82023c1bbf72dc191fbdaf62858cbec0c