• Home
  • History
  • Annotate
  • only in /frameworks/base/tools/aapt2/link/
History log of /frameworks/base/tools/aapt2/link/
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
90919978e7ccf7dc25622e9d039a7e87ebe7ba11 02-Jun-2017 Adam Lesinski <adamlesinski@google.com> DO NOT MERGE: AAPT2: Allow undefined resources (placeholders)

A resource defined like so:

<item type="drawable" name="foo" />

should be assigned the value @null.

The only exception is for <string> resources, which are given the
empty string value (since <string></string> is ambiguous). The decision
to use "" is based off the fact that old AAPT used to assign "" to all
undefined resources, even non-string ones.

Bug: 38425050
Test: make aapt2_tests
Change-Id: Ib3e0f6f83d16ddd8b279c9fd44a07a37867b85e9
eferenceLinker.cpp
f42c86660d15c50ff7431b89342e590bcc1bed37 31-May-2017 Adam Lesinski <adamlesinski@google.com> Merge "AAPT2: Allow merging of Style attributes from overlays" into oc-dev
5924d8c9ab7bd8614e8bd99864903ce9d50f3bf7 31-May-2017 Adam Lesinski <adamlesinski@google.com> AAPT2: Allow merging of Style attributes from overlays

Previously style overlays would completely override an existing style.
To be compatible with AAPT, styles now merge with the overlay, allowing
the overlay's attributes and parent to take precedence.

Bug: 38355988
Test: make aapt2_tests
Change-Id: Id25c7240050a43e6a4a177c6e3d51e048d0cceb5
ableMerger.cpp
ableMerger_test.cpp
4488f1c74a0f7df09f2b201f7caa228d729e8389 27-May-2017 Adam Lesinski <adamlesinski@google.com> AAPT2: Fix <add-resource> tag for overlays

Bug: 38355988
Test: make aapt2_tests
Change-Id: Iea8887f55f8ceb2c15bd963405fd132916173c0c
ableMerger.cpp
ableMerger_test.cpp
c744ae8aca97edfb2422598ea620e8219449fa9b 18-May-2017 Adam Lesinski <adamlesinski@google.com> AAPT2: Implement attribute compat versioning

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
utoVersioner.cpp
inkers.h
eferenceLinker.cpp
mlCompatVersioner.cpp
mlCompatVersioner.h
mlCompatVersioner_test.cpp
mlReferenceLinker.cpp
mlReferenceLinker_test.cpp
4b585db64f1dda5c343855e63d7d4b6fc0c6d729 13-May-2017 Adam Lesinski <adamlesinski@google.com> AAPT2: Allow <uses-permission-sdk-23> in manifest

Bug: 38269610
Test: build tools/aapt2/integration-tests/AppOne
Change-Id: I1d0b87aa36f6bf82aab146339acf8848166b218d
anifestFixer.cpp
63699b128e009c65affe50995bd8f86eca1a8694 09-May-2017 Adam Lesinski <adamlesinski@google.com> AAPT2: Ignore namespaced elements in AndroidManifest.xml

Some third party stores/tools expect manifest elements
under their namespace, and AAPT2 shouldn't fail if these
are present.

Bug: 37943705
Test: make aapt2_tests
Change-Id: I87b7500c7da5e8e79fc2a78b30e8e4334124af3d
anifestFixer_test.cpp
7cf8ca95aa587894cb80a38f9a1e4245335a9a73 30-Apr-2017 TreeHugger Robot <treehugger-gerrit@google.com> Merge "AAPT2: Fix typo in manifest validation expectation" into oc-dev
c10c0d0db24f2d3fbdeabf7aebaabf527786bba5 28-Apr-2017 Adam Lesinski <adamlesinski@google.com> AAPT2: Fix typo in manifest validation expectation

Change expected tag from grant-uri-permissions -> grant-uri-permission

Bug: 37714102
Test: manual
Change-Id: Ic0178b83fff8de961cb3fdfe38023eaf111237ee
anifestFixer.cpp
48448e8a310e72eb2846ad0f86672ce4f0b47e47 27-Apr-2017 Adam Lesinski <adamlesinski@google.com> AAPT2: Fix string escaping

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
mlReferenceLinker_test.cpp
25783cab0b8a1e294d0706d3630756a16668a47b 24-Apr-2017 Adam Lesinski <adamlesinski@google.com> AAPT2: Allow <path-permission> tag in <provider>

Fix a typo where the wrong tag name was expected under <provider>
in AndroidManifest.xml.

Bug: 37627250
Test: manual
Change-Id: I45afd09b4ff25feb320f7991e16c4172e20dd417
anifestFixer.cpp
d0f492db038c6210c1138865d816bfb134376538 04-Apr-2017 Adam Lesinski <adamlesinski@google.com> AAPT2: Share split functionality between link and optimize

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
ink.cpp
f4dacf29cc995fad4aea8e8f25811f9ee4685d91 07-Apr-2017 Mihai Nita <mnita@google.com> AAPT2: fixing the -c flag being ignored

Bug: 36999175
Test: manual

Change-Id: Id9a4a00a3b37bc088d86df7c75bbe711536b980f
ink.cpp
113ee097386380daa8f01d74916504a9a1338a63 04-Apr-2017 Adam Lesinski <adamlesinski@google.com> AAPT2: Allow multiple -c flags

AAPT allows multiple -c flags in addition to separating -c arguments
with commas.

Bug: 35671619
Test: manual
Change-Id: I90491968e8ea2b28e3cd6e9246bcdd62bd6d6a3c
ink.cpp
06460ef0d7072114ea3280e1650f77f55e7223f4 15-Mar-2017 Adam Lesinski <adamlesinski@google.com> AAPT2: Fix up file IO

