<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } -->

init.rc文件里,可以看到加载下面的服务:

service installd /system/bin/installd

socket installd stream 600 system system

installd 服务的代码在目录:

Android-2.0/frameworks/base/cmds/installd

installd服务是提供安装dex文件的服务。

它的主要入口函数代码如下:

int main(const int argc, const char *argv[]) {

char buf[BUFFER_MAX];

struct sockaddr addr;

socklen_t alen;

int lsocket, s, count;

创建一个控制的SOCKET。

lsocket = android_get_control_socket(SOCKET_PATH);

if (lsocket < 0) {

LOGE("Failed to get socket from environment: %s\n", strerror(errno));

exit(1);

}

监听这个SOCKET。

if (listen(lsocket, 5)) {

LOGE("Listen on socket failed: %s\n", strerror(errno));

exit(1);

}

fcntl(lsocket, F_SETFD, FD_CLOEXEC);

循环里处理接收到的SOCKET连接。

for (;;) {

alen = sizeof(addr);

s = accept(lsocket, &addr, &alen);

if (s < 0) {

LOGE("Accept failed: %s\n", strerror(errno));

continue;

}

fcntl(s, F_SETFD, FD_CLOEXEC);

从新连接里接收到命令并处理。

LOGI("new connection\n");

for (;;) {

unsigned short count;

if (readx(s, &count, sizeof(count))) {

LOGE("failed to read size\n");

break;

}

if ((count < 1) || (count >= BUFFER_MAX)) {

LOGE("invalid size %d\n", count);

break;

}

if (readx(s, buf, count)) {

LOGE("failed to read command\n");

break;

}

buf[count] = 0;

if (execute(s, buf)) break;

}

LOGI("closing connection\n");

close(s);

}

return 0;

}

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. 一款常用的 Squid 日志分析工具
  3. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  4. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  5. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  6. Android(安卓)2.2 API Demos -- setWallpaper, Translucent和Tra
  7. Android(安卓)XmlResourceParser解析Xm文件实例
  8. Android(安卓)下的 makefile 组织结构
  9. Android之SharePreferences数据存储

随机推荐

  1. html响应式布局_媒体查询
  2. HTML实现图片上传前预览
  3. HTML5、CSS3应用教程之 跟DIV说Bey!Bey!
  4. 1、html/css:基本样式总结
  5. 浏览器的地址栏尺寸是否会影响CSS媒体查
  6. 黑马程序员---在HTML文档中引用CSS有几种
  7. HTML的整个块未接收CSS类样式
  8. 在Emacs中将语法突出显示的代码转换为HTM
  9. HTML5移动应用开发为什么需要引入前端工
  10. 样式Bootstrap的btn-group-justified,添加