2011-10-01 64 views
9

我们有一个应用程序(具有适量的字符串),我们将其翻译为27种以上的语言。我们制作了2个应用程序版本。这两个版本仅在软件包的名称上有所不同。所以基本上我们首先做一个包名叫com.android.sad.app的应用程序,然后是包名为com.android.even.sadder.app的另一个。 我们必须以测试种类繁多的Android设备的我们的应用程序的机会,我们已经发现,像三星ACE三星Galaxy SLG擎天柱2X我们的应用程序无法加载某些设备/阅读资源所以即使应用程序图标也不显示,并且当应用程序启动时,它会与android.content.res.Resources.NotFoundException崩溃。在其他设备上,一切正常。在某些设备上未找到Android资源

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

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

回答

0

我会在这里假设很多,但我会把钱放在它与字符串的数量有关。所有的字符串都会消耗内存,也许这些目标设备没有足够的空间可用于您的应用程序。至于你的软件包名称的差异,较短的一个会比较长的一个消耗更少的字节。

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

2

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

我们已经注意到,我们的工具重新包装APK后,我们能够减少由Android编译创建的原始APKAPK一半大小的大小。 因为我们发现这重新包装是我们的问题的原因!

由于我们的实验已经证明,如果重新包装APK较小然后〜1.6 MB,所有的设备都能够阅读和与新工作重新包装APK。但是,如果的apk的尺寸为已经超过〜1。6 Mb在这篇文章中提到的设备(和模拟器)无法正确读取或使用应用程序apk

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

注:从现在开始,我们使用了AndroidAAPT工具,我们的文件插入到包中,而不是工具,我们一直在使用和最终的apk可通过所有设备读取