android守护进程installd分析
16lz
2021-01-26
最近在研究android的apk安装,从PackageManagerService开始看的,包括解析包PackagePaser,连接底层的Installer,继而转到c部分的installd,(位于frameworks/base/cmds/installd),installd是个很小的程序,主要文件installd.c处理java层Installer的连接,command.c处理真正的命令,包括install,remove,getsize等。
搜了一些installd的分析,看到唯一一篇比较接近的,但是发现他讲到最后其实都是在讲其中的socket连接,原文地址: androidinstalld分析
虽然说installd这个程序很小,其中的代码也不是很复杂,就我现在的理解是这样的,它主要是做了些创建目录的操作
比如install
C/C++ code ?
既然只是创建目录,为什么不直接又java来做呢?感觉installd很鸡肋诶,求各位分析一下!
在java层的操作其实也没什么,就是解析AndroidManifest.xml,还有把包拷贝到/data/app下,把lib拷贝到data/data/<appname>/lib,还有dex文件拷贝到/data/dalvik-cache下。
其实这些我手动解压出来然后考过去也是可以运行的,呵呵。我觉得应该把这些操作放到底层来做才更合理吧。
搜了一些installd的分析,看到唯一一篇比较接近的,但是发现他讲到最后其实都是在讲其中的socket连接,原文地址: androidinstalld分析
虽然说installd这个程序很小,其中的代码也不是很复杂,就我现在的理解是这样的,它主要是做了些创建目录的操作
比如install
C/C++ code ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | int install( const char *pkgname,uid_tuid,gid_tgid) { char pkgdir[PKG_PATH_MAX]; char libdir[PKG_PATH_MAX]; if ((uid<AID_SYSTEM)||(gid<AID_SYSTEM)){ LOGE( "invaliduid/gid:%d%d\n" ,uid,gid); return -1; } if (create_pkg_path(pkgdir,PKG_DIR_PREFIX,pkgname,PKG_DIR_POSTFIX)) return -1; if (create_pkg_path(libdir,PKG_LIB_PREFIX,pkgname,PKG_LIB_POSTFIX)) return -1; if (mkdir(pkgdir,0751)<0){ LOGE( "cannotcreatedir'%s':%s\n" ,pkgdir, strerror ( errno )); return - errno ; } if (chown(pkgdir,uid,gid)<0){ LOGE( "cannotchowndir'%s':%s\n" ,pkgdir, strerror ( errno )); unlink(pkgdir); return - errno ; } if (mkdir(libdir,0755)<0){ LOGE( "cannotcreatedir'%s':%s\n" ,libdir, strerror ( errno )); unlink(pkgdir); return - errno ; } if (chown(libdir,AID_SYSTEM,AID_SYSTEM)<0){ LOGE( "cannotchowndir'%s':%s\n" ,libdir, strerror ( errno )); unlink(libdir); unlink(pkgdir); return - errno ; } return 0; } |
既然只是创建目录,为什么不直接又java来做呢?感觉installd很鸡肋诶,求各位分析一下!
在java层的操作其实也没什么,就是解析AndroidManifest.xml,还有把包拷贝到/data/app下,把lib拷贝到data/data/<appname>/lib,还有dex文件拷贝到/data/dalvik-cache下。
其实这些我手动解压出来然后考过去也是可以运行的,呵呵。我觉得应该把这些操作放到底层来做才更合理吧。
更多相关文章
- SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
- Android(安卓)Log原理分析
- Android按键监听和AsyncTask异步处理
- Andorid App Widget Framework分析之一:AppWidgetService
- SQLite数据库浅谈
- Android(安卓)网络通讯、通信
- 【android】访问web service(大概功能版)
- Android(安卓)Design Support Library - FloatingActionButton
- Android应用程序键盘(Keyboard)消息处理机制分析(7)