This also enables an AAPT behavior that CTS tests have
come to depend on.

Small files that compress negatively (get larger) are stored
uncompressed. Some CTS tests assume this and try to open these
files by mmapping them, which is only possible if they are
uncompressed.

Bug: 35461578
Test: make aapt2_tests
Change-Id: Id622a6150fe72477ad65d67d1bad897a8ee2ffb9
ink.cpp
b0c47ef8779e445865e63355ab66265461e1f2a3 07-Mar-2017 Adam Lesinski <adamlesinski@google.com> AAPT2: Finish support for feature splits

- Prefix the config split name generated from a feature split with the
name of the feature split.
- Add the 'configForSplit' attribute to the <manifest> tag of a config
split and give it the same name as the feature split it was generated
from.
- Look for the featureSplit attribute in <manifest> and automatically
convert it to 'split' and inject 'android:isFeatureSplit="true"'.

Feature splits should be written like so:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.foo.example"
featureSplit="feature_b">

<uses-split android:name="feature_a" />

...
</manifest>

Bug: 34703094
Test: manual
Change-Id: I01b5c4a9aa03a2d25ef1e87bc7874b57c9deede9
ink.cpp
anifestFixer.cpp
b39ad7c9f66877f92ea8583aa8b7b5a8daa6031e 13-Mar-2017 Adam Lesinski <adamlesinski@google.com> AAPT2: Add -A (assets) support

Looks like the build system doesn't support assets/ for
resources, so we will re-introduce them in aapt2, even though
we're just copying them around and they would be better
suited for inclusion in the APK when classes.dex gets inserted.

Bug: 35461578
Test: CTS test android.content.res.cts.AssetManager#testAssetOperations should pass
Change-Id: I18361d7367d476806bcf7154ee76df3f0e83b565
ink.cpp
f34b6f4f2b969b47a3f371eb9549e92ef1680d91 04-Mar-2017 Adam Lesinski <adamlesinski@google.com> AAPT2: Add --package-id flag for feature-split suppport

Bug: 35928935
Change-Id: Ia8496505e61cfcfdb8f9f62366d2f36e453db111
Test: make aapt2_tests
ink.cpp
eferenceLinker.cpp
eferenceLinker.h
eferenceLinker_test.cpp
mlReferenceLinker.cpp
b5dc4bd49a036e3403ca17e961d2c8e13e038295 23-Feb-2017 Adam Lesinski <adamlesinski@google.com> AAPT2: Few tweaks to get shared-libraries working

Test: manual (building shared support library demo)
Change-Id: I4730645aa92ba1893baf67ffe35fbd4aac0f8e46
ink.cpp
anifestFixer.cpp
eferenceLinker.cpp
ableMerger.cpp
d48944a745f9ed121e6bde22ef6feb3a44fbec39 21-Feb-2017 Adam Lesinski <adamlesinski@google.com> AAPT2: Rename strip phase to optimize

- Allow resource deduping, version collapsing, and sparse resource
encoding.

Test: manual
Change-Id: Ia4aa892ab5b06ba1d5ea4a6efb51b00bc3a980c4
ink.cpp
inkers.h
esourceDeduper.cpp
esourceDeduper_test.cpp
ersionCollapser.cpp
ersionCollapser_test.cpp
ceb9b2f80f853059233cdd29057f39a5960a74ae 16-Feb-2017 Adam Lesinski <adamlesinski@google.com> AAPT2: Shared library support

Test: make aapt2_tests
Change-Id: I98dddf1367e6c0ac425bb20be46e6ff05f4f2f45
ink.cpp
anifestFixer.cpp
rivateAttributeMover.cpp
rivateAttributeMover_test.cpp
eferenceLinker.cpp
eferenceLinker.h
mlReferenceLinker.cpp
c8f71aa67ea599cb80205496cb67e9e7a121299c 08-Feb-2017 Adam Lesinski <adamlesinski@google.com> Add ResTable_sparseTypeEntry support

Benchmarks on bullhead-userdebug show that there is a negligent
performance impact when using sparse entries on a 30% loaded
sparse type of 1000 resources.

Benchmark Time CPU Iterations
-----------------------------------------------------------------------------------
BM_SparseEntryGetResourceSparseLarge 255 ns 254 ns 2751408
BM_SparseEntryGetResourceNotSparseLarge 254 ns 254 ns 2756534

Bug: 27381711
Test: make libandroidfw_tests aapt2_tests
Change-Id: I051ea22f2f6b2bc3696e446adc9e2a34be18009f
ink.cpp
672384b41e1fc7195424533b7aa6753fb771a6cb 06-Feb-2017 Pierre Lecesne <lecesne@google.com> Allow for multiple preferred densities in the strip command.

Test: Unit tests pass.

Change-Id: I1f27ac8c36ff3489e4c8e4fce7f3d9cb31df6906
ink.cpp
86d67df8d57b9537666f9b54a9ca563779a2288b 31-Jan-2017 Adam Lesinski <adamlesinski@google.com> AAPT2: Support CtsContentTestCases build

- Add <feature-group> to ManifestFixer.
- Support <meta-data> in <instrumentation>
- Add support for <bag> and type="configVarying". Some CTS tests use this
old notation, we need to support it (even though configVarying isn't
anything supported by the framework convention).

Change-Id: I6946fa633ce513ea8437c1496db883cf27dcf6de
Test: make aapt2_tests
anifestFixer.cpp
anifestFixer_test.cpp
4d35cca96ce55eb29d1948086214f91ae94e9adb 18-Jan-2017 Yuichi Araki <yaraki@google.com> AAPT: Add --no-version-transitions flag

