Android T user软件重启卡log问题

在用户软件重启后,设备无法开机并卡在Android界面,错误日志显示Zygote初始化失败,原因是系统在加载Android.app.SystemServiceRegistry时找不到WiFi相关的类。问题的根本在于apexd_loop.cpp中loop设备重试次数设置过少,导致在挂载apexwifi时可能因等待时间不足而失败。通过将重试次数增加到10次,可以确保loop设备创建成功,从而避免zygote被杀,使Android服务能够正常启动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录一下,在user软件开机后,点击重启后机器无法开机,卡在android界面

log如下

01-03 08:04:27.328   639   639 W zygote64: Landroid/app/SystemServiceRegistry; failed initialization: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
01-03 08:04:27.328   639   639 W zygote64: (Throwable with no stack trace)
01-03 08:04:27.328   656   807 I hwcomposer: [HWCDisplay] [Display_0 (type:1)] fps:12.994192,dur:1077.40,max:161.57,min:26.59  
01-03 08:04:27.331   639   639 E Zygote  : Error preloading android.app.SystemServiceRegistry.
01-03 08:04:27.331   639   639 E Zygote  : java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
01-03 08:04:27.332   639   639 E Zygote  : System zygote died with fatal exception
01-03 08:04:27.332   639   639 E Zygote  : java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
01-03 08:04:27.333   639   639 D AndroidRuntime: Shutting down VM

修改方案:

将system/apex/apexd/apexd_loop.cpp下的

static constexpr size_t kLoopDeviceRetryAttempts = 3u;
改为
static constexpr size_t kLoopDeviceRetryAttempts = 10u;

原因:

是apex mount wifi apex相关路径的时候,会先创建loop device,需要等loop device 产生。

原生等的时间 有点短,如果系统繁忙一点,会造成等不到,进而造成不会去mount apex wifi, 导致wifi 的jar 不会被

添加到 bootclasspath, zygote 起来在初始systemserviceregistry 类的时候,里面会有wifi 相关的api 调用,但是因为

在bootclasspath 里找不到对应的class,而出现异常 导致zygote 被杀,android 服务都起不来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值