From 6c83e0c5c9985a99e2960a9b80eb443e175243c2 Mon Sep 17 00:00:00 2001 From: Martijn Coenen Date: Wed, 6 Mar 2019 15:06:17 +0100 Subject: [PATCH] Make sure Proguard keeps zygote preload class. Bug: 127262679 Test: atest ProguardRulesTest Change-Id: Ib082404e08d98b25fcecbf680afb4af37fe2786b --- tools/aapt2/java/ProguardRules.cpp | 9 +++++++++ tools/aapt2/java/ProguardRules_test.cpp | 3 +++ 2 files changed, 12 insertions(+) diff --git a/tools/aapt2/java/ProguardRules.cpp b/tools/aapt2/java/ProguardRules.cpp index 52e168ed47aae..05ba8f05ec675 100644 --- a/tools/aapt2/java/ProguardRules.cpp +++ b/tools/aapt2/java/ProguardRules.cpp @@ -281,6 +281,15 @@ class ManifestVisitor : public BaseVisitor { AddClass(node->line_number, result.value(), ""); } } + + attr = node->FindAttribute(xml::kSchemaAndroid, "zygotePreloadName"); + if (attr) { + Maybe result = util::GetFullyQualifiedClassName(package_, attr->value); + if (result) { + AddClass(node->line_number, result.value(), ""); + } + } + if (main_dex_only_) { xml::Attribute* default_process = node->FindAttribute(xml::kSchemaAndroid, "process"); if (default_process) { diff --git a/tools/aapt2/java/ProguardRules_test.cpp b/tools/aapt2/java/ProguardRules_test.cpp index da24907417fa6..559b07af3e80b 100644 --- a/tools/aapt2/java/ProguardRules_test.cpp +++ b/tools/aapt2/java/ProguardRules_test.cpp @@ -42,6 +42,7 @@ TEST(ProguardRulesTest, ManifestRuleDefaultConstructorOnly) { android:appComponentFactory="com.foo.BarAppComponentFactory" android:backupAgent="com.foo.BarBackupAgent" android:name="com.foo.BarApplication" + android:zygotePreloadName="com.foo.BarZygotePreload" > @@ -63,6 +64,7 @@ TEST(ProguardRulesTest, ManifestRuleDefaultConstructorOnly) { EXPECT_THAT(actual, HasSubstr("-keep class com.foo.BarReceiver { (); }")); EXPECT_THAT(actual, HasSubstr("-keep class com.foo.BarProvider { (); }")); EXPECT_THAT(actual, HasSubstr("-keep class com.foo.BarInstrumentation { (); }")); + EXPECT_THAT(actual, HasSubstr("-keep class com.foo.BarZygotePreload { (); }")); actual = GetKeepSetString(set, /** minimal_rules */ true); EXPECT_THAT(actual, HasSubstr("-keep class com.foo.BarAppComponentFactory { (); }")); @@ -73,6 +75,7 @@ TEST(ProguardRulesTest, ManifestRuleDefaultConstructorOnly) { EXPECT_THAT(actual, HasSubstr("-keep class com.foo.BarReceiver { (); }")); EXPECT_THAT(actual, HasSubstr("-keep class com.foo.BarProvider { (); }")); EXPECT_THAT(actual, HasSubstr("-keep class com.foo.BarInstrumentation { (); }")); + EXPECT_THAT(actual, HasSubstr("-keep class com.foo.BarZygotePreload { (); }")); } TEST(ProguardRulesTest, FragmentNameRuleIsEmitted) {