欢迎来到天天文库
浏览记录
ID:41008644
大小:84.03 KB
页数:19页
时间:2019-08-13
《Android应用程序安装过程源代码分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Android系统在启动的过程中,会启动一个应用程序管理服务PackageManagerService,这个服务负责扫描系统中特定的目录,找到里面的应用程序文件,即以Apk为后缀的文件,然后对这些文件进解析,得到应用程序的相关信息,完成应用程序的安装过程,本文将详细分析这个过程。 应用程序管理服务PackageManagerService安装应用程序的过程,其实就是解析析应用程序配置文件AndroidManifest.xml的过程,并从里面得到得到应用程序的相关信息,例如得到应用程序的组件Activity、Service、BroadcastReceiver和ContentProv
2、ider等信息,有了这些信息后,通过ActivityManagerService这个服务,我们就可以在系统中正常地使用这些应用程序了。 应用程序管理服务PackageManagerService是系统启动的时候由SystemServer组件启动的,启后它就会执行应用程序安装的过程,因此,本文将从SystemServer启动PackageManagerService服务的过程开始分析系统中的应用程序安装的过程。 应用程序管理服务PackageManagerService从启动到安装应用程序的过程如下图所示: 下面我们具体分析每一个步骤。 Step1.Syst
3、emServer.main 这个函数定义在frameworks/base/services/java/com/android/server/SystemServer.java文件中:viewplain1.public class SystemServer 2.{ 3. ...... 4. 5. native public static void init1(String[] args); 6. 7. ...... 8. 9. public static void main(String[] args) { 10. .....
4、. 11. 12. init1(args); 13. 14. ...... 15. } 16. 17. ...... 18.} SystemServer组件是由Zygote进程负责启动的,启动的时候就会调用它的main函数,这个函数主要调用了JNI方法init1来做一些系统初始化的工作。 Step2.SystemServer.init1 这个函数是一个JNI方法,实现在 frameworks/base/services/jni/com_android_server_SystemServer.cpp文件中:
5、viewplain1.namespace android { 2. 3.extern "C" int system_init(); 4. 5.static void android_server_SystemServer_init1(JNIEnv* env, jobject clazz) 6.{ 7. system_init(); 8.} 9. 10./* 11. * JNI registration. 12. */ 13.static JNINativeMethod gMethods[] = { 14. /* name, signature, func
6、Ptr */ 15. { "init1", "([Ljava/lang/String;)V", (void*) android_server_SystemServer_init1 }, 16.}; 1. 2.int register_android_server_SystemServer(JNIEnv* env) 3.{ 4. return jniRegisterNativeMethods(env, "com/android/server/SystemServer", 5. gMethods, NELEM(gMethods)); 6.}
7、 7. 8.}; // namespace android 这个函数很简单,只是调用了system_init函数来进一步执行操作。 Step3. libsystem_server.system_init 函数system_init实现在libsystem_server库中,源代码位于frameworks/base/cmds/system_server/library/system_init.cpp文件中
此文档下载收益归作者所有