2011-01-12 9 views
6

Quando aggiungo un file GZIP alle risorse del mio progetto Android, l'estensione ".gz" viene eliminata quando il progetto è impacchettato. (Quindi, ad esempio, "foo.gz" nella mia cartella delle risorse deve essere accessibile nel codice usando getAssets().open("foo").) Questo non sembra accadere con altre estensioni (ad es. ".html") che sto usando. La risorsa è ancora GZIP-edita (devo legare il flusso di input in un GZIPInputStream per leggerlo).Perché Android aapt rimuove l'estensione di file .gz delle risorse?

Questo comportamento standard o un bug? Se è standard, c'è qualche documentazione su quali estensioni sono rimosse e quali sono preservate?

EDIT: ho errato le cose a prima vista. Sto riscontrando questo problema con il plug-in Eclipse. Non ho provato a eseguire direttamente aapt per vedere se il problema è con lo strumento stesso o con il modo in cui il plug-in lo sta usando.

+1

Lo strumento Android pacchetto risorsa (aapt) riconosce gz file e li aggiunge al .zip senza ri-comprimere (cioè toglie l'intestazione gzip e cade in una voce "compresso" in l'archivio zip, questo è un ottimizzazione del tempo di costruzione). Il comportamento che stai descrivendo sembra diverso. – fadden

+0

Spogliare l'estensione .gz sembra particolarmente programmatore-scostante. Inoltre, l'archivio .apk ha il file nella stessa posizione nella cartella delle risorse come con qualsiasi altro nome. –

+0

Questo sembra essere intenzionale (basandosi solo sul nome del file) all'interno di aapt, Forse il pensiero era che se è gzip .... quindi confondere 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 –

risposta

0

Ecco come lo risolvo, basta fare una cordova prima di costruire il gancio. 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

Correggetemi se ho torto, ma sembra che cancelli tutti i file che terminano in '.gz'. Perché dovrei farlo? –

+0

Solo un walkthru fino a quando aapt funziona bene – josx