繁体   English   中英

某些设备上找不到Android资源

[英]Android resources not found on some devices

我们有一个应用程序(有适量的字符串),我们翻译成27种以上的语言。 我们制作了2个应用程序版本。 这两个版本仅在包名称上有所不同。 所以基本上我们首先使用包名称来构建我们的应用程序,然后使用com.android.sad.app ,然后使用包名为com.android.even.sadder.app另一个。 我们有机会在各种各样的Android设备上测试我们的应用程序,我们发现在一些设备上,如三星ACE三星Galaxy SLG Optimus 2x,我们的应用程序无法加载/读取资源,所以即使是应用程序图标没有显示,当应用程序启动时,它崩溃与android.content.res.Resources.NotFoundException 在其他设备上一切正常。

我们发现,如果我们减少应用程序资源中的字符串总量,我们的应用程序就可以在上述设备上成功运行。 但是,我们认为这不是我们问题的真正解决方案,因为可以在相关设备上运行具有资源中完整字符串的调试版本。

所以我的问题是有人知道什么可能导致这种非常奇怪的行为吗?

经过一些试验和错误试验,我们发现问题出在apk包本身。 在我们的构建过程中,我们在构建完成之后但在签署和对齐apk文件之前将一些文件添加到我们的应用程序apk中 最初我们使用自己的工具(用Java编写,因此使用Zip的Java实现)来提取和重新打包apk

我们注意到,在使用我们的工具重新打包apk之后 ,我们能够将apk的大小减小到Android构建创建的原始apk的 一半大小 正如我们发现这种重新包装是我们问题的原因!

正如我们的实验所示,如果重新打包的apk小于~1.6 Mb ,所有设备都能够读取并使用新重新打包的 apk 但是,如果apk的大小已超过~1.6 Mb ,则此帖中提到的设备(和模拟器)无法正确读取或使用应用程序apk

我一直在寻找关于apk文件格式 (基本上是jar)的一些规范,但我没有发现任何可以解释这种非常奇怪的行为。 那么有人可以澄清为什么这种奇怪的行为发生了,具体原因是什么?

注意:从现在开始,我们使用Android aapt 工具将我们的文件插入到包中,而不是我们一直使用的工具,并且所有设备都可以读取最终的apk

我会在这里假设很多,但我会把钱与字符串的数量相关联。 您的所有字符串都将消耗内存,并且这些目标设备可能没有足够的可用空间。 至于你的包名称差异,较短的一个字节消耗的字节数比当然较长的字节数少。

我建议您减少使用中的字符串数量,看看是否能解决您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM