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.

  • ¿Cómo cargar videos de la carpeta de activos? (Para reproducirlas con VideoView)
  • Cómo proteger los activos almacenados en Android APK
  • Copiando toda la carpeta con su contenido de los activos a los archivos internos de la aplicación /
  • Cómo copiar archivos de la carpeta 'assets' a sdcard?
  • Android Cómo leer un recurso desde fuera de la actividad principal
  • Activos de Android con subcarpetas
  • Android assetManager
  • Creación de activos de imagen en Android Studio
  • Seguridad de activos en Android
  • Lectura de PDF desde la carpeta de activos usando PDFViewer.jar
  • Cómo reproducir vídeos en android desde la carpeta de activos o la carpeta en bruto?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.