読者です 読者をやめる 読者になる 読者になる

やっとJava8 試せそう? Android Studio 2.4 preview5

動作環境

  • macOS Sierra
  • 16G
  • HDDタイプのiMac
  • AS 2.4 Preview5

結論から言うと

限定的に data-binding有りでも 1.8でビルドが出来るようになりました

とりあえず、既存プロジェクトが VERSION_1_8 でビルドできる所の確認まで

調べた状況

一応治ったはず? なんだけど

preview表示しながらレイアウトをtxtモードで編集すると表示がバグります(爆

prewview On/OFFし直せば治りますが・・

とりあえず試した環境は下記

  • app/build.gradle
android{


compileOptions {
      encoding = 'UTF-8'
      sourceCompatibility _JavaVersion as org.gradle.api.JavaVersion
      targetCompatibility _JavaVersion as org.gradle.api.JavaVersion
}

buildTypes {
    debug{
        debuggable true

        //AS上からInstantRunが実行されたときのみ適応☆
        def isIdeBuild = "false"
                def compilation = project.properties['android.optional.compilation'] as String
        if(compilation != null && compilation.indexOf("INSTANT_DEV")!= -1){
               isIdeBuild = "true"
        }
        ant.echo "[isIdeBuild]:"+isIdeBuild 

        if(compileOptions.sourceCompatibility == JavaVersion.VERSION_1_8){
             defaultConfig.minSdkVersion 24
             defaultConfig.multiDexEnabled true
             defaultConfig.multiDexKeepProguard file('multi-dex-keep.txt')
        }
        else //■
        if("true".equalsIgnoreCase(isIdeBuild) && compileOptions.sourceCompatibility != JavaVersion.VERSION_1_8){
             defaultConfig.minSdkVersion 21 //
        }
        else{
              //=== Build Shurinkerを実行 ===
              minifyEnabled true
              useProguard false 
              proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro', 'shrinker-rules.pro'
        }
     }
}

}
  • gradle.propeties
android.enableBuildCache=false //★

#_JavaVersion=VERSION_1_7
_JavaVersion=VERSION_1_8

■の部分をコメントにして、動かしてみたのですがよくわかんないエラーが出てしまいましたね(汗

まあ InstantRun と build shulinker は元々共存できないので仕方ないのかも・・・

あと MultiDexに関しては、以下で通しました

protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    //if(android.os.Build.VERSION.SDK_INT >= 24){
    //              or
    if(android.os.Build.VERSION.RELEASE.compareTo("7.0") >= 0){
        android.support.multidex.MultiDex.install(this);
    }
}

MultiDex使うと OS4以上になってしまうんですけどね・・

流石に

あたり全入りだと proguardで要らない関数削るのも流石に限界あるか・・ という状態

ココに関しては、IDE的にはInstantRunチェックは付いていたのですが

[ant:echo] [compilation]:null //<= チェックついていてもInsantで動かない
[ant:echo] [isIdeBuild]:false

なログが出ていたので、VERSION_1_8のときは今回動かさないようにしたみたい*1

でも★の指定しないと、Build Cache 見に行くんだよね。それで

data-bindingの Build Cache ありません => ビルドエラー

で止まると。まあ今回はOFFにしてもエラーになりませんでしたが・・*2

うーん、とするとまだ VERSION_1_8 ビルド自体が不安定なのかな?


あと、そういえば MockWebServer で下記のエラーが出たので

SHA1 digest error for org/bouncycastle/LICENSE.class

  • app/build.gradle
packagingOptions {
    exclude 'org/bouncycastle/LICENSE.class'
}

sourceSets {
    main {
        java {
            exclude 'org/bouncycastle/LICENSE.class'
        }
    }
}

で ビルドは通してみたものの、この対処でOKなのかイマイチ不安

普通にぐぐる

が出てきちゃうけど、AS2.4p4からの

MockWebServer の dependencies の bcprov-jdk15on-1.56.jar が不正jarとしてビルドできない

が詳細エラーが出た感じなだけだから除去難しいよなと。

local鯖のSSL対応はまだ自分動かせてないですし・・


たぶんこれ

  • AS 2.3 Beta の時に
    • InstantRunのHotswapボタン(イナズマボタン)がデフォルト機能になったように
  • AS 2.4 Beta で
    • デフォルト機能になりそうなんだけど、作り途中のリリースしてしまうんですね(汗

2−3回ビルドするとこんな感じになります。*3

でも 「AS2.4p快適やー」 と今回もTLで絶賛呟かれている人も何人か居るので、環境依存なのか??

  • separate VMにしても include VMにしても Heapがでかくなる傾向にあるよう
    • 3g指定 => deamonプロセス6G
    • 1g + 2g dex指定 => deamonプロセス3-4G *4

TLメモ

TLメモ(AS2.4)

これなんですけど

  • Cmd+Shift+F の検索のフォルダ除外フィルターの設定場所

がわかんなくなってすごく不便になったです・・*5

これはテストしてたら検証端末にUpdateかかってきた。

InstantAppってインストールレスでなかったでしたっけ?

SDKは未公開だけど、GoogleNowみたいに 結局コンポネントだけ入れる形なのな・・


TLメモ(AS2.3)

これは AS2.3 からっぽい。 自分も中央ホイールでスクロールできるの初めて知った。

AS2.2で既に実装されてた。IDEA 2017.1 on AS2.2 で確認可能

で試してみたけど、やっぱ中途半端だったorz

  • 深い階層のlayout.xmlは非推奨
    • RelativeLayoutを使いましょう
    • ConstraintLayoutを使いましょう
      • Percent Layout は非推奨になりました

でなかったっけ??

これはListViewだと前からな気がするんだけど、RecyclerViewだとAS2.3からなのかな?


TLメモ(gradle 3.5) 2017/04/11 追記

みてるとバージョン上がるごとに10MB程度増えているようにみえる。

https:// のデフォルト状態だと、結構DLしまくっている状況の方多そうですね*6

そんなに爆速か? という感じなんですけど・・。富豪環境フレンズな方なんでしょうか・・*7

  • このときはAS2.4p5 で 1_7ビルドで試してました。
  • ただ一点書いておくことは、gradle公式のほう、全然メモリリークしない!
  • なんでG様 Instantビルドはリークしまくるのかがすごい知りたい!

  • AS2.3.1 になってちょっと安定したかなーと(AS2.3.0より)
org.gradle.caching=true

で作ったキャッシュはコマンドでてこないんだけど、物理削除なんだろうか??

*1:前回は普通にInstantRunが動いていた

*2:デフォルトがInstantRun OFFにしているから?

*3:AS2.4p 自体の再起動しないと耐えられなくなる

*4:dexプロセスの使用済みメモリが開放されてない?

*5:デフォルトだとAPT変換の所とか引っかかってコード修正とかしづらいんですよね。エラーもそっちの方にJUMP番号着くしさ。。

*6:喫茶店系のノマドワーカーの方は大変?

*7:他のTwを見る限りWinのXamalin関係で開発されている方に見受けられる