1*6777b538SAndroid Build Coastguard Worker# Copyright 2016 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker# Contains flags that we'd like all Chromium .apks to use. 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker# Keep line number information, useful for stack traces. 8*6777b538SAndroid Build Coastguard Worker-keepattributes SourceFile,LineNumberTable 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker# Enable protobuf-related optimizations. 11*6777b538SAndroid Build Coastguard Worker-shrinkunusedprotofields 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker# Allowing Proguard to change modifiers. 14*6777b538SAndroid Build Coastguard Worker-allowaccessmodification 15*6777b538SAndroid Build Coastguard Worker 16*6777b538SAndroid Build Coastguard Worker# Keep all CREATOR fields within Parcelable that are kept. 17*6777b538SAndroid Build Coastguard Worker-keepclassmembers class !cr_allowunused,** implements android.os.Parcelable { 18*6777b538SAndroid Build Coastguard Worker public static *** CREATOR; 19*6777b538SAndroid Build Coastguard Worker} 20*6777b538SAndroid Build Coastguard Worker 21*6777b538SAndroid Build Coastguard Worker# Don't obfuscate Parcelables as they might be marshalled outside Chrome. 22*6777b538SAndroid Build Coastguard Worker# If we annotated all Parcelables that get put into Bundles other than 23*6777b538SAndroid Build Coastguard Worker# for saveInstanceState (e.g. PendingIntents), then we could actually keep the 24*6777b538SAndroid Build Coastguard Worker# names of just those ones. For now, we'll just keep them all. 25*6777b538SAndroid Build Coastguard Worker-keepnames class !cr_allowunused,** implements android.os.Parcelable {} 26*6777b538SAndroid Build Coastguard Worker 27*6777b538SAndroid Build Coastguard Worker# Keep all default constructors for used Fragments. Required since they are 28*6777b538SAndroid Build Coastguard Worker# called reflectively when fragments are reinflated after the app is killed. 29*6777b538SAndroid Build Coastguard Worker-keepclassmembers class !cr_allowunused,** extends android.app.Fragment { 30*6777b538SAndroid Build Coastguard Worker public <init>(); 31*6777b538SAndroid Build Coastguard Worker} 32*6777b538SAndroid Build Coastguard Worker-keepclassmembers class !cr_allowunused,** extends androidx.fragment.app.Fragment { 33*6777b538SAndroid Build Coastguard Worker public <init>(); 34*6777b538SAndroid Build Coastguard Worker} 35*6777b538SAndroid Build Coastguard Worker 36*6777b538SAndroid Build Coastguard Worker# Keep all enum values and valueOf methods. See 37*6777b538SAndroid Build Coastguard Worker# http://proguard.sourceforge.net/index.html#manual/examples.html 38*6777b538SAndroid Build Coastguard Worker# for the reason for this. Also, see http://crbug.com/248037. 39*6777b538SAndroid Build Coastguard Worker-keepclassmembers enum !cr_allowunused,** { 40*6777b538SAndroid Build Coastguard Worker public static **[] values(); 41*6777b538SAndroid Build Coastguard Worker} 42*6777b538SAndroid Build Coastguard Worker 43*6777b538SAndroid Build Coastguard Worker# This is to workaround crbug.com/1204690 - an old GMS app version crashes when 44*6777b538SAndroid Build Coastguard Worker# ObjectWrapper contains > 1 fields, and this prevents R8 from inserting a 45*6777b538SAndroid Build Coastguard Worker# synthetic field. 46*6777b538SAndroid Build Coastguard Worker-keep,allowaccessmodification class !cr_allowunused,com.google.android.gms.dynamic.ObjectWrapper { 47*6777b538SAndroid Build Coastguard Worker <fields>; 48*6777b538SAndroid Build Coastguard Worker} 49*6777b538SAndroid Build Coastguard Worker 50*6777b538SAndroid Build Coastguard Worker# Remove calls to String.format() where the result goes unused. This can mask 51*6777b538SAndroid Build Coastguard Worker# exceptions if the parameters to String.format() are invalid, but such cases 52*6777b538SAndroid Build Coastguard Worker# are generally programming bugs anyways. 53*6777b538SAndroid Build Coastguard Worker# Not using the return value generally occurs due to logging being stripped. 54*6777b538SAndroid Build Coastguard Worker-assumenosideeffects class java.lang.String { 55*6777b538SAndroid Build Coastguard Worker static java.lang.String format(...); 56*6777b538SAndroid Build Coastguard Worker} 57*6777b538SAndroid Build Coastguard Worker 58*6777b538SAndroid Build Coastguard Worker# Allows R8 to remove static field accesses to library APIs when the results 59*6777b538SAndroid Build Coastguard Worker# are unused (E.g. tell it that it's okay to not trigger <clinit>). 60*6777b538SAndroid Build Coastguard Worker# Not using the return value generally occurs due to logging being stripped. 61*6777b538SAndroid Build Coastguard Worker-assumenosideeffects class android.**, java.** { 62*6777b538SAndroid Build Coastguard Worker static <fields>; 63*6777b538SAndroid Build Coastguard Worker} 64*6777b538SAndroid Build Coastguard Worker 65*6777b538SAndroid Build Coastguard Worker# Keep the names of exception types, to make it easier to understand stack 66*6777b538SAndroid Build Coastguard Worker# traces in contexts where it's not trivial to deobfuscate them - for example 67*6777b538SAndroid Build Coastguard Worker# when reported to app developers who are using WebView. 68*6777b538SAndroid Build Coastguard Worker-keepnames class ** extends java.lang.Throwable {} 69