从本机代码访问apk中的压缩文件(从zip内部读取zip)

时间:2012-12-11 20:05:38

标签: android c++ android-ndk zip zlib

背景:

在尝试使我的应用程序的代码库(C / C ++)更具可移植性时,我想尽量减少使用android的本机AAssetManager并切换到libzip以从APK加载资源。我看了一下libzip;将它合并到项目中 - 并且 - 看哪 - 我可以使用libzip直接从APK中读取我的文件。

现在,我想混淆我的资产(或至少使它们的访问变得非常重要),所以我想我会把它们打包成一个加密的zip存档并在APK中包含该存档(基本上是一个zip拉链)。

我的问题:

使用本机代码直接从APK中访问档案中的文件最简单/最有效的方法是什么?

我希望采用与libzip类似的方法,我只需指定一个文件名,然后获取一个包含未压缩数据的缓冲区。

我尝试使用libzip直接在APK中打开压缩存档,但是我要空了......看来libzip只会使用目录而不是内存中的缓冲区打开一个zip文件(这是据我所知。)

我认为zlib是一个明显的选择,但我承认我不知道如何去做。

我还想过将存档复制出APK,但我想浪费尽可能少的空间(很多资产==大档案)。单独下载资产也是我想避免的。

欢迎有用的建议或指示。

1 个答案:

答案 0 :(得分:2)

从你的问题来看,听起来你已经过去了你的APK中的资产流,所以我会跳到这个:正如你所说,zlib是一个明显的选择。网上有大量的例子可以处理内存流。例如,In Memory Decompression: GZIP。使用zlib,您还可以通过NDK获得它的好处(例如,您不需要自己构建和链接)。