kotlin環境周りの比較

はじめに

現在の開発環境

  • 一応安定して動いてる?環境
    • AS3.0系
  • GoogleApisを使ってる or AS 3.0だと補完indexが作れないプロジェクト
    • AS2.3.3利用
  • 重くて耐えられないプロジェクト
    • IDEA使用を試行(挙動的に微妙)

な感じで開いてるIDE自体カオスだったりしますが、この環境でkotlinのサンプルとか作っていた時に気づいた挙動をメモ


動作環境

  • macOS Sierra
  • 16G
  • HDDタイプのiMac
  • AS 3.0-Beta3 /AS 2.3.3/IDEA 2017.2.3
  • gradle plugin 2.3.3 / gradle plugin 3.0-beta3
  • gradle runtime-4.1-bin

環境比較

AS2.3.3

新規Wizからだと標準のAndroidプロジェクトしか作れない

あとこのバージョンから、offlineのチェックを付けていても新規Wiz作るときはネットつなぐようになった*1

  1. 新規WizでAndroid Projectで作成
  2. kotlin GUI pluginが入っていない場合は別途入れる必要があり
  3. Kotlin Configureで変換
    1. このタイミングでwarperを書き換えるので、全部終わったあとにローカルのgradleとか指定するなら指定した方がいい
  4. Activity.java を 「Convert to java File to Kotlin」で Activity.kt に変換

NW接続軽減対応

  • gradle/wrapper/gradle-wrapper.properties
distributionUrl=file\:/Users/XXXX/gradle-4.1-bin.zip

でもまあ、gradle runtime 4.X系から、XXX.pom を定期的にネットで確認するようになっちゃった

ので、通信不順環境で固まることは多いんですけどね(汗

まあフリーWifiが豊富なアメリカならではの発想なのかも・・*2

ただよく言われるのが

  • app/build.gradle
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions' //★
apply plugin: 'kotlin-kapt' //★

★は基本必須だから、自動追加で良くない? みたいな話はよくTwitterでもみる

Extentions に関して

すごく便利なんだけど、よく知らないと期待しない動きをすることが有るので、下記のページは事前に読んでおいたほうがいい

AS3.0

offlineのチェックを付けていても新規Wiz作るときはネットつなぐ のはBetaあたりから基本みたい

  1. 新規WizでKotlin Projectが作成可能
    1. kotlin Configure が不要
    2. 「Convert to java File to Kotlin」 が不要

extentions とかは標準で記述されないのは同じ。

IDEA

  • offlineのチェックを付けていると新規Wizでエラーになる*3
  • kotlin Configure を実行すると、余計な記述が追記されてエラーになってしまう
    • 手動で余分な部分の除去が必要

gradle plugin 2.2ベースだと、現在のkotlin android plugin 自体がサポートしていないようなので、2.3.3/3.0-beta3 とかに変更する必要はあり

android GUI pluginによる操作ブロックは下記の設定を追加することにより対処自体は可能

  • gradle.propties
# GUI
android.injected.build.model.only.versioned=3
android.injected.testOnly=false

ただ上記の動かしてみた所感としては、

  • プロジェクト構成はできる
  • 補完indexも正常に作成される
  • 実機転送ボタンがアクティブなのに転送できない
    • apkをterminal窓から手動で adb installするしかない

な感じで、少々微妙だったりする。

ただAS環境より全然軽い。


kotlin使ってみての体感

GitHub - AAkira/Java2KotlinPractice のプロジェクト凄くありがたいです

普通はGoogleのアプリ道場というのを登録しないと見れないコードらしい。

言及してたのは、kotlin変換した時に Any? とかに変換されるんですけど

それだと「厳密に書け!」とビルドが通らなくてエラーになるという話。

  • layout.xmlで定義したidの認識が遅い*4
    • findVieByIdがエラーになって、最初凄い混乱してた
    • 一度GradleSync/ビルドすると認識する*5
    • なぜかkotlin extentions経由だとすぐ認識する

TLメモ(kotlin)

*1:たぶんAS3.0のバックポート対応

*2:閉鎖環境で寿司詰めで仕事させるのは日本独自なんですかねー

*3:AS2.3.2までの挙動と同じ

*4:Twitterでも他の方が言及されている

*5:Syncもたまに反応しない