# Copyright (C) 2020 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. # We supply these as stubs and are able to link to them at runtime # because they are hidden public classes in Android. We don't want # R8 to complain about them not being there during optimization. -dontwarn android.view.RenderNode -dontwarn android.view.DisplayListCanvas -dontwarn android.view.HardwareCanvas -keepclassmembers class androidx.compose.ui.platform.ViewLayerContainer { protected void dispatchGetDisplayList(); } -keepclassmembers class androidx.compose.ui.platform.AndroidComposeView { android.view.View findViewByAccessibilityIdTraversal(int); } # Users can create Modifier.Node instances that implement multiple Modifier.Node interfaces, # so we cannot tell whether two modifier.node instances are of the same type without using # reflection to determine the class type. See b/265188224 for more context. -keep,allowobfuscation,allowshrinking class * extends androidx.compose.ui.node.ModifierNodeElement # Keep all the functions created to throw an exception. We don't want these functions to be # inlined in any way, which R8 will do by default. The whole point of these functions is to # reduce the amount of code generated at the call site. -keepclassmembers,allowshrinking,allowobfuscation class androidx.compose.**.* { static void throw*Exception(...); static void throw*ExceptionForNullCheck(...); # For methods returning Nothing static java.lang.Void throw*Exception(...); static java.lang.Void throw*ExceptionForNullCheck(...); # For functions generating error messages static java.lang.String exceptionMessage*(...); java.lang.String exceptionMessage*(...); } # When pointer input modifier nodes are added dynamically and have the same keys (common when # developers `Unit` for their keys), we need a way to differentiate them and using a # functional interface and comparing classes allows us to do that. -keepnames class androidx.compose.ui.input.pointer.PointerInputEventHandler { *; }