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
- 新規WizでAndroid Projectで作成
- kotlin GUI pluginが入っていない場合は別途入れる必要があり
- Kotlin Configureで変換
- このタイミングでwarperを書き換えるので、全部終わったあとにローカルのgradleとか指定するなら指定した方がいい
- 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あたりから基本みたい
- 新規WizでKotlin Projectが作成可能
- kotlin Configure が不要
- 「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使ってみての体感
kotlin
— close_yutori (@kimukou2628) 2017年8月30日
下記のプロジェクトをcloneしてcovert to kotlin とかして変換後のソースとか見てみてるんだけど
RecyclerViewとかinterfaceとかエラーになる物が多くて初心者向きではないかもhttps://t.co/HQJY8oD3mG
GitHub - AAkira/Java2KotlinPractice のプロジェクト凄くありがたいです
普通はGoogleのアプリ道場というのを登録しないと見れないコードらしい。
言及してたのは、kotlin変換した時に Any? とかに変換されるんですけど
それだと「厳密に書け!」とビルドが通らなくてエラーになるという話。
kotlin
— close_yutori (@kimukou2628) 2017年8月30日
一応、javaとkotlinは混雑は出来るようなので、シンプルな部分だけkotlinとかもありかもなと
あとどなたかがつぶやいてたけど、
findViewByIdでのlayout認識が厳しい
kotlin-extention経由だと直ぐ認識するんだけど、、
kotlin
— close_yutori (@kimukou2628) 2017年8月30日
layoutでid追加したとき、GradleSyncしないと認識しない
(Jpsでみてるとkotlin deamonとかいう別のdeamon立ち上がってる
this.xx でid探したいけど出てこない
で、Ankoに逃げたくてもGUI Pluginエラー
- layout.xmlで定義したidの認識が遅い*4
- findVieByIdがエラーになって、最初凄い混乱してた
- 一度GradleSync/ビルドすると認識する*5
- なぜかkotlin extentions経由だとすぐ認識する
TLメモ(kotlin)
AIDL周りってKotlinに変換したらどないなことになるんやろ?
— さきちゃんの中の人、秋太り中😭 (@serenegiant) 2017年8月30日
aidlからインターフェイスとStubを自動生成してそれを実装したJavaのクラスがどこかにあるわけで、onewayメソッドやらinパラメータだとかaidlでimportしたクラスの扱いとかどうなるんだろ?とかaidl変えた時にどこまでチェックしてくれるんだろとか?
— さきちゃんの中の人、秋太り中😭 (@serenegiant) 2017年8月30日
aidlからの自動生成通ればそうですけどソースのどこかにエラーがあれば自動生成されないので、aidl変えた時に生成されるはずのJavaインターフェイス・stubを想像してKotlinで実装する羽目になるんじゃ?と思うんですけど、エラーまみれで真っ赤になったエディタで😵
— さきちゃんの中の人、秋太り中😭 (@serenegiant) 2017年8月30日