1.å¦ä½å Android init.rc-ljbphoebe-ChinaUnixå客
2.安卓如何设置开机启动某个程序?init.rc给你搞定
3.å¦ä½å»å Android init.rc (Android init language)
4.安卓里 init.goldfish.rc是什么
5.Android系统Launcher启动流程
å¦ä½å Android init.rc-ljbphoebe-ChinaUnixå客
ããCommands:å½ä»¤
ããActions: å¨ä½
ããTriggers: 触åæ¡ä»¶
ããServices: æå¡
ããOptions: é项
ããPropertise: å±æ§
ãã(1) Commandsæ¯ä¸äºåºæ¬çæä½ï¼ä¾å¦ï¼
ããmkdir /sdcard system system mkdir /system
ããmkdir /data system system
ããmkdir /cache system cache
ããmkdir /config root root
ããmkdir /sqlite_stmt_journals root root
ããmount tmpfs tmpfs /sqlite_stmt_journals size=4m
ããè¿äºå½ä»¤å¨initå¯æ§è¡ç¨åºä¸è¢«è§£æï¼ç¶åè°ç¨ç¸å ³çå½æ°æ¥å®ç°ã
ãã(2) Actions(å¨ä½)表示ä¸ç³»åçå½ä»¤ï¼é常å¨Triggersï¼è§¦åæ¡ä»¶ï¼ä¸è°ç¨ï¼å¨ä½å触åæ¡ä»¶çå½¢å¼ä¸ºï¼
ããon
ãã
ãã
ãã
ããå¨ä½ç使ç¨ç¤ºä¾å¦ä¸ï¼
ããon init
ããexport PATH /sbin:/system/sbin:/system/bin:/system/xbin
ããmkdir /system
ããinit表示ä¸ä¸ªè§¦åæ¡ä»¶ï¼è¿ä¸ªè§¦åäºä»¶åçåï¼è¿è¡è®¾ç½®ç¯å¢åéå建ç«ç®å½çæä½ç§°ä¸ºä¸ä¸ªâå¨ä½â
ãã(3) Servicesï¼æå¡ï¼é常表示å¯å¨ä¸ä¸ªå¯æ§è¡ç¨åºï¼Optionsï¼é项ï¼æ¯æå¡çéå å 容ï¼ç¨äºé åæå¡ä½¿ç¨ã
ããservice vold /system/bin/vold
ããsocket vold stream root mount
ããservice bootsound /system/bin/playmp3
ããuser media
ããgroup audio
ããoneshot
ããvoldåbootsoundåå«æ¯ä¸¤ä¸ªæå¡çå称ï¼/system/bin/voldå/system /bin/playmp3åå«æ¯ä»ä»¬æ对åºçå¯æ§è¡ç¨åºã
ããsocketãuserãgroupãoneshotå°±æ¯é åæå¡ä½¿ç¨çé项ãå ¶ä¸oneshoté项表示该æå¡åªå¯å¨ä¸æ¬¡ï¼èå¦æ没æoneshoté项ï¼
ããè¿ä¸ªå¯æ§è¡ç¨åºä¼ä¸ç´åå¨--å¦æå¯æ§è¡ç¨åºè¢«ææ»ï¼åä¼éæ°å¯å¨ã
ãã(4) Propertiesï¼å±æ§ï¼æ¯ç³»ç»ä¸ä½¿ç¨çä¸äºå¼ï¼å¯ä»¥è¿è¡è®¾ç½®å读åã
ããsetprop ro.FOREGROUND_APP_MEM
ããsetprop ro.VISIBLE_APP_MEM
ããon property:ro.kernel.qemu=1
ããstart adbd
ããsetprop ç¨äºè®¾ç½®å±æ§ï¼on propertyå¯ä»¥ç¨äºå¤æå±æ§ï¼è¿éçå±æ§å¨æ´ä¸ªAndroidç³»ç»è¿è¡ä¸é½æ¯ä¸è´çã
ããinitèæ¬çå ³é®åå¯ä»¥åèinitè¿ç¨çsystem/core/init/keyword.hæ件ã
ããinit.rcç使ç¨æ¹æ³ï¼å¯ä»¥åè说ææ件system/core/init/readme.txt
ããå¦ææ³è¦ä¿®æ¹å¯å¨è¿ç¨åªéè¦ä¿®æ¹init.cï¼system/core/initï¼æè init.rcéçå 容å³å¯.
ããå¦ä½å»å
ããAndroid init.rc (Android init language)
ããAndroid åå§åè¯è¨ç±å大类声æç»æ : è¡ä¸ºç±» (Actions), å½ä»¤ç±» (Commands) ï¼æå¡ç±» (Services), é项类 (Options).
ãã* åå§åè¯è¨ä»¥è¡ä¸ºåä½ï¼ç±ä»¥ç©ºæ ¼é´éçè¯è¨ç¬¦å·ç»æã C é£æ ¼çåææ 转ä¹ç¬¦å¯ä»¥ç¨æ¥æå ¥ç©ºç½å°è¯è¨ç¬¦å·ãåå¼å·ä¹å¯ä»¥ç¨æ¥é²æ¢ææ¬è¢«ç©ºæ ¼åæå¤ä¸ªè¯è¨ç¬¦å·ãå½åææ å¨è¡æ«æ¶ï¼ä½ä¸ºæè¡ç¬¦ã
ãã* 以 # å¼å§ ( åé¢å 许æç©ºæ ¼ ) çè¡ä¸ºæ³¨éè¡ã
ãã* Actions å Services éå«å£°æä¸ä¸ªæ°ç段è½ãææ该段è½ä¸ Commands æ Options ç声æå±äºè¯¥æ®µè½ã第ä¸æ®µè½åç Commands æOptions 被忽ç¥ã
ãã* Actions å Services æ¥æç¬ä¸æ äºçå½åãå¨å®ä»¬ä¹å声æç¸åå½åçç±»å°è¢«å½ä½é误并忽ç¥ã
ããActions
ãã-------
ããActions æ¯ä¸ç³»åå½ä»¤çå½åã Actions æ¥æä¸ä¸ªè§¦åå¨ (trigger) ç¨æ¥å³å® action ä½æ¶æ§è¡ãå½ä¸ä¸ª action å¨ç¬¦å触åæ¡ä»¶è¢«æ§è¡æ¶ï¼å¦æå®è¿æ²¡è¢«å å ¥å°å¾ æ§è¡éåä¸çè¯ï¼åå å ¥å°éåæåã
ããéåä¸ç action ä¾æ¬¡æ§è¡ï¼ action ä¸çå½ä»¤ä¹ä¾æ¬¡æ§è¡ã Init å¨æ§è¡å½ä»¤çä¸é´å¤çå ¶å®æ´»å¨ ( 设å¤å建 / éæ¯ ,property 设置ï¼è¿ç¨éå¯) ã
ããActions 表ç°å½¢å¼ä¸ºï¼
ããon
ãã
ãã
ãã
ãã
ããServices
ãã--------
ããServices æ¯ç± init å¯å¨ï¼å¨å®ä»¬éåºæ¶éå¯ ( å¯é ) ã Service 表ç°å½¢å¼ä¸º :
ããservice [ ]
*ãã
ãã
ãã...
ãã
ããOptions
ãã-------
ããOptions æ¯ Services ç修饰ï¼å®ä»¬å½±å init ä½æ¶ãå¦ä½è¿è¡ service.
ãã
ããcritical
ããè¿æ¯ä¸ä¸ªè®¾å¤å ³é®æå¡ (device-critical service) . å¦æå®å¨ 4 åéå éåºè¶ è¿ 4 次ï¼è®¾å¤å°éå¯å¹¶è¿å ¥æ¢å¤æ¨¡å¼ã
ãã
ããdisabled
ããè¿ä¸ªæå¡ç级å«å°ä¸ä¼èªå¨å¯å¨ï¼å®å¿ 须被ä¾ç §æå¡åæå®å¯å¨æå¯ä»¥å¯å¨ã
ãã
ããsetenv
ãã设置已å¯å¨çè¿ç¨çç¯å¢åé çå¼
ãã
ããsocket [ [ ] ]
ããå建ä¸ä¸ªå为 /dev/socket/ ç unix domin socket ï¼å¹¶ä¼ éå®ç fd å°å·²å¯å¨çè¿ç¨ã å¿ é¡»ä¸º "dgram" æ "stream". ç¨æ·åç»é»è®¤ä¸º 0.
ãã
ããuser
ããå¨æ§è¡æå¡åæ¹åç¨æ·åãå½åé»è®¤ä¸º root. å¦æä½ çè¿ç¨éè¦ linux è½åï¼ä½ ä¸è½ä½¿ç¨è¿ä¸ªå½ä»¤ãä½ å¿ é¡»å¨è¿æ¯ root æ¶è¯·æ±è½åï¼å¹¶ä¸éå°ä½ éè¦ç uid.
ãã
ããgroup [ ]
*ããå¨æ§è¡æå¡åæ¹åç»ãå¨ç¬¬ä¸ä¸ªç»åçç»å°è®¾ä¸ºè¿ç¨éå ç» ( éè¿ setgroups()). å½åé»è®¤ä¸º root.
ãã
ããoneshot
ããå¨æå¡éåºåä¸éå¯ã
ãã
ããclass
ãã为 service æå®ä¸ä¸ªç±»å«åãåæ ·ç±»åçææçæå¡å¯ä»¥ä¸èµ·å¯å¨æåæ¢ãå¦æ没ææå®ç±»å«çæå¡é»è®¤ä¸º "default" ç±»ã
ãã
ããonrestart
ããå½æå¡éå¯æ¶æ§è¡ä¸ä¸ªå½ä»¤ã
ãã
ããTriggers
ãã--------
ããTriggers( 触åå¨ ) æ¯ä¸ä¸ªå符串ï¼å¯ä»¥ç¨æ¥å¹é æç§ç±»åçäºä»¶å¹¶æ§è¡ä¸ä¸ª action ã
ãã
ããboot
ããè¿æ¯å½ init å¼å§åæ§è¡ç第ä¸ä¸ªè§¦åå¨ ( å½ /init.conf 被å è½½ )
ãã
ãã=
ããå½ property 被设为æå®çå¼ æ¶è§¦åã
ãã
ããdevice-added-
ããdevice-removed-
ããå½è®¾å¤èç¹è¢«æ·»å æ移é¤æ¶è§¦åã
ãã
ããservice-exited-
ããå½æå®çæå¡åå¨æ¶è§¦å
ãã
ãã
ããCommands
ãã--------
ãã
ããexec [ ]
*ããFork 并æ§è¡ä¸ä¸ªç¨åº (). è¿å°è¢« block ç´å°ç¨åºæ§è¡å®æ¯ãæ好é¿å æ§è¡ä¾å¦å 建å½ä»¤ä»¥å¤çç¨åºï¼å®å¯è½ä¼å¯¼è´ init 被é»å¡ä¸å¨ã
ãã
ããexport
ãã设å®å ¨å±ç¯å¢åé çå¼ ï¼å½è¿ä¸ªå½ä»¤æ§è¡åææçè¿ç¨é½å¯ä»¥åå¾ã
ãã
ããifup
ãã使ç½ç»æ¥å£ èæºã
ãã
ããimport
ãã解æä¸ä¸ª init é ç½®æ件ï¼æ©å±å½åé ç½®æ件ã
ãã
ããhostname
ãã设置主æºå
ãã
ããchmod
ããæ¹åæ件访é®æé
ãã
ããchown
ããæ¹åæ件æå±åç»
ãã
ããclass_start
ããå½æå®ç±»å«çæå¡æ²¡æè¿è¡ï¼å¯å¨è¯¥ç±»å«ææçæå¡ã
ãã
ããclass_stop
ããå½æå®ç±»å«çæå¡æ£å¨è¿è¡ï¼åæ¢è¯¥ç±»å«ææçæå¡ã
ãã
ããdomainname
ãã设置ååã
ãã
ããinsmod
ããå è½½è¯¥è·¯å¾ ç模å
ãã
ããmkdir [mode] [owner] [group]
ããå¨ å建ä¸ä¸ªç®å½ , å¯éé项 :mod,owner,group. å¦æ没ææå®ï¼ç®å½ä»¥ æéï¼ owner 为 root,group 为 root å建 .
ãã
ããmount
ãã[ ]
*ããå°è¯ mount å°ç®å½
ãã. å¯ä»¥ç¨ mtd@name æ ¼å¼ä»¥å½åæå®ä¸ä¸ª mtd å设å¤ã å å«"ro","rw","remount","noatime".
ããä¾å¦ï¼
ããmount -t vfat -o fmask=,dmask=,rw,flush,noatime,nodiratime /dev/block/mmcblk1p1 /SD1
ããchown system system /SD1
ããchmod /SD1
ããmount -t vfat -o fmask=,dmask=,rw,flush,noatime,nodiratime /dev/block/mmcblk1p6 /SD3
ããchown system system /SD3
ããchmod /SD3
ããsetkey
ããææ¶æ²¡æ
ãã
ããsetprop
ããè®¾ç½®ç³»ç» property çå¼ .
ãã
ããsetrlimit
ãã设置 resource ç rlimit.
ãã
ããstart
ããå¯å¨ä¸ä¸ªæ²¡æè¿è¡çæå¡ã
ãã
ããstop
ããåæ¢ä¸ä¸ªæ£å¨è¿è¡çæå¡ã
ãã
ããsymlink
ããå建ä¸ä¸ª ç符å·é¾æ¥å°
ãã
ããsysclktz
ãã设置系ç»æ¶åº (GMT 为 0)
ãã
ããtrigger
ãã触åä¸ä¸ªäºä»¶ãç¨äºè°ç¨å ¶å® action ã
ãã
ããwrite [ ]
*ããæå¼ çæ件并åå ¥ä¸ä¸ªæå¤ä¸ªå符串ã
ããProperties
ãã----------
ããInit ä¼æ´æ°ä¸äºç³»ç» property 以æä¾æ¥çå®æ£å¨å¹²åã
ããinit.action
ããå½åæ£å¨æ§è¡ç action, å¦æ没æå为 ""
ãã
ããinit.command
ãã被æ§è¡çå½ä»¤ï¼å¦æ没æå为 ""
ãã
ããinit.svc.
ããå½å为 çæå¡çç¶æ ("stopped", "running", "restarting")
ãã
ãã
ããinit.rc ç¤ºä¾ :
ãã-----------------
ãã
ãã# not complete -- just providing some examples of usage
ãã#
ããon boot
ããexport PATH /sbin:/system/sbin:/system/bin
ããexport LD_LIBRARY_PATH /system/lib
ãã
ããmkdir /dev
ããmkdir /proc
ããmkdir /sys
ãã
ããmount tmpfs tmpfs /dev
ããmkdir /dev/pts
ããmkdir /dev/socket
ããmount devpts devpts /dev/pts
ããmount proc proc /proc
ããmount sysfs sysfs /sys
ãã
ããwrite /proc/cpu/alignment 4
ãã
ããifup lo
ãã
ããhostname localhost
ããdomainname localhost
ãã
ããmount yaffs2 mtd@system /system
ããmount yaffs2 mtd@userdata /data
ãã
ããimport /system/etc/init.conf
ãã
ããclass_start default
ãã
ããservice adbd /sbin/adbd
ããuser adb
ããgroup adb
ãã
ããservice usbd /system/bin/usbd -r
ããuser usbd
ããgroup usbd
ããsocket usbd
ãã
ããservice zygote /system/bin/app_process -Xzygote /system/bin --zygote
ããsocket zygote
ãã
ããservice runtime /system/bin/runtime
ããuser system
ããgroup system
ãã
ããon device-added-/dev/compass
ããstart akmd
ãã
ããon device-removed-/dev/compass
ããstop akmd
ãã
ããservice akmd /sbin/akmd
ããdisabled
ããuser akmd
ããgroup akmd
ãã
ããè°è¯
ãã---------------
ããé»è®¤æ åµä¸ï¼ init æ§è¡çç¨åºè¾åºçä¿¡æ¯åéè¯¯å° /dev/null. ä¸ºäº debug ï¼ä½ å¯ä»¥éè¿ Android ç¨åº logwrapper æ§è¡ä½ çç¨åºãè¿å°å¤ä½åè¾åº / é误è¾åºå° Android logging ç³»ç» ( éè¿ logcat è®¿é® ) ã
ãã
ãã
ãã===============================================================
ããAndroidââinit.rcèæ¬
ãã
ããå¨Androidä¸ä½¿ç¨å¯å¨èæ¬init.rcï¼å¯ä»¥å¨ç³»ç»çåå§åä¸è¿è¡ç®åçæä½ã
ããinit.rcå¯å¨èæ¬è·¯å¾ï¼system/core/rootdir/init.rc
ããå 容ï¼
ããCommands:å½ä»¤
ããActionsï¼å¨ä½
ããTriggersï¼è§¦åæ¡ä»¶
ããServices:æå¡
ããOptionsï¼é项
ããPropertiesï¼å±æ§
ããCommandsæ¯ä¸äºåºæ¬æä½ãå¦ï¼
ããmkdir /system
ããmkdir /data system system
ããmkdir /persist system system
ããdevwait /dev/block/mmcblk0p
ããmount ext3 /dev/block/mmcblk0p
ããAction表示ä¸ç³»åå½ä»¤ï¼é常å¨Triggersä¸è°ç¨ï¼å¦ï¼
ããon init //表示ä¸ä¸ªè§¦åæ¡ä»¶
ããsysclktz 0
ããloglevel 3
ãã# setup the global environment
ããexport PATH /sbin:/system/sbin:/system/bin:/system/xbin
ããexport LD_LIBRARY_PATH /system/lib
ããexport ANDROID_BOOTLOGO 1
ããServicesé常表示å¯å¨ä¸ä¸ªå¯æ§è¡ç¨åºï¼Optionsæ¯æå¡çéå å 容ï¼ç¨äºé åæå¡ä½¿ç¨ã
ããservice vold /system/bin/vold //voldæ¯æå¡å称ï¼/system/bin/voldæ¯æ对åºçå¯æ§è¡ç¨åºã
ããsocket vold stream root mount //socketæ¯é åæå¡ä½¿ç¨çé项
ããioprio be 2
ããservice netd /system/bin/netd
ããsocket netd stream root system
ããé åæå¡ä½¿ç¨çé项æsocketï¼userï¼groupï¼oneshotã
ããoneshot表示该æå¡åªå¯å¨ä¸æ¬¡ï¼èå¦æ没æoneshoté项ï¼è¿ä¸ªå¯æ§è¡ç¨åºå°ä¸ç´åå¨ââå¦æå¯æ§è¡ç¨åºè¢«ææ»ï¼åä¼éæ°å¯å¨ã
ããPropertiesæ¯ç³»ç»ä¸ä½¿ç¨çä¸äºå¼ï¼å¯ä»¥è¿è¡è®¾ç½®å读åã
ããsetprop ro.HIDDEN_APP_MEM //setpropç¨äºè®¾ç½®å±æ§
ããsetprop ro.CONTENT_PROVIDER_MEM
ããsetprop ro.EMPTY_APP_MEM
ãã...
ããon property:ro.kernel.qemu=1 //on propertyç¨äºå¤æå±æ§
ããstart adbd
ããè¿éçå±æ§å¨æ´ä¸ªandroidç³»ç»è¿è¡ä¸é½æ¯ä¸è´çã
ããinitèæ¬çå ³é®åå¯ä»¥åèinitè¿ç¨ä¸çsystem/core/init/keyword.hæ件ãå¦ï¼
ããKEYWORD(chroot, COMMAND, 1, do_chroot) //chrootæ¯å½ä»¤ï¼do_chrootï¼ï¼æ¯è°ç¨çå½æ°ï¼è¿ä¸ªå½æ°å¨initè¿ç¨ä¸çsystem/core/init/builtins.cæ件ä¸å®ä¹ã
ããä¾å¦:
ããservice akmd /system/bin/logwrapper /sbin/akmd
安卓如何设置开机启动某个程序?init.rc给你搞定
为了在Android设备开机后自动启动某个程序,我们可以利用init.rc配置文件来实现。以名为pengd的C语言编写的程序为例,该程序需要root权限进行网络操作。
首先,需要解压ramdisk.img文件,淘宝客源码外包假设名为ramdisk_new。接着,修改init.rc文件。请注意,文件的结尾必须为空行,否则编译时会出错。面试没有offer源码init.rc文件的具体配置方式应参照实际设备厂商提供的SDK中的ramdisk文件。
将程序pengd直接拷贝到设备的bin目录或其他相关目录中。重新压缩ramdisk文件。此时,设备开机后会自动运行pengd程序。
为了验证程序是否成功启动,可以使用adb shell命令登录设备并执行查看进程的命令。
init.rc是init进程启动的配置脚本,它使用了Android初始化语言编写。init进程作为Android系统的第一个进程,负责执行初始化任务,老罗的源码如挂载文件系统、初始化属性系统和Klog、selinux等。init.rc脚本由四种类型的声明组成:动作、命令、服务和选项。
动作是响应事件的过程,例如在early-init触发时执行一系列命令。命令在条件触发后逐条执行。init.rc中的常见触发条件包括硬件状态、时间、文库网站源码分享系统事件等。常见的命令有启动、停止、重启服务等。
服务是可执行程序,在特定选项约束下由init程序运行或重启。服务的启动和运行行为由选项定义,常用的选项包括启动时间、运行方式等。
通过合理配置init.rc文件,我们可以在Android设备开机后自动执行特定程序,excel 数据校验源码提高设备的自动化管理效率。
å¦ä½å»å Android init.rc (Android init language)
Cé£æ ¼çåææ 转ä¹ç¬¦å¯ä»¥ç¨æ¥æå ¥ç©ºç½å°è¯è¨ç¬¦å·ãåå¼å·ä¹å¯ä»¥ç¨æ¥é²æ¢ææ¬è¢«ç©ºæ ¼åæå¤ä¸ªè¯è¨ç¬¦å·ãå½åææ å¨è¡æ«æ¶ï¼ä½ä¸ºæè¡ç¬¦ã * 以#å¼å§(åé¢å 许æç©ºæ ¼)çè¡ä¸ºæ³¨éè¡ã * ActionsåServiceséå«å£°æä¸ä¸ªæ°ç段è½ãææ该段è½ä¸CommandsæOptionsç声æå±äºè¯¥æ®µè½ã第ä¸æ®µè½åçCommandsæOptions被忽ç¥ã * ActionsåServicesæ¥æç¬ä¸æ äºçå½åãå¨å®ä»¬ä¹å声æç¸åå½åçç±»å°è¢«å½ä½é误并忽ç¥ãinit.action å½åæ£å¨æ§è¡çaction,å¦æ没æå为"" init.command 被æ§è¡çå½ä»¤ï¼å¦æ没æå为"" init.svc.<name> å½å为<name>çæå¡çç¶æ("stopped", "running", "restarting") init.rc 示ä¾:----------------- # not complete -- just providing some examples of usage#on boot export PATH /sbin:/system/sbin:/system/bin export LD_LIBRARY_PATH /system/lib mkdir /dev mkdir /proc mkdir /sys mount tmpfs tmpfs /dev mkdir /dev/pts mkdir /dev/socket mount devpts devpts /dev/pts mount proc proc /proc mount sysfs sysfs /sys write /proc/cpu/alignment 4 ifup lo hostname localhost domainname localhost mount yaffs2 mtd@system /system mount yaffs2 mtd@userdata /data import /system/etc/init.conf class_start default service adbd /sbin/adbd user adb group adb service usbd /system/bin/usbd -r user usbd group usbd socket usbd service zygote /system/bin/app_process -Xzygote /system/bin --zygote socket zygote service runtime /system/bin/runtime user system group system on device-added-/dev/compass start akmd on device-removed-/dev/compass stop akmd service akmd /sbin/akmd disabled user akmd group akmd è°è¯---------------é»è®¤æ åµä¸ï¼initæ§è¡çç¨åºè¾åºçä¿¡æ¯åé误å°/dev/null.为äºdebugï¼ä½ å¯ä»¥éè¿Androidç¨åºlogwrapperæ§è¡ä½ çç¨åºã
安卓里 init.goldfish.rc是什么
init.goldfish.rc是Android操作系统中的一个初始化文件。
在Android系统中,init进程是内核启动后的第一个进程,它的主要任务是根据一系列初始化文件(如init.rc和init.goldfish.rc)来设置和配置系统环境,包括装载系统库、程序等操作,直到系统完全启动。init.goldfish.rc就是这些初始化文件之一,它通常用于特定的硬件或模拟器环境(如Goldfish模拟器)的配置和初始化。
init.goldfish.rc文件包含了一系列的命令和脚本,这些命令和脚本在系统启动时被执行,以完成一些特定的初始化任务。例如,它可能会设置一些环境变量,创建必要的系统目录,挂载文件系统,设置文件权限,配置网络服务等等。这些命令和脚本通常是针对Goldfish模拟器或特定硬件环境的特定需求而编写的,以确保系统在这些特定环境下能够正确启动和运行。
总的来说,init.goldfish.rc是Android系统中一个重要的初始化文件,它负责在系统启动时配置和初始化一些特定的硬件或模拟器环境,以确保系统能够正确运行。通过仔细编写和配置这个文件,可以确保Android系统在各种不同的硬件和模拟器环境下都能够稳定、高效地运行。
Android系统Launcher启动流程
作者:MannaYang
探索Android系统启动过程,深入了解Launcher运行机制
1. Android启动核心流程详解
- init进程启动:作为系统初始化的核心,init进程主要负责设置进程优先级,创建必要的文件目录,如FirstStageMain负责挂载相关文件,SetupSelinux负责安全策略设置。
2. 从init到Zygote进程
- FirstStageMain和SecondStageMain负责不同的初始化步骤,如目录创建和安全策略配置。
- Zygote进程通过解析init.rc脚本启动,与AppRuntime交互,决定启动ZygoteInit还是RuntimeInit。
3. JVM初始化与ZygoteInit.java
- ZygoteInit.java的main方法通过LocalServerSocket接收命令,创建子进程并执行参数校验。
4. SystemServer的启动
- Zygote的forkSystemServer方法调用SystemServer的main方法,ActivityManagerService开始管理服务和应用进程。
5. ActivityManagerService与Launcher启动
- ActivityManagerService启动核心服务,如Battery、Network等,最终调用Process.start()启动进程,子进程入口为ActivityThread的main(),至此Launcher启动完毕。
6. 应用启动流程
- 从ActivityManagerService到ActivityThread,创建Application、ContentProvider、调用各种生命周期方法,完成了从Launcher到Activity的完整启动过程。
通过深入了解这些核心步骤,可以更好地理解Android开发体系和系统启动的内在逻辑。要深入研究,可以参考系列学习资源:[相关链接1][相关链接2][相关链接3]...