Add a new flag to disable versioning of Transition related XMLs.
Transition support library will use this to handle these XMLs on older
API levels.

Test: make libaapt_tests AaptTestAppOne
Bug: 34427868
Change-Id: I66e81cca049e71ef6704177b2ca21c9cdeaff78f
ink.cpp
d5083f6f6b9bc76bbe64052bcec639eee752a321 17-Jan-2017 Adam Lesinski <adamlesinski@google.com> Move StringPiece to libandroidfw

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
ink.cpp
anifestFixer.cpp
anifestFixer_test.cpp
eferenceLinker.cpp
ableMerger.cpp
ableMerger.h
ersionCollapser_test.cpp
38665547bb10f65f72d3358fb16cdc63d5febf15 28-Dec-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Treat non-AAPT attributes as Attributes with no format specified.

Attributes in XML like "class" should be treated as attributes with no
format specified. That means that something like 'version="1"' will
be interpreted as an Integer value instead of as a string.

This is more in line with the old AAPT behaviour.
Bug: 30763349
Test: make libaapt2_tests

Change-Id: I02fe41617e3c62c354714056198ef480d62afee7
mlReferenceLinker.cpp
mlReferenceLinker_test.cpp
5119e517308b84011fbd4d1a013296f4f5ffb8e4 06-Dec-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Allow <meta-data> in <manifest>

Bug:32171613
Test: libaapt2_tests
Change-Id: I30fdd9475ff7dff6ceb0ff46a4a00991b72db68b
anifestFixer.cpp
anifestFixer_test.cpp
e343eb145c42d00c4fd3fdde93cd0be55cb5b855 28-Oct-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Insert <uses-sdk> element before <application>

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
ink.cpp
anifestFixer.cpp
anifestFixer_test.cpp
ce5e56e243d262a9b65459c3bd0bb9eaadd40628 22-Oct-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Rename to match new style

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
utoVersioner.cpp
utoVersioner_test.cpp
ink.cpp
inkers.h
anifestFixer.cpp
anifestFixer.h
anifestFixer_test.cpp
rivateAttributeMover.cpp
rivateAttributeMover_test.cpp
roductFilter.cpp
roductFilter.h
roductFilter_test.cpp
eferenceLinker.cpp
eferenceLinker.h
eferenceLinker_test.cpp
esourceDeduper.cpp
esourceDeduper_test.cpp
ableMerger.cpp
ableMerger.h
ableMerger_test.cpp
ersionCollapser.cpp
ersionCollapser_test.cpp
mlNamespaceRemover.cpp
mlNamespaceRemover_test.cpp
mlReferenceLinker.cpp
mlReferenceLinker_test.cpp
6a396c1abb4e52f5a8fed5fab204ebc7b8e16dec 20-Oct-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Error on uncompiled XML or PNG files in link phase

Incorrectly passing text XML and unprocessed PNG files to
the AAPT2 link phase should raise an error.

Test: manual incorrect invocation of aapt2
Change-Id: Iab47f99bc378b5d1c4f4d87098f08243b9a4dc6a
ink.cpp
cacb28f2d60858106e2819cc7d95a65e8bda890b 19-Oct-2016 Adam Lesinski <adamlesinski@google.com> Use Google3 style guide with .clang-format

Test: style change only, builds ok
Change-Id: I885180e24cb2e7b58cfb4967c3bcb40058ce4078
utoVersioner.cpp
utoVersioner_test.cpp
ink.cpp
inkers.h
anifestFixer.cpp
anifestFixer.h
anifestFixer_test.cpp
rivateAttributeMover.cpp
rivateAttributeMover_test.cpp
roductFilter.cpp
roductFilter.h
roductFilter_test.cpp
eferenceLinker.cpp
eferenceLinker.h
eferenceLinker_test.cpp
esourceDeduper.cpp
esourceDeduper_test.cpp
ableMerger.cpp
ableMerger.h
ableMerger_test.cpp
ersionCollapser.cpp
ersionCollapser_test.cpp
mlNamespaceRemover.cpp
mlNamespaceRemover_test.cpp
mlReferenceLinker.cpp
mlReferenceLinker_test.cpp
77788eb4cf0c5dba0f7370192e40364fe853050a 07-Sep-2016 Alexandria Cornwall <acornwall@google.com> AAPT2: Add dominator tree analysis and resource removal

Added dominator tree analysis of resource configurations for each
resource entry to allow deduping of resource entries if:

1. The configuration for the resource entry's value is dominated by
a configuration with an equivalent entry value.

2. All compatible configurations for the entry (those not in conflict
and unrelated by domination with the configuration for the entry's
value) have an equivalent entry value.

Bug: 30051199
Test: make libaapt2_tests && libaapt2_tests
Change-Id: I66468d3014a2d6097a94b039ac1028f9f461c7d3
ink.cpp
inkers.h
esourceDeduper.cpp
esourceDeduper_test.cpp
a0b929d27f284be12ac70342cba984abe17f719c 19-Sep-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Allow <compatible-screens><screen> in AndroidManifest.xml

Change-Id: I1e7c7211be1d9caea4174f7cac067c2565879d04
anifestFixer.cpp
871f2f5fc2a5664758a93408622ddb6defaa1052 02-Sep-2016 Adam Lesinski <adamlesinski@google.com> Merge "AAPT2: Add Inline Complex XML support"
5eeaaddffd23d8d85aeb321e3ceea626e42cf9de 25-Aug-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Add Inline Complex XML support

See: https://developer.android.com/guide/topics/resources/complex-xml-resources.html

