From 44fa342eb91b90df7998fa2808e21af75aafaf39 Mon Sep 17 00:00:00 2001 From: Donald Chai Date: Fri, 31 May 2019 22:13:00 -0700 Subject: [aapt2] Fix infinite loop in proguard::CollectLocations std::set only works correctly when the < comparator is a strict weak ordering, while UsageLocation::operator< was actually implementing !=. Bug: 134190468 Change-Id: Icb9407e9c8451f9fcb4eb9b2cea310e3bcaf159e Tested: aapt2_tests, and b/134190468#comment1 --- tools/aapt2/java/ProguardRules_test.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'tools/aapt2/java/ProguardRules_test.cpp') diff --git a/tools/aapt2/java/ProguardRules_test.cpp b/tools/aapt2/java/ProguardRules_test.cpp index 559b07af3e80..25b55ab003b0 100644 --- a/tools/aapt2/java/ProguardRules_test.cpp +++ b/tools/aapt2/java/ProguardRules_test.cpp @@ -364,4 +364,12 @@ TEST(ProguardRulesTest, TransitionRulesAreEmitted) { "-keep class com.foo.Bar { (android.content.Context, android.util.AttributeSet); }")); } +TEST(ProguardRulesTest, UsageLocationComparator) { + proguard::UsageLocation location1 = {{"pkg", ResourceType::kAttr, "x"}}; + proguard::UsageLocation location2 = {{"pkg", ResourceType::kAttr, "y"}}; + + EXPECT_EQ(location1 < location2, true); + EXPECT_EQ(location2 < location1, false); +} + } // namespace aapt -- cgit v1.2.3 From db19f510815f7e3cadff02ffd3d7ae3aef4f9282 Mon Sep 17 00:00:00 2001 From: Donald Chai Date: Mon, 9 Sep 2019 15:45:34 -0700 Subject: Generate "keep" rules for actionProviderClass and actionViewClass Apps commonly use the versions of the attributes from AndroidX, which will be unqualified. Bug: 30888677 Change-Id: Id7cb32b28edb1cd1b8113a8c9a7ee29107a1b67e Tested: aapt2_tests --- tools/aapt2/java/ProguardRules_test.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'tools/aapt2/java/ProguardRules_test.cpp') diff --git a/tools/aapt2/java/ProguardRules_test.cpp b/tools/aapt2/java/ProguardRules_test.cpp index 25b55ab003b0..4537a70a2dbc 100644 --- a/tools/aapt2/java/ProguardRules_test.cpp +++ b/tools/aapt2/java/ProguardRules_test.cpp @@ -326,6 +326,25 @@ TEST(ProguardRulesTest, MenuRulesAreEmitted) { EXPECT_THAT(actual, Not(HasSubstr("com.foo.Bat"))); } +TEST(ProguardRulesTest, MenuRulesAreEmittedForActionClasses) { + std::unique_ptr context = test::ContextBuilder().Build(); + std::unique_ptr menu = test::BuildXmlDom(R"( + + + )"); + menu->file.name = test::ParseNameOrDie("menu/foo"); + + proguard::KeepSet set; + ASSERT_TRUE(proguard::CollectProguardRules(context.get(), menu.get(), &set)); + + std::string actual = GetKeepSetString(set, /** minimal_rules */ false); + EXPECT_THAT(actual, HasSubstr("-keep class com.foo.Bar")); + EXPECT_THAT(actual, HasSubstr("-keep class com.foo.Baz")); +} + TEST(ProguardRulesTest, TransitionPathMotionRulesAreEmitted) { std::unique_ptr context = test::ContextBuilder().Build(); std::unique_ptr transition = test::BuildXmlDom(R"( -- cgit v1.2.3 From 181cbfde801b55adfc1b20f510dff02e5a9dcef1 Mon Sep 17 00:00:00 2001 From: Jean-Luc Coelho Date: Wed, 27 Nov 2019 12:37:48 -0800 Subject: Add "no-proguard-location-reference" flag to aapt2 This fixes relocatability issues with the code shrinkers. Bug: 144529940 Test: None Change-Id: I65e08e850193e67dcdf4c533d9e66332714f0c8c --- tools/aapt2/java/ProguardRules_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tools/aapt2/java/ProguardRules_test.cpp') diff --git a/tools/aapt2/java/ProguardRules_test.cpp b/tools/aapt2/java/ProguardRules_test.cpp index 25b55ab003b0..87205973566b 100644 --- a/tools/aapt2/java/ProguardRules_test.cpp +++ b/tools/aapt2/java/ProguardRules_test.cpp @@ -30,7 +30,7 @@ namespace aapt { std::string GetKeepSetString(const proguard::KeepSet& set, bool minimal_rules) { std::string out; StringOutputStream sout(&out); - proguard::WriteKeepSet(set, &sout, minimal_rules); + proguard::WriteKeepSet(set, &sout, minimal_rules, false); sout.Flush(); return out; } -- cgit v1.2.3