# Copyright (C) 2016 The CyanogenMod 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.

# Don't skip non public library classes, make sure we're not keeping anything which will get mapped against api verification.
-dontskipnonpubliclibraryclasses

# Do the same with class members
-dontskipnonpubliclibraryclassmembers

# Keep test packages
-keep class androidx.** { *; }
-keep class android.test.** { *; }
-keep public class * extends androidx.** { *; }
-keep public class * extends android.test.** { *; }
-keep interface androidx.** { *; }
-keep interface android.test.** { *; }

# Keep all junit classes
-keep class junit.** { *; }
-keep class org.junit.** { *; }
-keep interface junit.** { *; }
-keep interface org.junit.** { *; }

# Keep compiled java classes from declared aidl's within the test package
-keep public class * extends android.os.IInterface { *; }

# Don't warn about the Android Support Test JUnit Runner
-dontwarn androidx.**
-dontwarn android.test.**

# Don't warn about junit
-dontwarn junit.**
-dontwarn org.junit.**

# keep mockito methods
-keep class org.mockito.** { *; }
-keep interface org.mockito.** { *; }
-keep class com.google.dexmaker.** { *; }
-keep interface com.google.dexmaker.** { *; }

# Always process
-forceprocessing

# Make sure not to obfuscate the output
-dontobfuscate
