# Copyright 2015 The Bazel Authors. All rights reserved.
#
# 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.

# Note: put any environment specific flags in their respective proguard files:
# proguard_test.flags, proguard_dev.flags, proguard_release.flags, etc

# These classes reference resources that don't exist in pre-v11 builds
-dontwarn com.google.android.apps.testapp.TestActivity

# References to a hidden class
-dontnote android.os.SystemProperties
-keep class android.os.SystemProperties { *** get(...);}

# Keep all classes extended from com.google.android.apps.testapp.MyBaseClass
# because, e.g., we use reflection.
-keep class * extends com.google.android.apps.testapp.MyBaseClass {
   @com.google.android.apps.testapp.MyBaseClass$Inner <fields>;
}

# Needed because this field is accessed reflectively, and it exists in generated code.
-keepclassmembers class * extends com.google.protobuf.nano.MessageNano {
    *** apiHeader;
}

# Extensions are deserialized with a reflective call to newInstance().
-keepclassmembers class * extends com.google.protobuf.nano.Extension {
    <init>();
}

-dontnote android.support.v?.app.Fragment

-keepnames class com.google.android.testapp.** extends com.google.android.testapp.resources.Resource { *; }

-keepclasseswithmembers class derp.foo { bar;}  -keepattributes *

# This is a comment, so this should not cause problems -dontobfuscate
# This is a comment, so # this should not cause problems -dontnote

-adaptresourcefilecontents META-INF/services/some.service
