Commit Graph

8 Commits

Author SHA1 Message Date
Jake Wharton
3001f0311d Only keep methods with correct signature for view/menu click
For View's onClick attribute the method must have a single argument of type android.view.View. For a MenuItem's onClick attribute the method must have a single argument of type android.view.MenuItem. Since these rules match all types and any return type, matching by signature is the only available specificity that can be added.

Bug: 37123156
Test: make aapt2_tests
Change-Id: I4b82f5ef9e62a8ecffaab424e269df627825709e
2018-06-11 17:21:28 -04:00
Jake Wharton
420785e6d0 Improve tests for ProGuard rules, add transition tests
Test: make aapt2_tests
Change-Id: If3300a9f82ad90189b74aab03c0d7f649e74e3f3
2018-06-11 15:57:59 -04:00
Jake Wharton
ab660a7fde Only keep default constructor of manifest items
Reflection-based instantiation of manifest-declared types is only done on the default (aka no-argument) constructor. While these types are unlikely to have alternate constructors (unlike the others listed in the bug), there's no reason to generate overly keep-y rules for them.

Bug: 37123156
Test: make aapt2_tests
Change-Id: Ic83a2671a54ea5dd558bfcacf033a60e9568ab8c
2018-06-11 11:33:17 -04:00
Ryan Mitchell
9a2f6e60c6 AAPT2: Add Proguard rules for nav fragments
Adds generation of proguard rules for fragments in res/navigation. All
android:name attributes have keep rules generated for the classes they
reference.

Bug: 69929974
Test: aapt2_tests
Change-Id: I05a87484ab357ea5629b73caad8488182f474e1f
2018-05-24 09:58:27 -07:00
Adam Lesinski
a693c4a32e AAPT2: Move all file output to FileOutputStream
FileOutputStream is safe to use on Windows, as it opens
files using our compatibility API.

Bug: 68262818
Test: make aapt2_tests
Change-Id: Ib0b27e93edd609b49b1327db7d9867a002198ebb
2017-11-16 12:06:17 -08:00
Adam Koski
09ef94e918 Change conditional keep rule syntax
Google's ProGuard fork is migrating to a new syntax that upstream
ProGuard 6.0 will also support.

Test: unit tests
Bug: 69162105
Change-Id: I3b6d7e82eb99c2e2af6c4d851a4f97ec3e471b55
2017-11-10 11:30:56 -08:00
Adam Koski
dc21dea9b8 AAPT2: Produce Conditional Proguard Keep Rules
Add the option to produce keep rules that conditional keep based on
usage of R identifiers. This allows Proguard to potentially shrink more
code if resources are not used.

Currently only produces conditional rules for classes referenced in
layout resources because they are the most common and has the easiest
transitive usage chain to analyze.

Bug: 63628451
Test: make aapt2_tests and manual testing
Change-Id: I6c1af7affd64af40c80e004d8506a9463444b2c3
2017-10-20 16:25:18 -07:00
Adam Lesinski
f762df2575 AAPT2: Emit more proguard keep rules for layouts and menus
<fragment> tags in layouts use the class attribute to determine which
Fragment subclass to load, and fallback on android:name if class is not
set.

AAPT2 only emitted a proguard rule for the class attribute for <fragment>,
when it should emit a proguard rule for the android:name attribute as
well.

AAPT2 didn't handle menu XML, so support for actionViewClass,
actionProviderClass and onClick is added.

Bug: 62216174
Test: make aapt2_tests
Change-Id: Ie8675c2bd899a5b51f3661eb0901ab8c9a16fd70
2017-06-28 11:01:59 -07:00