2011-01-12 18 views
6

AndroidプロジェクトのアセットにGZIP-edファイルを追加すると、プロジェクトがパッケージ化されるときに ".gz"拡張子が削除されます。 (資産フォルダ内の "foo.gz"はgetAssets().open("foo")を使ってコードにアクセスする必要があります)。これは私が使っている他の拡張子(例えば ".html")では起こりそうにないようです。アセットはまだGZIP化されています(GZIPInputStreamで入力ストリームをラップして読み込む必要があります)。なぜAndroid用のアセットで.gzファイル拡張子を削除できますか?

この標準的な振る舞いですか?それともバグですか?標準であれば、どの拡張機能が削除され、どの拡張機能が保存されているかについてのドキュメントはありますか?

EDIT:私は物事を見苦しく見せつけました。 Eclipseプラグインでこの問題が発生しています。私はaptを直接実行して問題がツール自体にあるのか、それともどのようにプラグインがそれを使用しているのかを確認しようとはしませんでした。

+1

Androidの資産パッケージツール(AAPT)は、ファイルを.gzを認識し、それらを再圧縮せずに.zipファイルに追加します(すなわち、それはgzipヘッダを取り除き、中に「圧縮」エントリにそれらをドロップzipアーカイブ、これはビルド時間の最適化です)。あなたが描いている振る舞いは、違ったものになります。 – fadden

+0

.gz拡張子を取り除くことは、特にプログラマにはやさしくないようです。また、.apkアーカイブのファイルは、他の名前と同じようにassetsフォルダの同じ場所にあります。 –

+0

これはaaptの中で意図的に(ファイル名のみに基づいて)いるようですが、gzippedの場合、おそらく人を混乱させるだろうと考えられたのでしょうか? 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 –

答えて

0

ここで私はそれを解決する方法、ちょうどビルドフックの前にコードバスをやっています。 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

私が間違っていると私を訂正しますが、 '.gz'で終わるすべてのファイルを削除するようです。なぜ私はそれをしたいのですか? –

+0

aaptがうまくいくまでウォークスルー – josx

関連する問題