Android

リリースビルドがtransformClassesAndResourcesWithProguardForReleaseの時点で失敗する問題

More than 1 year has passed since last update.
Warning: Exception while processing task java.io.IOException: java.lang.IllegalArgumentException: Overflow of unsigned short value [66077]
:app:transformClassesAndResourcesWithProguardForRelease FAILED

こういうのが出てきちゃう方向け。

2017.6.1追記

Gradle Plugin for Android v3.0.0-alpha2ではProguard v5.3.3が採用されていることを確認しました。

tldr;

  • Proguard v5.3.3で直ってるよ
  • Gradle Plugin for Android v2.3.1やv2.4.0-alpha6にはProguard v5.3.2が入ってるから、問題にぶち当たった人は自分で設定してv5.3.3に上げてね

原因

16bitっぽい話なのでmultidexの問題なのかなと思ってしばらく調べていたのですが、どうやら素直にタスク名のとおりにProguardの問題として見ればよかったようです。

同様の問題がProguardのIssueに報告されていました。

本筋の議論が行われていたのは#623のほうだったようです。

既にパッチのやりとりも終わり、修正版のProguard v5.3.3ではこの問題は起こらなくなっています。

ここで問題が。

buildEnvironment
$ ./gradlew buildEnvironment
...
:buildEnvironment

------------------------------------------------------------
Root project
------------------------------------------------------------

classpath
+--- com.android.tools.build:gradle:2.3.1
|    \--- com.android.tools.build:gradle-core:2.3.1
|         +--- com.android.tools.build:builder:2.3.1
...
|         +--- net.sf.proguard:proguard-gradle:5.3.2
|         |    \--- net.sf.proguard:proguard-base:5.3.2

僕らの手元にはProguard 5.3.3が無い・・・!

Gradle Plugin for Android v2.4.0-alpha6でもProguardのバージョンは同じだったので、たぶんしばらくこのままでしょう。

Proguard 5.3.3を導入する

ないなら入れましょう。

$PROJECT_ROOT/build.gradle
buildscript {
    ...
    configurations.all {
        resolutionStrategy {
            force 'net.sf.proguard:proguard-gradle:5.3.3'
        }
    }
}

参考: How to upgrade ProGuard for Android? - Stack Overflow