zipアーカイブから1つのファイルを抽出するアプリケーションを作成する必要があります。その後、Android用にコンパイルします。
libzip-0.10.1がプリインストールされたUbuntuを使用しています。EclipseでCプロジェクトを作成し、インクルードパスを追加して、ファイルを抽出するための簡単なスクリプトを見つけました。残念ながら、私は以下を構築することができず、いくつかのアドバイスを使用することができます。
// zip.c file
#include <stdio.h>
#include <stdlib.h>
#include <zip.h>
int main(int argc, char **argv) {
struct zip *zip_file;
struct zip_file *file_in_zip;
int err;
int files_total;
int file_number;
int r;
char buffer[10000];
if (argc < 3) {
fprintf(stderr,"usage: %s <zipfile> <fileindex>\n",argv[0]);
return -1;
};
zip_file = zip_open(argv[1], 0, &err);
if (!zip_file) {
fprintf(stderr,"Error: can't open file %s\n",argv[1]);
return -1;
};
file_number = atoi(argv[2]);
files_total = zip_get_num_files(zip_file);
if (file_number > files_total) {
printf("Error: we have only %d files in ZIP\n",files_total);
return -1;
};
file_in_zip = zip_fopen_index(zip_file, file_number, 0);
if (file_in_zip) {
while ( (r = zip_fread(file_in_zip, buffer, sizeof(buffer))) > 0) {
printf("%s",buffer);
};
zip_fclose(file_in_zip);
} else {
fprintf(stderr,"Error: can't open file %d in zip\n",file_number);
};
zip_close(zip_file);
return 0;
};
また、プロジェクトにディレクトリを含めるためにいくつかの.hファイルを追加し、zip.cファイルを使用してディレクトリにいくつかの.cファイルを追加しました。その後、すべての依存関係は良好でしたが、エラーがあります。
‘struct zip’ has no member named ‘default_password’ in file zip_fopen_index.c
ファイルzip_fopen_index.c
は次のとおりです。
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include "zipint.h"
ZIP_EXTERN struct zip_file *
zip_fopen_index(struct zip *za, zip_uint64_t fileno, int flags)
{
return zip_fopen_index_encrypted(za, fileno, flags, za->default_password); // error here
}