# Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.

# Keep the application entry point. Get rid of everything that is not
# reachable from there.
-keep public class * extends *.Instrumentation {
  <init>();
}
-keep public class * extends *.Application {
  <init>();
  void attachBaseContext(*.Context);
}
-keep public class * extends *.Activity {
  <init>();
}
-keep public class * extends *.Service {
  <init>();
}
-keep public class * extends *.ContentProvider {
 <init>();
}
-keep public class * extends *.BroadcastReceiver {
 <init>();
}
-keep public class * extends *.BackupAgent {
 <init>();
}
