In Java, we have package protected (default) modifier for classes, which allows us to have many classes in a single package but exposes only a few and keep the logic encapsu
As a workaround for me on android I've created @PackagePrivate annotation and lint checks to control access. Here you can find the project.
Lint checks are obviously not that strict as compiler checks and some setup needed to fail the build on errors. But android studio picks up lint checks automatically and shows error immediately while typing. Unfortunately I don't know a way to exclude annotated members from autocomplete.
Also, as lint is a purely compile-time tool, no checks at runtime performed.