title: What exactly does Android's @hide annotation do?
body: <p>Lots of internal APIs in Android are marked <code>@hide</code>. What <em>exactly</em> does this do?</p>
  
  <p><a href="https://stackoverflow.com/questions/17035271/what-does-hide-mean-in-the-android-source-code">Another answer</a> says that it only hides the methods from Javadoc, but that you can use reflection to access them.</p>
  
  <p>That makes no sense though - if they are only hidden from Javadoc then you surely wouldn't need reflection to access them. In fact I've found that I don't. I can still call some <code>@hide</code> methods (maybe just static ones?) and the app compiles and runs fine as far as I can tell. I just get a lint error:</p>
  
  <p><a href="https://i.stack.imgur.com/bSz8s.png"><img src="https://i.stack.imgur.com/bSz8s.png" alt="Cannot resolve method"></a></p>
  
  <p>Note that the above code still compiles fine.</p>
  
  <p>I don't care about the possibility of the API being changed so I am happy using the private API, but can someone explain this behaviour? Also if there's any way to disable the lint on a case-by-case basis that would be helpful.</p>