Change-Id: I8274c85e25cabf90423141c228697e873167d136
ink.cpp
085f4957477481038e0bfe141b62c7333a99fbe0 30-Aug-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Revert warning when merging packages

A compiled ResourceTable may contain multiple packages.
When referencing a framework attribute, for instance,
the compile phase has no idea if that attribute is a USE
or a DECLARATION, like so:

<declare-styleable name="Foo">
<item name="android:id" />
</declare-styleable>

If this file is compiled with the package 'android', then this
is a declaration. If it is compiled with the package 'com.foo',
this is a reference that must resolve at link time.

Since this is common, warning that the package 'android' is being
ignored during the merge phase is incorrect behaviour.

The warning was antroduced in ag/1363992

Change-Id: I09254d79ac379439face177eb724df882d1d0ce1
ableMerger.cpp
5c3464c75fc517c0306a4ffd39c59671ccfde544 25-Aug-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Fix merging of styleables the right way

Styleables should only be merged when processing overlays.
This moves the styleable merging code out of ResourceTable
and into TableMerger.

Change-Id: I3aae05cf4dd875cd25ac2ac744b61194409b2fee
ableMerger.cpp
ableMerger_test.cpp
a7cc3f1d79eb7a02a68928381998137f2f9b10a3 16-Aug-2016 Alexandria Cornwall <acornwall@google.com> AAPT2: Add support to strip namespaces from XML

