2011-01-12 6 views
6

Cuando agrego un archivo GZIP-ed a los recursos de mi proyecto Android, la extensión ".gz" se elimina cuando el proyecto está empaquetado. (Entonces, por ejemplo, "foo.gz" en mi carpeta de activos necesita accederse en código usando getAssets().open("foo")). Esto no parece suceder con otras extensiones (por ejemplo, ".html") que estoy usando. El recurso sigue siendo GZIP-ed (tengo que ajustar el flujo de entrada en un GZIPInputStream para leerlo).¿Por qué Android elimina la extensión de archivos .gz de los activos?

¿Es este comportamiento estándar o un error? Si es estándar, ¿hay alguna documentación sobre qué extensiones se eliminan y cuáles se conservan?

EDIT: malinterpreté las cosas a la vista. Estoy experimentando este problema con el complemento de Eclipse. No he intentado ejecutar aapt directamente para ver si el problema es con la herramienta en sí o con el uso del complemento.

+1

La herramienta paquete de activos Android (AAPT) reconoce .gz archivos y los añade a la .zip sin volver a comprimir ellos (es decir, se elimina el encabezado de gzip y las deja caer en una entrada "comprimido" en el archivo zip, esta es una optimización del tiempo de compilación). Sin embargo, el comportamiento que describes suena diferente. – fadden

+0

Pelar la extensión .gz parece particularmente poco amigable para el programador. Además, el archivo .apk tiene el archivo en el mismo lugar en la carpeta de activos que con cualquier otro nombre. –

+0

Esto parece ser deliberado (basado solo en el nombre de archivo) dentro de aapt, Tal vez el pensamiento fue que si se gzipó ... entonces um confundir a la gente? http://www.google.com/codesearch#uX1GffpyOZk/tools/aapt/Package.cpp&exact_package=git://android.git.kernel.org/platform/frameworks/base.git&q=%22Writing%20all%20files%22&type = cs & l = 309 –

Respuesta

0

Aquí cómo lo resuelvo, simplemente haciendo un cordova antes de crear el gancho. https://gist.github.com/josx/fc76006e6d877b17fefd

#!/usr/bin/env node 

/** 
* Lets clean up some files that conflicts with aapt. 
* https://osvaldojiang.com/p/137 
* https://github.com/driftyco/ionic/issues/4584 
* http://stackoverflow.com/questions/4666098/why-does-android-aapt-remove-gz-file-extension-of-assets 
* https://forum.ionicframework.com/t/android-build-failed-ionic-cordova-unable-to-add-asset-file-file-already-in-archive/41146 
*/ 

var glob = require('glob'); 
var fs = require('fs'); 
var path = require('path'); 

var deleteFilesFromFolder = function(globExp) { 
    // Find files 
    glob(globExp, function(err,files) { 
    if (err) throw err; 
    files.forEach(function(item, index,array) { 
     console.log(item + " found"); 
    }); 

    // Delete files 
    files.forEach(function(item, index,array) { 
     fs.unlink(item, function(err) { 
     if (err) throw err; 
      console.log(item + " deleted"); 
     }); 
    }); 
    }); 
}; 

var globExp = path.resolve(__dirname, '../../www/lib') + '/**/*.gz'; 
deleteFilesFromFolder(globExp); 
+1

Corrígeme si me equivoco, pero parece que simplemente borra todos los archivos que terminan en '.gz'. ¿Por qué querría hacer eso? –

+0

Sólo un walkthru hasta que aapt funcione bien – josx

Cuestiones relacionadas