美文网首页
关于解决安卓 apk 的 R.xxx 问题

关于解决安卓 apk 的 R.xxx 问题

作者: 笔头还没烂 | 来源:发表于2023-05-13 15:44 被阅读0次

今天总算把安卓 apk 的 R.xxx 问题解决了。

问题是这样的,合作商(cp)对接了我的安卓 sdk,并出了 apk 包。但是发现该 apk 包运行即闪退。通过查看相关日志,提示有 R.xxx 的资源问题。究其原因,因为我的 sdk 使用的 R.xxx 的方式来获取 sdk 的资源。而 cp 那边说是因为改了包名,包体就获取不到资源了。

而反编译 apk 包,发现 apk 包体里面的 smali R 文件中的 id 与 public.xml 记录的 id 完全对不上。(有点好奇,既然对不上,cp 是怎么能成功打包的?)

初步评估,解决这个 R.xxx 的闪退问题,有下面两种方法:

  1. 重新出 sdk。将 sdk 获取资源的方式从 R.xxx 的调用方式改成使用工具类获取,如使用封装好的工具类 ResourcesUtil 来获取。再重新封装好 sdk 发 cp 替换即可。
  2. 使用脚本 来解决这个问题。首先先讲一下脚本的工作原理:
    • 反编绎 apk 包,拿到所有 smali R文件中 rid;
    • smali R 文件中的 rid 必须与 public.xml 中记录的 rid 值一一对应,否则 apk 运行会找不到资源;
      • 隐藏的小细节:除了一一对应还不够,在修复这个问题的过程中,我还发现:public.xml 中不能存在 smali R 文件中没有的 rid,否则回编译会失败。即 public.xml 中如果存在多余的 rid 值,则必须删掉。
    • 完成上面两步,再打包回编译、重新打包 apk 包,重新签名、对齐即可。

以上,感谢阅读!

相关文章

网友评论

      本文标题:关于解决安卓 apk 的 R.xxx 问题

      本文链接:https://www.haomeiwen.com/subject/kxxusdtx.html