The --no-xml-namespaces flag will strip namespace information from
compiled binary XML files in res/* (excluding res/raw/*) and
AndroidManifest.xml. It will also strip URI information from compiled
binary XML files in res/* (excluding res/raw/* and AndroidManifest.xml).

AndroidManifest.xml URI information is retained due to PackageParser, which
requires the Android URI for intent filters.

Bug: 29115919
Change-Id: I90cad6ed39ce02a69776f55314c1d4f38ad1aabe
ink.cpp
inkers.h
mlNamespaceRemover.cpp
mlNamespaceRemover_test.cpp
e42bc0587f82b42c466c1fc6baefc7113021fc4f 15-Aug-2016 TreeHugger Robot <treehugger-gerrit@google.com> Merge "Fix clang-tidy warnings in aapt and aapt2."
1d740812e657e92e5370b4162991a7e43ec43221 15-Aug-2016 TreeHugger Robot <treehugger-gerrit@google.com> Merge "AAPT2: Expose split support to command line"
470f8fcb5c0c59b28b5f73ee011a797b05085da7 15-Aug-2016 Chih-Hung Hsieh <chh@google.com> Fix clang-tidy warnings in aapt and aapt2.

* Add explicit keyword to conversion constructors.
* Add NOLINT(implicit) comments for implicit conversion constructors.
Bug: 28341362
* Use const reference type for read-only parameters.
Bug: 30407689
* Add NOLINT to suppress wrong clang-tidy warnings on macros.
Test: build with WITH_TIDY=1

Change-Id: Ibfafb23d9be463b4072745a51a6d9f1812dcac45
anifestFixer.h
roductFilter.h
36c73a595910e96f3552f938eeb81d46356067a1 11-Aug-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Expose split support to command line

Bug:30445078
Change-Id: If4b8530dba71b9059b8e62c04757da99c1119d22
ink.cpp
eferenceLinker.cpp
mlReferenceLinker.cpp
c34027ec3d0e1d845c3469ed07044e8e622d9cda 12-Aug-2016 Alexandria Cornwall <acornwall@google.com> Merge "AAPT2: Fix resource type id symbol merging"
9b8528fee4eed35b8e887ded0851d08eb2b10db6 10-Aug-2016 Chih-Hung Hsieh <chh@google.com> Fix clang-tidy warnings in aapt and aapt2.

* Add explicit keyword to conversion constructors.
* Add NOLINT(implicit) comments for implicit conversion constructors.
Bug: 28341362
* Use const reference type for read-only parameters.
Bug: 30407689
* Use const reference type to avoid unnecessary copy.
Bug: 30413862
Test: build with WITH_TIDY=1

Change-Id: Id6d21961f313a1ad92b15a37fdaa5be9e8ab48e1
ink.cpp
ableMerger.cpp
ableMerger.h
6a1f8dbd51fcf169dcd237a0b369b5767719f6a4 11-Aug-2016 Alexandria Cornwall <acornwall@google.com> AAPT2: Fix resource type id symbol merging

By the looks of things, AAPT2 should be able to merge public type and entry
symbols iff their types and resource IDs match.

Change-Id: Ie99071418aa89aad56de5e5b96e98b96d0d15d7a
ableMerger.cpp
ableMerger_test.cpp
8eefa048269e798014fe7848db3bbea0f289a97d 11-Aug-2016 Alexandria Cornwall <acornwall@google.com> Merge "AAPT2: Reorder link steps"
637b4820dc1858dacbf562ca65c13b4be0249e0e 11-Aug-2016 Alexandria Cornwall <acornwall@google.com> AAPT2: Reorder link steps

AAPT2's link steps were writing the res/* files before optimizations to the
resource table were performed (such as version collapsing). This was causing
unreferenced res/* files to remain in the archive, even though they're no
longer necessary.

Bug: 30705740
Change-Id: I50d7943ef7429b14e46587093855c15d54038299
ink.cpp
b80b6dabcbaa3ebd9b0889ff932bef9a05691ecb 10-Aug-2016 TreeHugger Robot <treehugger-gerrit@google.com> Merge "AAPT2: Parse coreApp in <manifest> as boolean"
6b17d2cec2cc3bd97c684b7da490e3f6eab0d980 10-Aug-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Parse coreApp in <manifest> as boolean

Bug:30751662
Change-Id: I283be5725426ee084944c1921df40d1bd6188028
anifestFixer.cpp
anifestFixer_test.cpp
mlReferenceLinker.cpp
f6762fc22a15e54d869a3e8d7f80560d0dddedf9 09-Aug-2016 Alexandria Cornwall <acornwall@google.com> AAPT2: Merge binary XML file attributes

AAPT2 generates extra versions of XML binaries based on the sdkVersion
that attributes were introduced, up to v21. This should only happen for
sdkVersions that are > minSdkVersion, as everything else can be included
in the main configuration (e.g. "layout" instead of "layout-v4").

This change handles the merging of XML binary sdkVersions that were created
implicitly.

Bug: 30705740
Change-Id: I854843dd6dbaca52896cea0c24c70c900cec3e8e
ink.cpp
9756dec248458abc7f4e7c59907299bba85521b4 08-Aug-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Add default no-compress extensions

Change-Id: Iff0820993059bcab59208b07601b2c6d8d953c89
ink.cpp
bad90c38881d0ea425348560a6df766e6d41bc4c 02-Aug-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Add missing error statement

Change-Id: I955ba6f151d68db02c3dc16d121994fb553dcea8
eferenceLinker.cpp
bb5a3901428b1caeb1014d7423467cbdc0ad96f2 02-Aug-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Allow <intent-filter> within <provider> in AndroidManifest.xml

Change-Id: I005120b76679f51039ddc40160c96ead6ab5fa4f
anifestFixer.cpp
58a20a6482a56a262fd83a617482641e3a981db1 26-Jul-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Change accepted notation for resource names in tests

Previously the way to name resources in tests was to use reference
notation (@[package:][type/]name). Now we use name notation (no @).

Change-Id: I68f0a36562d89cc78c582d128f370d9556c58707
utoVersioner_test.cpp
anifestFixer_test.cpp
rivateAttributeMover_test.cpp
roductFilter_test.cpp
eferenceLinker_test.cpp
ableMerger_test.cpp
mlReferenceLinker_test.cpp
bf0bd0f9ac1ffa0231cff0f6591dede48b3c6d52 02-Jun-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Add support to specify stable IDs

The --stable-ids flag allows the user to specify a file containing
a list of resource name and resource ID pairs in the form of:

package:type/name = 0xPPTTEEEE

This assigns the given resource the specified ID. It helps ensure
that when adding or removing resources, IDs are assigned in a stable
fashion.

If a package, type, or name is not found, no error or warning is
raised.

Change-Id: Ibc2f4e05cc924be255fedd862d835cb5b18d7584
ink.cpp
87675ada47fabd1d751dc35990a95d7682b19c5b 16-Jul-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Erase version qualifiers for resources <= minSdk

When resources share the same configuration, they are much more
clustered in the resulting resources.arsc, which makes for smaller
APKs. Strip version qualifiers for resources <= minSdk so that
they get clustered.

Bug:30050641
Change-Id: I80371b179761501fb7cc41f5f5ac67ffde2fc677
ersionCollapser.cpp
ersionCollapser_test.cpp
d0f116b619feede0cfdb647157ce5ab4d50a1c46 09-Jul-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Remove usage of u16string

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
utoVersioner_test.cpp
ink.cpp
anifestFixer.cpp
anifestFixer.h
anifestFixer_test.cpp
rivateAttributeMover_test.cpp
roductFilter_test.cpp
eferenceLinker.cpp
eferenceLinker_test.cpp
ableMerger.cpp
ableMerger.h
ableMerger_test.cpp
ersionCollapser_test.cpp
mlReferenceLinker.cpp
mlReferenceLinker_test.cpp
71965e898ecb2d53972a98e63b3e3fdbe96542dc 08-Jul-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Fix fully qualified java class verification

Proguard rules would be ignored for components defined
in AndroidManifest.xml for android:name attributes if
they didn't start with '.'.

Change-Id: I029b5a2f224f4daf155b73a2a4dcd940dd43372e
anifestFixer.cpp
fb6312fe93a8544e6a95d1c619c8cea3940cbe1a 28-Jun-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Add version collapsing

When an app specifies (or imports) resources with various
configurations for different SDK versions, specifying
a minSdk will make many of those resources unreachable.

Version collapsing will prune out the resources specified
for SDK versions less than the minSdk.

If, however, there is no exact matching resource for the
minSdk version, the next smallest SDK version is kept.

Change-Id: Ic7bcab6c59d65c97c67c8767358abb57cdec60a4
utoVersioner.cpp
utoVersioner_test.cpp
ink.cpp
inkers.h
ersionCollapser.cpp
ersionCollapser_test.cpp
1e21ff00b005110128245a4b0d13a7513a2d5e0c 24-Jun-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: accept argument file list for -R

Bug:29462255
Change-Id: Ia83919a3e7de7fe2056a3f7613621972cccd49cb
ink.cpp
5d84ad5487594fe44f56d10a110f38d62f35bfea 23-Jun-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Allow <meta-data> in <application> tag

Change-Id: Ica3e7d5c1ce587eba58d8171e0f8d5cdb598e7b3
anifestFixer.cpp
5fcfdab573fa08ed21b1d726797754d079140af2 03-Jun-2016 Adam Lesinski <adamlesinski@google.com> Merge "Allow uses-library under <application>" into nyc-mr1-dev am: c878fb0cb8
am: b80680af78

* commit 'b80680af787dfb27e5a4b1b0edae8502373c4935':
Allow uses-library under <application>

Change-Id: I078857ace29f7f35b9efbee99f4278b7c7ba9c9e
fee32d4d5f281504d3cc319e9833853ae0b23263 01-Jun-2016 Adam Lesinski <adamlesinski@google.com> Allow uses-library under <application>

Bug:29106952
Change-Id: I2e780323d86e7050038d34426a30e66a4bbfcc23
anifestFixer.cpp
d53e3bed1ca4a14b2a86d53eaef6969bd043176e 03-May-2016 Chih-Hung Hsieh <chh@google.com> Fix google-explicit-constructor warnings.

Bug: 28341362
Change-Id: I080090d50f1a368a4e7c1a0732297bb6a295e34f
anifestFixer.cpp
5fcf5d4fec809c2d71767d394388587ed3133194 28-Apr-2016 Adam Lesinski <adamlesinski@google.com> Merge "AAPT2: Accept a file with arguments when argument list is too long" into nyc-dev am: 28d6c1e493 am: 461be97e30
am: e59d48398f

* commit 'e59d48398f983b822191ea3096499bdd0793840a':
AAPT2: Accept a file with arguments when argument list is too long

Change-Id: Iad1d2b91109b0d1c78739c3fa3f31da5e0704f12
c51562cf5acda7849a34c4ae2a88077c068859c0 28-Apr-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Accept a file with arguments when argument list is too long

Bug:22775504
Change-Id: Ife73d4e4611016c9ee7b56264bc6a765c54beba3
ink.cpp
e49bb30dab4c37926962e8b408045e5a45f52c40 22-Apr-2016 Rohit Agrawal <rohitagr@google.com> AAPT2: ProGuard config for components in main dex.

Create an analogue of "aapt2 --proguard" which outputs a proguard
configuration that keeps only components which need to be in the main
dex.

Bug: 27383099

Change-Id: I61d652bfcdfc18e1614e852bd6f7540efd15f780
ink.cpp
5ff3ad6312086b87439bd8d3438a4476e2c14946 14-Apr-2016 Adam Lesinski <adamlesinski@google.com> SettingsLib: Build with AAPT2

Bug:22775504
Change-Id: I2e5015235384d124418d32186daa190f38e1c5b3
anifestFixer.cpp
c728c3daba5754467ef0c42a83247fdb4be1a4db 07-Apr-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Allow <protected-broadcast> and <eat-comment> in AndroidManifest.xml

Change-Id: I38c49a2a31e560dec963d44d94e067035fd59150
anifestFixer.cpp
cc5609d8e484ec82ef1dced793af7f674f059b1c 05-Apr-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Implement XmlActionExecutor to verify manifest

Defines a set of actions to perform on XML elements defined by their
hierarchy, eg: manifest -> application -> activity.

This can be used to easily add rules to check more tags in AndroidManifest.xml

Change-Id: I76c6916a98b6403075a7e56e16230979dc6cbee1
anifestFixer.cpp
anifestFixer.h
anifestFixer_test.cpp
3524a23edb88f0e67352d55ac6a2919f1edf7b30 02-Apr-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Add option to add JavaDoc annotations to Java classes

Change-Id: I7ee8c20cdd91380927a65c41097ffd3a6ffa2df5
ink.cpp
6cbfb1de493e42d937158ed57495c9656864ccba 31-Mar-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Change how we generate Java classes

Previously we would be writing out the Manifest.java file as we
processed the AndroidManifest.xml. This would lead to empty
Manifest classes if there were no permissions or permission groups
defined in the AndroidManifest.xml.

This would pose problems for processes that checked for public classes
and considered them part of the API (support lib).

Now we collect the structure of the Java class in memory before deciding
if a file should be created.

Change-Id: I6b909f28d74356414c6ef5ad005180d6ea5e44ca
ink.cpp
330c57dbd19a064d1f5a4adb3c8ed014711b473f 11-Mar-2016 Adam Lesinski <adamlesinski@google.com> Merge "AAPT2: Add descriptions of Attributes in Styleables for R.java" into nyc-dev
7656554f91b40bc93bf94c89afcad4a9a8ced884 11-Mar-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Add descriptions of Attributes in Styleables for R.java

Change-Id: I69e7b73cbdfe4baf502348397435c501ae29ff5e
ink.cpp
96917c25f09bb2f33e22f20cdfa4ece8f310b084 09-Mar-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Fix file::mkdirs when given absolute paths

file::mkdirs would try to extract the first part of the
path '/path' which would be the empty string ''. Mkdir would
fail creating the empty string directory.

Change-Id: Ice8ba92135f145f52f3663499a2c49eebe797328
ink.cpp
626a69f34536d01db0847df0051199beaecce060 03-Mar-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Support --no-version-vectors

Change-Id: I8029b2f9e2f7ab8e37a49565f95210f47a7be609
ink.cpp
64587af8179affd38ee26543b748f2d63b7f67bb 19-Feb-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Support building, linking, and merging static libraries

Android static libraries are like APKs but they contain much more debugging
and source information. We need to treat them differently in 3 ways:

1) When building a static library, we skip things like ID assignment and
product/config stripping. Source information is emitted as well.
2) When building a static library and linking against another
static library, we don't want to merge, we want to simply reference.
3) When building an app that uses static libraries, we want to merge
the static library under the same package with or without mangling.

Bug:25958912
Change-Id: I425e032857936a3e83173c1edc2a6cdc6020b842
ink.cpp
anifestFixer_test.cpp
eferenceLinker.cpp
eferenceLinker.h
eferenceLinker_test.cpp
ableMerger.cpp
ableMerger.h
mlReferenceLinker.cpp
mlReferenceLinker_test.cpp
355f285ffd000f6cfe76680eb22d010546d124bb 14-Feb-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Implement density stripping and initial Split support

When a preferred density is supplied, the closest matching densities
will be selected, the rest stripped from the APK.

Split support will be enabled in a later CL. Command line support is still
needed, but the foundation is ready.

Bug:25958912
Change-Id: I56d599806b4ec4ffa24e17aad48d47130ca05c08
ink.cpp
ableMerger.cpp
ableMerger.h
ableMerger_test.cpp
e4bb9eb5af5b0899dc0921d5580220b20e15bd5a 13-Feb-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Introduce notion of 'product' to ResourceTable

This allows us to preserve the various product definitions during the compile
phase, and allows us to select the product in the link phase.

This allows compiled files to remain product-independent, so that they do not need
to be recompiled when switching targets.

Bug:25958912
Change-Id: Iaa7eed25c834b67a39cdc9be43613e8b5ab6cdd7
utoVersioner.cpp
utoVersioner_test.cpp
ink.cpp
inkers.h
roductFilter.cpp
roductFilter.h
roductFilter_test.cpp
eferenceLinker.cpp
ableMerger.cpp
59e04c6f92da584b322c87072f18e6cab4de4c60 05-Feb-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Switch to protobuf for intermediate format

Without needing to conform to the runtime data format,
it is much easier to add new features such as debugging symbols
and carrying over product data to link time.

This also simplifies the runtime format parser and serializer,
which will change much less frequently than the protobuf intermediate
format.

Change-Id: I209787bbf087db0a58a534cb8511c51d21133e00
ink.cpp
6a008170cb18666e04c42856f992fc7a0afa1e1f 03-Feb-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Support -c configuration filtering

Change-Id: I1e5855ca73440bdc30c21bcbc1dfdd31a9842363
ink.cpp
ableMerger.cpp
ableMerger.h
ableMerger_test.cpp
8900aa8b44f2dae3ee7b0f53422a4dbcb4fd2903 26-Jan-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Add -x and -z flags to minimize changes in build scripts

The -z flag will be supported soon anyway and -x is legacy.

Change-Id: I710467d35066d267dea8dfe7c521737fc768ede9
ink.cpp
ef9c50120d1535b2133c74f969e74180d3011402 22-Jan-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Allow specifying non-final IDS when building 'legacy' style libraries

Real libraries will be built correctly, but since we are not doing that
yet, support the old way and allow a flag --non-final-ids to remove
the final modifier from R.java.

Change-Id: Iad55fb9140e55dbb0f41d0d55f2e2bd958294c8e
ink.cpp
c446a733b82872ce25dcba2c4185f924aa766349 21-Jan-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Accept empty zip files

The libziparchive returns an error on empty zip files.
Work around this by checking for that error condition and
returning an empty ZipFileCollection.

Change-Id: I9edaf2e089456b6ccb4bb099b20ede10331bd352
ink.cpp
656a577a34bfbb68d4f1557bfdaa8c2f2b6f8723 15-Jan-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Accept zip, jack, jar, and flata extensions as archives

Change-Id: I3a4db129998e2351e8221f9d72a4b40d2c7a8cf9
ink.cpp
52364f7ae31716d7827ea8f8566f4a28bd30a921 11-Jan-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Variety of small fixes to get the build working

- Add option to rename package in AndroidManifest.xml
- Support default versionName and versionCode
- Accept True and False as valid booleans

Change-Id: I400e350b9dcd0fd1c197d1929144299c7823617d
ink.cpp
anifestFixer.cpp
anifestFixer.h
anifestFixer_test.cpp
979ccb2e6f3f1f7f00a448eb440a85daf033dc9e 11-Jan-2016 Adam Lesinski <adamlesinski@google.com> AAPT2: Warn when positional arguments exist and --legacy is on

This is normally an error, but old AAPT didn't check for it correctly,
so many projects violate this. With --legacy, this becomes a warning.

Change-Id: I23647e029930e11b719591cd38609e1b43247e20
ink.cpp
a6fe345be955368a13aea76aefb4db821aad11df 10-Dec-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Fix overlay support

Supports the <add-resource> tag and mimics old AAPT behavior of
not allowing new resources defined unless <add-resource> was used
or --auto-add-overlay was specified.

Change-Id: I9b461137357617ade37fd7045b418b8e6450b9c4
ink.cpp
ableMerger.cpp
ableMerger.h
ableMerger_test.cpp
a40e972fdaa68fc486ff90a319195515819068b2 25-Nov-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Support compiling a res/ directory and output to zip

This allows us to compile an entire directory and output to a single
file. This is important to support generated resources in the make
build, since we may not know what resources get generated.

The link step will accept the zip and read the contents of it as if they
were passed in on the command line.

Change-Id: If1a51b0abe772350c24074353eb4989953c2e0cb
ink.cpp
28cacf091ad2b1c2749e77f590e9523e58735252 23-Nov-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Record source/comments for compound values' children

Values like styles or arrays have children which need to have
their source and comments preserved.

Change-Id: I6fc713ba36627e6d66c7930b4080cc1403bac207
eferenceLinker.cpp
eferenceLinker.h
a587065721053ad54e34f484868142407d59512d 21-Nov-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Verify min/max attr fields

Integers are now checked to see if they fall in the range
of min/max for the attribute they are assigned.

Change-Id: I42c435b15fd3f0bd23691c83efccce4ad5973276
eferenceLinker.cpp
467f171315f9c2037fcd3eb5edcfabc40671bf7b 17-Nov-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Fail compiling when private symbols are referenced

Also moved some XML specific stuff into its own directory,
and refactored ReferenceLinker a bit.

Change-Id: I912247a82023c1bbf72dc191fbdaf62858cbec0c
ink.cpp
inkers.h
anifestFixer.cpp
anifestFixer.h
anifestFixer_test.cpp
rivateAttributeMover.cpp
eferenceLinker.cpp
eferenceLinker.h
eferenceLinkerVisitor.h
eferenceLinker_test.cpp
mlReferenceLinker.cpp
mlReferenceLinker_test.cpp
fc9570e6b0a6304abe6e6c52613516e93cf9251f 17-Nov-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Fix a bug where files would only show up for one config

The set of files to build was only comparing resource name and
not configuration.

Also support --extra-packages as a colon separated list of packages.

Change-Id: I36b65cd15299cdc722b785a7891a24ca1bc4fb45
ink.cpp
e352b990e1dca7857a4d170f411ddad2065670ca 16-Nov-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Minor fixes to SymbolTable and diagnostic output

The SymbolTable lookup relied on the configuration, which we NEVER
want. Now we rely solely on the symbols defined in the ResTable
and no specific configuration or value of that symbol.

Also added some better source logging.

Change-Id: I983855c283493e924b2e92a9fd8e4cb841769349
eferenceLinkerVisitor.h
mlReferenceLinker.cpp
fb48d292d9eb78a73f9473d90911ecb81da5fffd 08-Nov-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Add support for overlays when merging resources

Change-Id: Iea9e41123cf89e3cfba7eb6bea89def56dee8093
ink.cpp
ableMerger.cpp
ableMerger.h
ableMerger_test.cpp
83f2255f69729e0e97539e96e5e6161843e85823 07-Nov-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Disambiguate merging of resources

Merging local app resources is slightly different than merging
resources from a static library.

Local app resources may not have a package name set, but we do take interest in the
ID set for the package (should be 0x0 or match the ID of the app we're building).

Static library resources have an explicit package name defined for them, so we
only merge resources from that package.

Change-Id: I95e559ae94cc1df6972e77a347b1b37a93674c4d
ink.cpp
ableMerger.cpp
ableMerger.h
ableMerger_test.cpp
b274e35abfbbd09e0fce983a215c11522c56cce2 07-Nov-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Fix inclusion of comments in R.java javadoc

Comments weren't being copied when merged from the various
resource tables.

Also refactored the JavaClassGenerator to omit a class
if no entries exist for it.

Change-Id: I6eaa89b7b3715bc05403635a2baf0d1db3efd142
utoVersioner.cpp
ableMerger.cpp
9f22204c3a9ddac4f92573c9ab098e6cf3ed1cb4 04-Nov-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Fix small issue with detecting translatable resources

Change-Id: Idd21b5de4d20be06c6f8c8eb5a22ccd68afc4927
inkers.h
2ae4a877d1623f851040ce69239552c873f1abf0 03-Nov-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Add Manifest fixing/validation

Change-Id: I7f6d8b74d1c590adc356b4da55cb6cb777cdf1da
ink.cpp
anifestFixer.cpp
anifestFixer.h
anifestFixer_test.cpp
ca5638fd85098c3d0a699492751043545f75553a 21-Oct-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Support generating Manifest.java

This includes comments from AndroidManifest.xml.

Change-Id: I412d9ecb12bad20a49a683d6b3bea4a0be1235ae
ink.cpp
e78fd617ec60139a973a01925fa7adad31febb39 22-Oct-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Move comments and source into Value

Values are closely related to where they were defined, so
this information should live inside the Value.

This also enables comments to be attached to nested Values.

Change-Id: Ic7481b5a5f26d0ef248d638e2e29252f88154581
utoVersioner.cpp
ink.cpp
rivateAttributeMover_test.cpp
eferenceLinker.cpp
ableMerger.cpp
9e10ac70155c993e7053323ad36beaea7bf7d54f 16-Oct-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Process <java-symbols> and private symbol package

Need to introduce the idea of multiple levels of visibility to support <java-symbol>.

Public, Private, Undefined.

Public means it is accessible from outside and requires an ID assigned.
Private means that we explicitly want this to be a symbol (show up in R.java), but not visible
to other packages. No ID required.

Undefined is any normal resource. When --private-symbols is specified in the link phase,
these resources will not show up in R.java.

Change-Id: Icba89221e08e685dee7683786aa7112baf28c856
ink.cpp
rivateAttributeMover.cpp
rivateAttributeMover_test.cpp
eferenceLinker.cpp
ableMerger.cpp
9ba47d813075fcb05c5e1532c137c93b394631cb 13-Oct-2015 Adam Lesinski <adamlesinski@google.com> Filter products during compile phase

Unfortunately there is no good way to deal with products in the link phase.
Products are like preprocessor defines in that they are processed early
and change the composition of the compiled unit.

Change-Id: I6d5e15ef60d29df8e83e059ba857c09333993779
ink.cpp
ableMerger.cpp
1ab598f46c3ff520a67f9d80194847741f3467ab 14-Aug-2015 Adam Lesinski <adamlesinski@google.com> AAPT2: Separate out the various steps

An early refactor. Some ideas became clearer as
development continued. Now the various phases are much
clearer and more easily reusable.

Also added a ton of tests!

Change-Id: Ic8f0a70c8222370352e63533b329c40457c0903e
utoVersioner.cpp
utoVersioner_test.cpp
ink.cpp
inkers.h
rivateAttributeMover.cpp
rivateAttributeMover_test.cpp
eferenceLinker.cpp
eferenceLinkerVisitor.h
eferenceLinker_test.cpp
ableMerger.cpp
ableMerger.h
ableMerger_test.cpp
mlReferenceLinker.cpp
mlReferenceLinker_test.cpp