IntelliJ IDEA 2017.1 で Android の開発ができるか?の試行

随時追記予定

はじめに

で 一応 AS2.2.+ ベースなのを確認したので、どうしたらうまくいくのかを試してみた

試行状況

表面的な差分

  • 色んなショートカットやボタンがない*1

    • ココらへんは自分で色々と環境設定やらんと駄目な話がStackOverFlowにでてくる
    • :app:generateDebugSources 等がgradle syncの代わりになる? みたいな記載だったけど,うーん?
    • ideaコマンドをG様が公開してくれれば解決の話なんだけど
  • ProjectのViewに Android等 の専用Viewがない

    • main/debug のソースが両方見れたりとかはできない
  • ProfilerのViewとかない

    • 自分は使っていないので必要性は感じられないんだけど・・・
    • AS2.4pからはmemory viewとかついかされてるけど、こっちは益々使わないな・・

所感的な感じだと、下記なイメージ


.iml/.ideaを消してimport (NGパターン)

  • Gradle Project として認識
    • Android Project としてimportの流れがない
  • その後 Android Runtime を発見=>ClassPath追加 の流れ

この状態だと

  • debugフォルダの構成を認識しない
    • debugとかのbuildType ってG様独自拡張なのか??
  • maven projectと互換のように mainフォルダのみ認識

ココらへん調べた感じだと

  • IDEA内の Android新規Wiz でAndroidを選ぶと
    • 従来のAS形式のProject形式になる*2
    • この状態で開き直すとOK

うまくいった操作ルート(OKパターン)

  1. .iml/.ideaをけす
  2. AS2.3 で一旦Open Project してプロジェクト情報を作成する
  3. AS2.3 を終了
  4. IDEA 2017.1 で対象プロジェクトを OpenProject する
    1. Android Projectとして認識される

ぶっちゃけ、AS用のIDEAタスクがかければイイんでしょうけどね。。ココらへん非公開ですおし・・・。

動作的な差分

ただ何故かこの環境で gradle plugin だけ 2.3.+ にしても全然軽いままなんだよなー

Auto ImportがOFF の状態だからのよう

  • ASの場合は、
    • このメニューが消されていて内部で自動ONにされている

から上記の記事で指摘されている状態になる

それ+、OpenProject時/ビルド時 に毎回補完index作り直しているからすごく重い・・*3

IDEAはそんなこと無いから一瞬で開く状態だったりも・・。

これから考察されること

  • ようは
    • 無駄にASは編集ファイル等を監視しているのもあるから下記の挙動なんだよなーと
      • 補完でるまで10秒以上かかる
      • カーソル移動するだけで移動カーソルがカクカク挙動
    • IDEAは、毎回それがないから補完もサクサク動くと
      • たぶんこれが通常のIDEA側に期待されている動き
      • ASはDE的に製品アプリが納品されている認識ではなくて、デモ宣伝用プロパガンダ用検証アプリ使わされている感じかな

ココらへんの話にも絡んでくる話ですけど・・


IDEA固有のお話

今回新規にIDEAを導入する場合に作業すること

ProjectDefaultのProjectStructure

  • Projectを開く前に Welcome画面で下記の設定をする必要があり*4
    • JDK とか ANDROID_HOME を自動認識してくれないため
Configure > ProjectDefault > ProjectStructure

f:id:kimukou_26:20170414073403p:plain で、JDK,ANDROID_SDKのルートパスを [+]で登録して

f:id:kimukou_26:20170414073344p:plain で、選択させて Applyをする

キー操作の干渉

ideaVimが標準にONでなっていて、Shift+Cが封じられていてハマった><

  • Setting(or Project) >Plugin> ideaVim のチェックを外す

sdk updateができない

android sdk の toolsを古い tools.zipに差し替える

コマンドライン ツールのみ入手する の箇所

現在の時点ではまだ、ASの公式サイトからtools.zipはDownload可能

  • ただ、古い方のやつだと
    • 新しい更新URLが追加されていない
    • だから新しい物が落ちてこない

というG様強制アップデート時のURL差し替え対応しているので、手動で追加する必要はあるかも


Databaseアクセス機能(IDEA Ultimate 固有 Plugin)

  1. databaseTool pluginを SQLiteに対応した形
  2. 挙動的には
    1. run-asしてpull
    2. 操作後pushでもどす

したがって、

  • 6系端末で結構多い*5 run-asできない端末には使えない

結局のところ

の対応をしたほうがベター

  • ApplicationPrefixとか付けていると使えない*6


IDEA側でできないこと書き出しメモ

ProjectViewのAndroid View

IDEA側には標準で用意されていない

対策

Scopes で自前で作る*7

変更前 変更後
f:id:kimukou_26:20170415091630p:plain f:id:kimukou_26:20170415091613p:plain

f:id:kimukou_26:20170415091921p:plain

Project Structure情報 & GradleSync

  • .idea/.iml が AS2.3 と IDEA 2017.1 で形式に差分が有る
  • IDEA 2017.1 => AS にもっていくとワークスペース情報が強制的に変換される*8

  • 手動Syncが gradle taskのrefreshボタンでできる? との記載が、上記のimai先生のブログにあったが

    • 現在はこれトリガーで Project Structureの再構成 までは動いていない感じ

