Lectura de archivos desde un archivo ZIP en su carpeta de activos de Android

Estoy leyendo archivos de un archivo ZIP que se encuentra en mi carpeta de activos de Android usando ZipInputStream : funciona, pero es muy lento, ya que tiene que leer secuencialmente usando getNextEntry() , y hay bastantes archivos.

Si copio el archivo ZIP en la tarjeta SD, leer es muy rápido al usar ZipFile.getEntry , pero no encontré una manera de usar ZipFile con el archivo de activos!

¿Hay alguna manera de acceder a la ZIP en la carpeta de activos de una manera rápida? ¿O debo realmente copiar el ZIP a la tarjeta SD?

(BTW, en caso de que alguien se pregunte por qué estoy haciendo esto: la aplicación es más grande de 50 MB, por lo que para conseguirlo en la Play Store tengo que usar Expansión APKs, sin embargo, como esta aplicación también debe ser puesto en la Amazon App Store, tengo que usar otra versión para esto, como Amazon no soporta expansión APKs, naturalmente … Pensé que el acceso a un archivo ZIP en dos lugares diferentes sería una manera fácil de manejar esto, pero por desgracia .. .)

Esto funciona para mí:

 private void loadzip(String folder, InputStream inputStream) throws IOException { ZipInputStream zipIs = new ZipInputStream(inputStream); ZipEntry ze = null; while ((ze = zipIs.getNextEntry()) != null) { FileOutputStream fout = new FileOutputStream(folder +"/"+ ze.getName()); byte[] buffer = new byte[1024]; int length = 0; while ((length = zipIs.read(buffer))>0) { fout.write(buffer, 0, length); } zipIs.closeEntry(); fout.close(); } zipIs.close(); } 

Puede crear un ZipInputStream de la siguiente manera:

 ZipInputStream zipIs = new ZipInputStream(context.getResources().openRawResource(your.package.com.R.raw.filename)); ZipEntry ze = null; while ((ze = zipIs.getNextEntry()) != null) { FileOutputStream fout = new FileOutputStream(FOLDER_NAME +"/"+ ze.getName()); byte[] buffer = new byte[1024]; int length = 0; while ((length = zipIs.read(buffer))>0) { fout.write(buffer, 0, length); } zipIs .closeEntry(); fout.close(); } zipIs .close(); 

Puede almacenar los archivos sin comprimir directamente en los activos (es decir, descomprimir el archivo zip en los elementos / carpeta). De esta forma, puede acceder a los archivos directamente y se comprimirán de todos modos al construir el APK.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.