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

Accessing a compressed file in an apk from native code (read a zip from inside a zip)

本文关键字:zip 读取 文件 本地代码 访问 apk 压缩      更新时间:2023-10-16

背景:

为了使我的应用程序的代码库(C/C++)更具可移植性,我想尽量减少使用android的原生AAssetManager,并切换到libzip从APK加载资产。我看了一眼libzip;将它合并到项目中,瞧,我可以使用libzip直接从APK读取我的文件。

现在,我想混淆我的资产(或者至少让对它们的访问变得不那么琐碎),所以我想把它们打包到一个加密的zip档案中,并将该档案包含在APK中(基本上是一个zip中的zip)。

我的问题:

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

我希望有一种类似于libzip的方法,在那里我可以简单地指定一个文件名,然后获得一个包含未压缩数据的缓冲区。

我曾尝试使用libzip直接从APK中打开压缩档案,但结果是空的。。。libzip似乎只会使用目录打开zip文件,而不会从内存中的缓冲区打开(这是我所了解的)。

我想zlib是一个显而易见的选择,但我承认我不知道该怎么做

我还考虑过从APK中复制存档,但我希望尽可能少地浪费空间(大量资产==大型存档)。我也希望避免以单独下载的方式交付资产。

欢迎提出有用的建议或建议。

从你的问题中,听起来你已经无法进入APK中的资产流,所以我直接跳到这里:正如你所说,zlib是一个显而易见的选择。在线内存流中有大量的示例需要处理。例如,内存中解压缩:GZIP。使用zlib,您还可以通过NDK获得它的好处(例如,您不需要自己构建和链接)。