2011-01-12 5 views
6

Android 프로젝트의 애셋에 GZIP-ed 파일을 추가하면 프로젝트가 패키지화 될 때 ".gz"확장자가 제거됩니다. 따라서 자산 폴더의 "foo.gz"는 getAssets().open("foo")을 사용하여 코드에 액세스해야합니다. 사용중인 다른 확장자 (예 : ".html")에서는 이와 같은 현상이 발생하지 않습니다. 자산은 여전히 ​​GZIP로되어 있습니다 (입력 스트림을 GZIPInputStream에 랩핑하여 읽어야합니다).왜 안드로이드는 자산의 .gz 파일 확장자를 제거합니까?

이 표준적인 동작 또는 버그입니까? 그것이 표준이라면 어떤 확장 기능을 제거했는지 그리고 어떤 확장 기능이 보존되어 있는지에 대한 문서가 있습니까?

편집 : 나는 현명하게 것들을 misstated. 이클립스 플러그인에이 문제가 발생했습니다. 나는 aapt를 직접 실행하여 문제가 도구 자체에 있는지 또는 플러그인에서 어떻게 사용하고 있는지 확인하지 않았습니다.

+1

안드로이드 자산 패키지 도구 (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

관련 문제