I am looking at source code for the PackageManager
class and it is abstract as well as all the methods. Are manufacturers supposed to write a real implementation for it, or I am missing something?
问题:
回答1:
PackageManager
is abstract and a concrete implementation needs to be provided in order to invoke instance methods. An implementation of this class can be found as a package private static class of ApplicationContext
which itself is available in ContextImpl
. (For source code see here). Note that this implementation of PackageManager is final and so cannot be overriden.
There is also a MockPackageManager implementation that might interest you.
回答2:
The real implementation for the PackageManager is PackageManagerService located at frameworks/base/services/java/com/android/server/
You can find the source code here in the GrepCode.
回答3:
It is ApplicationPackageManager
, and it is created in ContextImpl.getPackageManager()
.
回答4:
For anyone stumbling upon this old question, go to the source (android.googlesource.com
) https://android.googlesource.com/platform/frameworks/base/+/master/services/core/java/com/android/server/pm/PackageManagerService.java, grepcode is long gone.