久しぶりにAndroid-ObservableScrollViewのAndroid SDKのバージョンなどをアップデートしたが、Travis CIでもwerckerでもビルドが失敗してしまった。
もちろんローカルでは成功している。
API Levelの問題などではなく、build-tools-23.0.2が見つからなかったというもの。
結論としては、toolsを先にアップデートすれば良い。
Travis CIの場合はlanguageをandroidにしておけば、toolsをアップデート対象に含めておくだけで良さそう。
(参考: https://github.com/travis-ci/travis-ci/issues/5036)
しかしAndroid-ObservableScrollViewではドキュメントのWebサイトもTravis CIでビルドしているので、
languageにandroidを指定していない。
そのため Travis CI が用意している android-update-sdk
を使っている。
.travis.ymlからinstall:
の問題部分だけ抜粋すると、失敗したビルドでは
install:
- android-update-sdk --accept-licenses='android-sdk-license-.+' --components=build-tools-23.0.2
- android-update-sdk --accept-licenses='android-sdk-license-.+' --components=tools
としていた。
これだと、toolsがアップデートされる前にbuild-toolsをアップデートしようとするのだが、toolsが古いとbuild-tools-23.0.2を見つけることができない模様。
順番を入れ替えて、tools -> build-tools の順でアップデートするとうまくいった。
install:
- android-update-sdk --accept-licenses='android-sdk-license-.+' --components=tools
- android-update-sdk --accept-licenses='android-sdk-license-.+' --components=build-tools-23.0.2
こちらも同様。YAMLで android-sdk-update
を指定することでアップデートできるが、wercker.yml
にはもともと
- android-sdk-update:
filter: tools,platform-tools,android-21,android-22,android-23,build-tools-23.0.2,extra-android-support,extra-android-m2repository
のように1行ですべて指定していた。
これだと、やはりtools自体がアップデートされる前にbuild-toolsその他のパッケージを検索しようとするため新しいバージョンが見つからないケースがある。
対処としては、toolsを先にアップデートして、その他を別の android-sdk-update
に分ければいい。
platform-toolsは特にバージョンをidに含んでいないのでtoolsと一緒にしてしまっても問題ない。
- android-sdk-update:
filter: tools,platform-tools
- android-sdk-update:
filter: android-21,android-22,android-23,build-tools-23.0.2,extra-android-support,extra-android-m2repository