title: How to identify the proguard rule which caused a class or member to be kept in android?
body: <p>I see a large number of notes emitted by proguard during my android build:</p>
  
  <pre><code>ProGuard, version 6.0.3
  Printing configuration to [/home/me/app/proconfout.txt]...
  ...
  Note: the configuration keeps the entry point 'com.me.Class$CacheKey$1 { java.lang.Object extractValue(com.me.Class); }', but not the descriptor class 'com.me.Class'
  Note: the configuration keeps the entry point 'com.me.Class$CacheKey$2 { java.lang.Object extractValue(com.me.Class); }', but not the descriptor class 'com.me.Class'
  Note: the configuration keeps the entry point 'com.me.Class$CacheKey$3 { java.lang.Object extractValue(com.me.Class); }', but not the descriptor class 'com.me.Class'
  Note: the configuration keeps the entry point 'com.me.Class$CacheKey$4 { java.lang.Object extractValue(com.me.Class); }', but not the descriptor class 'com.me.Class'
  ...
  </code></pre>
  
  <p>Looking at the merged proguard configuration I haven't found what is keeping the particular method proguard is noting. It doesn't help much that the merged proguard configuration is 1000 lines long. Is there any trick to identifying why proguard is keeping the methods it is noting?</p>