如何提高我的应用程序增量更新的效率

5
正如您所知,自 Android 4.1 起,Google 已支持智能应用更新。 对于用户而言,当他们从 Google Play 更新已安装的 Android 应用程序时, 他们只需要下载改变的部分,而不是下载整个 APK 文件。
在我的应用程序中,我也想要支持智能应用更新。 现在我使用 bsdiff 和 bspatch。但是我认为当我更新我的应用程序时,用户需要下载的文件太大了。 并且在我的应用程序的 APK 文件中,libs 文件夹非常大, 我的 APK 大约有 11MB,而 libs 文件夹中的 .so 文件大约有 9MB。 并且当我更新我的应用程序时,我从未更新过 libs 文件夹。 例如:我像这样使用 bsdiff:
bsdiff old.apk new.apk diff.apk
新的 APK 文件大小为 11.5MB,旧的 APK 文件大小大约为 11.4MB, 但差异文件 diff.apk 的大小只有大约 6MB。
而当我试图压缩 diff.apk 以减小其大小时,却没有效果。 因为 diff.zip 的大小等于 diff.apk 的大小。
那么我该怎么做呢?有人可以帮我吗? 提前致谢。
我该如何提高应用程序的增量更新效率?

1
在减小库文件大小方面,你尝试过什么?由于这显然是个棘手的问题,除了对应用程序的其他部分使用的任何工具(例如 Progaurd),我会考虑解决这个问题。 - BonanzaDriver
我认为你需要这个。但是我无法控制C/C++代码,我只使用.so文件。http://blog.algolia.com/android-ndk-how-to-reduce-libs-size/ - lightman1988
2个回答

5
很遗憾,如果你使用Google Play发布应用程序,则对于Delta更新大小,你没有太多可操作性。据我所知,Google的智能应用程序更新技术使用GDIFF Delta编码算法逐块比较旧APK和新APK。这种方法的问题是APK是文件的压缩归档。即使是归档中文件的微小更改也会在字节级别上显着改变APK文件的外观。有关更多信息,请参阅本文:http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6563072
根据我的经验,你唯一可以做的事情就是不使用ProGuard,因为由它混淆代码生成的Delta文件往往会大20%,这显然对安全等方面不利。

嗯,20%其实还不错,我本以为它会完全阻止增量更新。 - HopefullyHelpful

1
这与增量更新无关,但与缩小apk大小有关。通过使用Proguard缩小,我取得了惊人的效果。我的应用程序从4MB+缩小到了约1MB。但说实话,它不容易实现:这里是一份指南:http://developer.android.com/tools/help/proguard.html

在服务器上有一个 diff.apk 文件,我使用 JNI 在我的手机上调用一个 C 方法来实现 bspatch old.apk diff.apk new.apk 的功能,以生成一个新的 apk 并安装它。 - lightman1988
2
我相信Proguard只用于常规Java类,而不用于外部引用和使用的库文件(SO文件扩展名)。希望我是错的。 - BonanzaDriver
我认为是这样的。我的问题是我无法控制c/c++代码,我只能使用编译好的.so文件,我能做的就是像压缩文件一样减小.so文件的大小。你有什么想法吗?提前致谢。 - lightman1988

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接