<!-- @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;

}

Android培训班(39)相关推荐

  1. Android培训班(62)dex文件格式3

    SHA-1签名字段    从dex文件头里,已经看到前面有一个4字节的字段检验码了,那为什么又需要一个SHA-1签名字段呢? 这不是重复了吗?起初始看来,好像是有点重复,可是仔细考虑一下,这样设计,还 ...

  2. Android培训班 4

    要想Android运行起来,不但要编译内核正确,还需要有正确地安装根文件系统,才可以运行起来.第一步,就是从模拟器里提取data目录的数据.也许你会问,为什么要从模拟器里提取呢?因为这样做是最方便的, ...

  3. Android培训班(45)

    <!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } A:link { so-language: zxx } --> 帧布局(Fra ...

  4. Android培训班(44)

    <!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> layout-land和layout-port目录主要用来保存应用程序 ...

  5. Android培训班(1)

    Android是基于Linux内核的软件平台和操作系统,是Google在2007年11月5日公布的手机操作系统平台,早期由Google开发,后期由开放手机联盟(Open Handset Allianc ...

  6. android培训班 多少钱,Android培训班(42) --Make

    Android.mk文件是用来向编译系统描述项目组织和编译方式,实际上是GNUmake文件的一小片段,它会被编译系统解析一次或多次. 这个文件内容如下: LOCAL_PATH := $(call my ...

  7. Android培训班(42)

    <!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> Android.mk文件是用来向编译系统描述项目组织和编译方式,实际上 ...

  8. Android培训班(48)

    在android的计算器应用程序里,源程序主要放在目录src目录下面,然后在这个目录根据包的名称进行子目录排列,由于这个程序在XML里包名称如下: package="com.android. ...

  9. Android培训班(47)

    <!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } A:link { so-language: zxx } --> 在资源的目录r ...

最新文章

  1. 在VS下用C语言连接SQLServer2008
  2. html前端获取地理位置_简单阐述什么是前端?后端?
  3. 【计算机网络】数据链路层 : 概述 ( 基本概念 | 功能 | 为 “网络层“ 提供的服务 )
  4. oracle外部表导入,oracle 外部表导入时间日期类型数据
  5. java设计模式--简单工厂设计模式SimpleFactoryPattern
  6. 从一个Android码农视角回顾2018GDD大会
  7. facebook 文本分类_如何禁用和自定义Facebook的通知,文本和电子邮件
  8. 如何改变maven项目的pom文件中默认的主代码目录 以及默认的测试代码目录?
  9. day04【后台】角色维护
  10. 29.3 用户模式构造
  11. c++11特性与cocos2d-x 3.0之std::bind与std::function
  12. java json web token_一分钟简单了解JSON Web Token
  13. C# 实现DES加密解密
  14. 齿轮标准模数c语言编程,齿轮标准模数可以使用( )表示
  15. vue下载压缩包 , 提示文件损坏
  16. Navicat还原nb3备份文件步骤
  17. 招聘需求 视觉工程师
  18. Java工程师考试题
  19. 反垃圾邮件的一些相关链接
  20. Word删除关键字所在行

热门文章

  1. 第二章 Fragment
  2. 江恩循环周期理论(转载)
  3. codeblocks不能调试
  4. Matlab中load函数的用法
  5. C#委托与Lambda表达式
  6. 任务计划(定时任务)
  7. ipc$连接+计划任务
  8. #416 拼娃时代:是谁扼杀了孩子们的想象力?
  9. 通信算法之145:OFDM系统频偏(IFO/FFO)对频域信号影响
  10. C#.NET机器学习与彩票数据分析