出现“entry index is larger than available symbols” <index ,total symbols> 的研究

本文解析了public.xml中出现的error:entryindex大于可用符号数量及符号未定义的问题,通过实例说明了如何排查和修复该错误。

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


原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://yiyangde7.blog.51cto.com/392692/1076436

C:\apk\s\res\values\public.xml:240: error: Public entry identifier 0x7f03014e entry index is larger than available symbols (index 334, total symbols 315). 
C:\apk\s\res\values\public.xml:240: error: Public symbol drawable/notification_header_bg declared here is not defined.

 

出现这样的错误提示告诉我们public.xml中的第240行,id为0x7f030144e的行出现了问题。

 

那到底出了什么问题呢?什么是”entry index is larger than available symbols”?334和315到底是什么意思?“not defined”没有定义是怎么回事?

这都是我当初会问的问题,而且问了不止N遍。

 

我们来看下public.xml中的240行到底写了什么 240   <public type="drawable" name="notification_header_bg" id="0x7f03014e" />

有什么问题呢?貌似没有什么问题。这不是写的清楚明白的么?让我们结合上下文来看。

用Notepad++打开public.xml,

在这个”drawable”类中起始行是173,id为0x7f03000a。结束行是487,id为0x7f030126 。 行数487-173=314,这不就是”total symbols 315“的含义么,315即为总行数。

同样在这个”drawable”类中起始id是0x7f030000(第193行) ,结束id为0x7f030153(第245行),为什么不是上面的0x7f030126(第487行)?因为行数虽然是按顺序排列,但id可不是,最大的id有可能在行的中间,所以很多教程说的在最后添加id可不是跟着最后一行的id,而是同类中的最大id后添加。

“drawable起始id在193行”

{240行id”0x7f03014e“} - {起始id”0x7f030000“} = 14e,十六进制14e换算为十进制为334,看到了没这就是334的含义。

就是说240行id定义的是334号,结果总行数为315,超出了总行数的限制,于是报错。这是因为id不连续造成的。

 

打个比方,大家去银行取钱要拿号排队,如果总人数为315人,结果号拿到了334,意味着什么?中间有人拿了号没取钱就走了呗。银行可以,程序不行,它只会按顺序读取,少一个就出错。告诉你“not defined”。

 

public.xml就像个记账本,所有大事小事都记在上边。按类型分好后,再按id排序。如果反编译的时候出现新的项(如图片),public.xml会自动加入id,但这时已不能保证后续兼容性。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值