2011-01-12 34 views
6

Android projemin varlıklarıma bir GZIP-ed dosyası eklediğimde, proje paketlendiğinde ".gz" uzantısı kaldırılır. (Örneğin, varlıklarımdaki "foo.gz" klasörünün getAssets().open("foo") kodunu kullanarak erişilmesi gerekir.) Bu, kullandığım diğer uzantılarla (ör. ".html") gerçekleşmiyor. Varlık hala GZIP-ed'dir (bunu okumak için giriş akışını bir GZIPInputStream'de sarmak zorundayım).Android aapt neden varlıkları .gz dosya uzantısını kaldırıyor?

Bu standart davranış ya da hata mı? Standartsa, hangi uzantıların soyulduğu ve korunan belgeleri var mı? DÜZENLEME: Görüşleri gözden kaçırdım. Bu sorunu Eclipse eklentisiyle yaşıyorum. Sorunun kendiliğinden mi yoksa eklentinin nasıl kullanıldığını görmek için doğrudan bir aapt çalıştırmayı denemedim.

+1

Android varlık paket aracı (aapt) dosyalarını .gz tanır ve bunları yeniden sıkıştırarak olmadan .zip ekler (yani o gzip başlığını kapalı şeritler ve bir "sıkıştırılmış" bir girişte düşer zip arşivi, bu bir inşa süresi optimizasyonu). Açıkladığınız davranış farklı olsa da, farklı geliyor. – fadden

+0

.gz uzantısının çıkarılması özellikle programcı dostu değildir. Ayrıca, .apk arşivi, dosyadaki varlıkları klasöründe, başka herhangi bir isimle olduğu gibi aynı yere sahiptir. –

+0

Bu, aapt içindeki kasıtlı (sadece dosya adına bağlı) gibi görünüyor, Belki düşüncesi, eğer gzipliyse .... o zaman insanları şaşırtmak mıydı? 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 –

cevap

0

İşte nasıl çözerim, sadece kanca yapmadan önce bir cordova yapıyorum. 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

Eğer yanılıyorsam düzeltin ama bu sadece .gz' ile biten tüm dosyaları siler. Bunu neden yapmak isterdim? –

+0

Aapt iyi işleyene kadar sadece bir yürüyüş – josx