やっぱり人柱版でした Android Studio 2.3 Canary

まだversionを上げていない人向けの結論

data-bindingがコンパイルできなくなりました。

エラーすら全くでない。わけわからじ。

ですね。

  • NG
classpath 'com.android.tools.build:gradle 2.3.0-alpha1'
  • OK(2.2.+ベースに戻す)
//classpath 'com.android.tools.build:gradle 2.3.0-alpha1'
classpath 'com.android.tools.build:gradle 2.2.+'

で動くようにはなりますが、頻繁に「gradle pluginのバージョン上げろ」

ダイアログが出てくるので正直ウザイ・・*1

用意されていた対応策が動かない

一応、特定のdata-bindingのバージョンで動かなくなる事を見越して

com.android.databinding.dataBinder

からDLされるバージョン指定ができるはずなのですが、指定しても駄目。

結局data-bindingは未だに、gradle pluginの本体側と密結合なんですよね。。

android {
    dataBinding {
        enabled = true
        version = "1.0-rc4" //★
    }
}

この状態で IDE2.3/gradle plugin 2.2.+戻すと

InstantRunができなくなります。

  • 理由はIDEの方で実行をブロック
    • IDEに指定されてるgradleのバージョンじゃありません」IllegalStateException

まあ InstantRun って

  • JRebel の HotSwap/ColdSwapの技術とは違い
  • 差分ビルドを管理する技術

だと自分は思っていたりしますが、

  • ON時、早ければ10秒程度。変更なし*2なら5秒程度
  • OFFるとやはり 40秒〜90秒*3ぐらいになり

やっぱりビルドが遅いね・・・と実感してしまったりしています

まあここらへんは、layout-previewが死んでるからなんだよな。。相変わらず実機で見ないと分からない的な話

  • あとInstantRun使ってると、
    • 致命的なエラーキャッチ時にUSB接続が死ぬことが有る*4
    • TCPIP経由で繋いでると何故か安定*5
    • genymotionだとGooglePlayServiceが安定して動く&InstantRunとかASの技術ターゲットは5系限定 なんだよな・・・*6
adb tcpip 5555
adb connect XX.XX.XX.XX:5555

G様の安易な IllegalStateException な対応で思うこと

最近この IllegalStateException なコッソリ修正がやたら増えてるんですけど〜><

正直、今まで動いていた処理が動かなくなるのでやめてほしいんですよね。*7

たぶんこう使ってほしくない*8的な意味合いでandroid.jarとかsupport-libraryにぶっこまれてきている感じがします

  • target-25でビルドしたら
    • getSystemService(Context.LOCATION_SERVICE) をUIスレッドしか許可しないとか
    • でも最新の android gradle plugin を使うと target-25を強いられるとか
compile 'com.android.support:customtabs:24.1.+'.

とかの minsdk 15 とかも

  • chromeが入ってるバージョンがこのバージョンから
  • chromeが入れられるOSか判定するのめんどくね? というので

足切りを変更されていたりとか・・

今回の修正に関して(release noteで記載されていないこと)

プロジェクト構成

予想通りimlが互換性がないようです。移行しただけだと、プロジェクトを開いたり補完用indexの作成に5分以上かかります*9

  • .idea/.iml 消して
  • $HOME/build_cache を手動で消して
  • Invalidate Caches/Restart

Open Project し直しが必要。多分互換性がなくて、更新nodeとか探しているんでしょう*10

layout preview が少しだけマシになった

  • 今まで
    • layoutの上に、半透明のエラー画面がでて、必ず閉じないと駄目だった
  • 2.3 Canary
    • layoutの下に、エラー用のTextエリアがおかれてそちらの方に出力。☓ボタン押さなくてOK

layoutのプレビューで相変わらずエラーが出るのは変わらないけど

とりあえず操作ブロックは改善しよう というのは好感が持てるかも。


今回の修正に関して(release noteで記載されていること)

Data Binding のビルドオプション

  • AS 2.2 あたりから
    • 毎回layout保存する度にバックグラウンドでdata-binding変換ビルドぶん回していた状態が*11
    • Gradle Sync遣った段階でdata-binding変換ビルド
      • これIDEAのPowerSaveモードみたいな感じがしますけど*12
      • 編集時にカクカク入力が固まらないようにするため? でも毎回編集後にGradleSyncは面倒かも

未だに変更されたファイルだけじゃなくて、layout周り全部ぶん回るみたいなので

明確な差分ビルドができない限り、CPU100%*13生活は変わらなそうです。

根本的な解決は、やはりCPUリミットを書けるソフトを導入することでしょうね。。

InstantRunの上部のボタン

  • Option1: 今までの実行ボタンシリーズ
  • Option2: HotSwapボタン有りのボタンシリーズ
  • Option3: apk再インストールボタン有りのボタンシリーズ

が切り替えられるのが変更?

というかそもそもHotSwapって動いてますっけ? *14

Lintの制御

Lint in Studio 2.3 - Android Studio Project Site

基本的に、デバックを阻害するワーニング潰しとかでしか使ってないので有り難みが正直分からない。

そもそもlintの一覧表*15すら未だに無いんだよね。。IDEの設定見ろって感じなんでしょうけど。。

ワーニング等が出ても Cmd+Enter で修正方法の候補が出ないことが未だに有り、不親切だなと思ってたりしてます

webP

minsdk 18から使えるとのこと。まだ様子見かな。supportLibraryがでてから考えるかも。

Vector Asset Wizard

VectorDrawable で使うやつ。photoshopのデータがそのまま使えるので、デザイナーさん受けはいいかも。

一応SupportLibraryが出てるのでやっと使う人出てくるかな?という感じ

9patch

未だにデザイナーさんと話が通じない 9patch

まあ

  • iOSのデザインの仕事が多い
  • A側にはI側のデザインがそのまま流れてくる

経緯を考えれば、プログラマー側で諦めて頑張ったほうがいいのかもしれない。。

*1:このプロジェクトでは聞かない を選択しても

*2:と検出されたなら

*3:長いときには180秒

*4:USBマウスとかも巻き添えで死ぬ

*5:genymotionで開発が好まれるのはココらへんもあるかも。

*6:6系以上はGPSが動かないし、4系とかはAS技術ターゲット外

*7:相変わらずドキュメントレスですし

*8:なかには低いOSの強制排除みたいな

*9:Twitterでもプロジェクトが開けないみたいなつぶやきが多数

*10:多分見つからないときがすごく遅くなるような挙動

*11:しかもたまに変更差分がないと判定されてビルド走らない・・

*12:これ有効にするとindexが作られなくて補完が死ぬ

*13:Macだと400%

*14:基本アプリ再起動しか見たことないんですが・・・

*15:エラーにされるLintとか、gradleで書いたときの対応表とか