是否有任何文档可以找到如何加载APK,调用哪些组件以及使用哪些参数?我对合子以及DVM如何收到APK感兴趣。
答案 0 :(得分:0)
没有相关文档,因为它不是公共API。这是实施细节,这意味着它可以随时改变。
虽然您可以做的最好的事情是查看平台的代码。
例如,当您在启动器中点击图标时调用应用程序的意图时,系统会识别它属于您的应用程序,首先需要确定是否已创建Application对象。如果不是 - 做吧。它通过使用类加载器来进行反射,类加载器是上下文类的成员。
看看LoadedApk.java
if (mApplication != null) {
return mApplication;
}
...
java.lang.ClassLoader cl = getClassLoader();
app = mActivityThread.mInstrumentation.newApplication(
cl, appClass, appContext);
根据我的经验创建应用程序后,还会创建内容提供程序,最后创建与您的意图相关的活动。
关于apk如何与DVM一起使用的问题,我相信它与ApplicationLoaders类有关:
PathClassLoader pathClassloader = new PathClassLoader(zip, libPath, parent);
DexClassLoader类接受一个实际上是带有classes.dex的zip文件。 LibPath 是.so文件的路径, parent 是父类加载器 - 所有系统的东西都是zygote预先知道的,并且首先引导整个事物。