NDKで遊んでいたプログラムをリリースを行おうとしていたところ、なかなかproguardが言うことを聞いてくれなく、仕方がないのでNDK部分を外してビルドを行っていたところ、ドハマりしました。
NDKで必要な変更を行った部分を元に戻してあげれば戻るはずなのだが、これが本当によくわからない状況に陥ってしまいました。
一番の大きな違いは使用しているgradleのバージョンがNDKでは2.5となっている点で、さらにちょっと違ったclasspath 'com.android.tools.build:gradle-experimental:0.2.0'を指定していることです。
この大きな違いのために、そこからbuild.gradleの内容の書き換えを行う必要があり、NDK独自の記述を追加しています。 (詳しくはAndroid Tools Project Site の http://tools.android.com/tech-docs/new-build-system/gradle-experimental)
元に戻すためにはこれらをもとに戻せばいいだけのはずなのですが。
minifyEnabled true
の状態でリリース用のビルドを行うと、
Error:Execution failed for task ':app:packageRelease'.
> Unable to compute hash of C:\AndroidStudioProjects\StarDaydream\app\build\intermediates\classes-proguard\release\classes.jar
Information:BUILD FAILED
というエラーが表示されて終わってしまう。
ライブラリ周りがAndroidのバージョンリリースが重なっていてTools周りもずいぶんバージョンアップしているので怪しいところがどこか検討もつかず、いろいろと変更して試すことにしたのですが、これが結構動作が怪しい。
compileSdkVersion 22
buildToolsVersion "22.0.1"
を 23とか23.0.1を指定したり、
compile 'com.google.android.gms:play-services-analytics:7.5.0'
compile 'com.google.android.gms:play-services-ads:7.5.0'
を指定している部分を
compile 'com.google.android.gms:play-services:7.5.0'
に変えてみたり、play-servicesのバージョンを7.3.0にしたり、7.8.0にしてみたり、試行錯誤を行っていると、稀にうまくビルドが通ってしまうことがあったのですが、うまくいったと喜んで原因個所を狭めようとしているとビルドが通らなくなり、原因が全く特定できずかなりの時間を費やしてしまいました。
挙句の果てに新規プロジェクトを作成して、そこにソースを付け加えて新しいプロジェクトとしてビルドを行っても状況が変わらず途方に暮れてしまいました。
Android StudioのバージョンはStable Channelの1.3を使ってビルドしていたので、思い切ってCanary Channelの1.4 Beta 2にアップデートを行ってみましたが、それでも状況は変わらず。
最後の頼み綱として、うまくビルドが通るプロジェクトと比較することにしました。
すると一つだけ明らかに違っている部分が。
build.gradle(project)の中の
classpath 'com.android.tools.build:gradle:1.2.3'
という部分。
新規のプロジェクトではこれが1.3.0となっていたのですが、うまくビルドできるものは1.2.3となっているではありませんか。
おもむろに戻してビルドを行ってみるとうまく行きました。
と、いうことは1.3.0ではproguardの対応は行われていないのか、また大きな仕様の変更が行われたのでしょうかね。リリースノートをあまり見ていないのが問題なのでしょうかね(笑)
結局うまく行くパターンは、build.gradle(project)のclasspathで1.2.3を指定し、build.gradle(app)で compileSdkVersion 22、buildToolsVersion "22.0.1"と指定するしかありませんでした。
新しいSDKバージョンではproguardは使用できないということなのかな。
(2015/10/15追記)
とりあえずの解決 ようやくSDK23へ
0 件のコメント:
コメントを投稿