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.

  • Android assetManager
  • ¿Es posible obtener la ruta completa de acceso a un archivo de recursos de aplicaciones de Android como una cadena?
  • ¿Cómo cargar una imagen de los activos?
  • GetAssets (); De otra clase
  • Cómo copiar archivos de la carpeta 'assets' a sdcard?
  • ¿Cuál es el método readStream ()? Yo apenas no puedo encontrarlo dondequiera,
  • Cómo obtener una cantidad de los archivos en determinada carpeta en los activos?
  • ¿Cómo cargar videos de la carpeta de activos? (Para reproducirlas con VideoView)
  • Activos de Android con subcarpetas
  • Cómo reproducir vídeos en android desde la carpeta de activos o la carpeta en bruto?
  • Cómo proteger los activos almacenados en Android APK
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.