diff --git a/proguard.flags b/proguard.flags
index 6eed998..a5e34b7 100644
--- a/proguard.flags
+++ b/proguard.flags
@@ -1,22 +1,73 @@
-# Xml files containing onClick (menus and layouts) require that proguard not
-# remove their handlers.
--keepclassmembers class * extends android.app.Activity {
-  public void *(android.view.View);
-  public void *(android.view.MenuItem);
+#
+# Copyright (C) 2016 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License
+#
+
+-keepattributes SourceFile,LineNumberTable
+-dontpreverify
+-dontskipnonpubliclibraryclasses
+-dontusemixedcaseclassnames
+-keepclasseswithmembernames class * {
+    native <methods>;
 }
 
--keep class com.android.contacts.common.** { *;}
-
-# Any class or method annotated with NeededForTesting or NeededForReflection.
--keep @com.android.contacts.common.testing.NeededForTesting class *
--keepclassmembers class * {
-@com.android.contacts.common.testing.NeededForTesting *;
-@com.android.dialer.NeededForReflection *;
+-keepclassmembers enum * {
+    public static **[] values();
 }
 
-# For design libraries
--keep public class * extends android.support.design.widget.CoordinatorLayout$Behavior {
+-keepclassmembers class * implements android.os.Parcelable {
+  public static *** CREATOR;
+}
+
+-keepclassmembers class * implements java.io.Serializable {
+    static final long serialVersionUID;
+    private static final java.io.ObjectStreamField[] serialPersistentFields;
+    private void writeObject(java.io.ObjectOutputStream);
+    private void readObject(java.io.ObjectInputStream);
+    java.lang.Object writeReplace();
+    java.lang.Object readResolve();
+}
+
+-dontwarn com.google.common.**
+-dontwarn com.google.errorprone.annotations.**
+-dontwarn android.app.Notification
+-dontnote android.graphics.Insets
+-dontnote libcore.icu.ICU
+-keep class libcore.icu.ICU { *** get(...);}
+-dontnote android.support.v4.app.NotificationCompatJellybean
+
+-allowaccessmodification
+-renamesourcefileattribute PG
+
+-assumenosideeffects class android.util.Log {
+  static *** i(...);
+  static *** d(...);
+  static *** v(...);
+  static *** isLoggable(...);
+}
+
+-dontwarn org.apache.http.**
+
+# Used in com.android.dialer.answer.impl.SmsBottomSheetFragment
+-keep class android.support.design.widget.BottomSheetBehavior {
     public <init>(android.content.Context, android.util.AttributeSet);
+    public <init>();
 }
 
--verbose
+# Keep the annotation, classes, methods, and fields marked as UsedByReflection
+-keep class com.android.dialer.proguard.UsedByReflection
+-keep @com.android.dialer.proguard.UsedByReflection class *
+-keepclassmembers class * {
+    @com.android.dialer.proguard.UsedByReflection *;
+}