対策

build.gradle を弄って Gradle SyncしましょうTopリンクを出すしか無い

build clean メニューがない

ASはよくAPT変換がおかしくなる*9ため、cleanビルドを結構しますが

結構感覚が麻痺していますが、

通常のjavaプロジェクトでそういうことはありえないのでそもそもそのメニューがない

対策

terminal窓で下記コマンドを実行

gradlew clean

Gradle Consoleがない

data-bindingでエラーが出た時に多分困ると思われる

MessageタブにはAPT生成エラーしか表示されないため

対策

現状は対処方法不明・・

terminal窓で下記のコマンドを入力

gradlew assembleDebug

手動ビルドして、System.outのエラー行を特定するしか無いかも*10

InstantRunのHotSwapが使えない

AS2.3からの機能なので現象仕方ないかも。

AS2.2系はColdSwap*11

必ずアプリは再起動される作りになる


複雑なdata-bindingがリアルタイムに認識しない

  • includeしているレイアウトのid参照とかがだめ・・・
    • レイアウト編集時にリアルタイムにindex作り直していないからかもしれないけど*12
  • 直下のレイアウトのidとかは問題なく認識するんですが・・

exception-think.hatenablog.com

対策

手動 Gradle Sync 経由で更新させて 認識させる


layoutPreview で エラーが出た時プレビュー画面が埋まってウザい

AS 2.2.2 が現状逆移植されているそうなので、

AS2.3から、エラーの表示部が画面下端に固定化されている作りでしたね・・(遠い目

対策として

頑張ってエラー原因を消すしか無い

FragmentのlayoutPreviewエラー

G様標準で用意されていない場合、自分でからレイアウトを用意して、tools:layoutで指定


サードパーティViewでエラーになる場合

とか導入した場合

  • res/values/theme.xml
<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>


        <!-- //使うカスタムViewのstyleをAppThemeに登録 -->
        <item name="spbStyle">@style/SmoothProgressBar</item> 
        <item name="cpbStyle">@style/CircularProgressBar</item>
    </style>

</resources>

AppTheme(AppCompat)の詳細は下記参照。


自分で書いたカスタムViewの場合

上記の記事のように isInEditMode() == trueの時に

onDraw等でダミーデータ等で表示するようにすれば layoutPreviewでもちゃんと表示されるようになるらしい(hellocharts-library とかでやってる


Gradle Syncが押せなくなる時がある(表示は出ているけどリンクが押せない)

ライブラリ追加/更新直後にたまに発生

対策

IDEA自体を Invalidate & Restart で再起動

ConstraintLayout 変換メニューが出ない

AS2.3からの機能なので保留

ConstraintLayout をつかうとlayout.xmlでスタイルが見えないエラー

対策

RelativeLayoutとかLinerLayout等では問題ないので(android.jar標準)、標準でない弱みなのかな?

IDEA自体を Invalidate & Restart で再起動

ConstraintLayout をつかうとlayout.xmlで補完が効かない

対策1

jps -v 
gradlew --status

daemonが複数立ち上がっていないか、変なjavaタスクが残っていないか確認

これで改善されない場合は、対策2へ

対策2

AS2.3に戻る。

ただ挙動を見ていると、GUIモードでパーツ動かすたびに Index作成をぐるぐる回しているみたい

なのでこれG様的にかなり頑張っちゃってるから一押しなんじゃないかと思われ*13


追記状況(Android gradle plugin 3.0対応?)

  • gradle.propties
android.injected.build.model.only.versioned=3
android.injected.testOnly=false //★

って変数ですね。これ builder-model-3.0.0-beta2.jar の中のAndroidProjectクラスに定義されている変数なのですが

GUI側のandroid pluginの方もそれを一部参照しているという流れ

github.com

因みに、自分の環境だと★も引っかかりました(AS3.0-Beta2時点)

testフラグが立ってしまい、apk転送不可。*14

AS3.0-Beta3で治ったようですが・・・。状態がコロコロ変わるのでよくわかんないですね(汗

IDEAのgradle plugin自体の仕様変更

*1:GradleSyncボタンとか

*2:専用の.iml/.ideaファイル を作成するみたい。通常の.ideaプロジェクトとは別

*3:これgradleタスクでやればいいと思うのに、中途半端にIDE側で頑張っちゃっていると推察

*4:汎用IDEダカラ仕方ないかな・・PyCharmとかもPython特化だからPythonのパス自動認識とかする感じでしたし・・

*5:というか殆ど??

*6:選択肢がパッケージpulldownなので・・

*7:ただこの情報 AS2.3にはもっていけないかも・・。AS2.4なら可能ですが

*8:まあASのときは暗黙に書き換えられていた経緯があるが・・

*9:失敗しやすい

*10:GradleConsoleで表示しているものもほぼ同じものだと思いますが・・

*11:端末内で差分ビルドキャッシュ結合=>1apkにして転送する

*12:その分編集がめちゃ軽いが・・

*13:これ絶対IDEが重い原因だよな。。

*14:adb install -t で入るらしいですね