ProGuard実行時にaaptがクラッシュする
ProGuardはJava向けの難読化ツールで、SDK Tools r8とADT8.0.0から同梱されるようになっています。
- Androidアプリの解読・改ざんを防ぐ難読化ツールとは - @IT
- Androidとセキュリティ:Android 2.3(Gingerbread) SDKに標準搭載されたProGuardを試す - Android(アンドロイド)情報-ブリリアントサービス
で、Androidアプリの難読化をしようとしたところ、見事にドハマリしました。。。何周目のネタか分かりませんが、せっかくなので備忘録としてまとめときます。
現象
Androidアプリをreleaseモードでexportする際にProGuardを使用した場合、aaptがクラッシュする。

環境
手順
1. ProGuardやaaptのログをConsoleから確認したいので、Y.A.M の 雑記帳: Android Eclipse から ProGuard を使ってみた。の追記部分を参考にして、Windowメニューから
[Preference]-[Android]-[Build]-[Build output]
の設定を"Verbose"に変更。

2. eclipseで新規Androidプロジェクトを作成

3. project.propertiesに以下の行を追加し、ProGuardを使用するよう設定。proguard.cfgは特に編集しない
proguard.config=proguard.cfg
4. パッケージのexportを実行

5. keystoreを作成

6. 署名用の鍵を作成

7. apkファイルの作成実行

調査/対策
Consoleに出力されたaaptのログをコピーし、エラーの原因となった以下のコマンド(適宜改行)をコマンドラインから実行するとやはり同様のエラーが発生。
C:\android-sdk-windows\platform-tools\aapt.exe package
-v
-S C:\workspace\SampleProject\bin\res
-S C:\workspace\SampleProject\res
-f
--no-crunch
--auto-add-overlay
-M C:\workspace\SampleProject\AndroidManifest.xml
-A C:\workspace\SampleProject\assets
-I C:\android-sdk-windows\platforms\android-4\android.jar
-F C:\WINDOWS\Temp\android_3984224136892715853.ap_ "aapt crash"でググッてみると、SDK Tools r14からの問題らしく、Windows環境で-vオプションをつけるとクラッシュする場合があるとのこと。
その場合、先ほどログを出力するために設定した[Build output]の設定を"Normal"に変更するとクラッシュすることなく、無事apkファイルが生成された。ちなみに、"Silent"でも問題なし。
AAPT crashes on Windows in some cases when the build output is set to verbose.
The workaround is to set Eclipse>Preferences>Android>Build>Build Output to less than Verbose, e.g. Normal.
We have a fix, which will be available in tools 16. [Issue 20395]
ちなみに
[Build output]の設定を"Normal"に変更してそのままexportを再実行すると今度は別のエラーが発生します。

こちらは一度プロジェクトをcleanしてから再exportするか、eclipseを-cleanオプション付きで起動してexportすると良いです。