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

Android Studio 2.2-preview4にしたらハマった話

AS gradle jrebel android

Android Studio 2.2-preview4 をIDEとしてまるっと差し替えた後のこと

プロジェクトをそのまま開いたら変な挙動が起きた

  • STUDIO_JDKが効かなくなった・・
$JAVA_HOME/bin/java -Xmx3g

=>

$STUDIO_HOME/jre/bin/java -Xmx1g
  • Project Structure のProjectJDKの指定も反映されない・・
    • OOMが出てJRebelさんが全く使えなくなった *1
    • しかもASに同梱されていたJDK 1.7でそれが強制指定されていた。*2

IDEの更新はいいのだが・・・

  • android gradle pluginは未だ更新されないので 9-patchが壊れる状況は以前改善されず
  • カスタムレイアウトのレイアウトのプレビューは全く出来ない=>表示されるようなった けど
    • 依然として開くときにエラーが出るのがウザい。これどうにかならないのか?

通常のgradleビルドであればの回避策だと

らへんのお話

  • gradle.propeties
# org.gradle.jvmargs=-Xms512m -Xmx512m -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.jvmargs=-Xms512m  -Xmx512m -XX:Flags=c:/opt/vm.option.txt -Dfile.encoding=UTF-8

org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.configureondemand=true
org.gradle.workers.max=4 // CPUコア数を指定

org.gradle.java.home=/opt/jdk8
  • /opt/vm.option.txt (JDK8用)
MetaspaceSize=128m
MaxMetaspaceSize=128m
+UseG1GC 
G1HeapRegionSize=1m 
InitiatingHeapOccupancyPercent=15
  • build.gradle
android {
  dexOptions {
    javaMaxHeapSize "2g"
    jumboMode = true
  }
}

とかになり

  • メインは512Mで節約しつつ、
  • メモリ馬鹿食いのdex処理には2G(〜4G?)以上を払う

という指定の仕方も出来るんですけどね〜

そこら辺の話は以前下記で書いた

exception-think.hatenablog.com


最終的な解決解

 .iml/.ideaファイルに互換性が無いようで、消してOpenし直してプロジェクト情報を再作成したら治った。。

途中経過的な暫定対処のお話(JRebelを使えるようにする為の)

実際試したパラメータ情報

  • serviceJavaMaxHeapSize=2g
    • Xmxの指定*3
    • 2.2-preview3 までは3g指定されていたけど、2gあれば十分です
    • ただ未だにデフォルトだとどこから引っ張ってきたか謎なんだよな*4

その他の引数系

  • projectJdk=XXX
  • device=XXX
    • USB/EMURATOR/実際のデバイスID
    • 複数端末つないでいるときは下手に指定すると誤動作するみたい

通常は弄らなそうな奴

  • licenseFile=XX
  • logsDir=XXX
  • gradleHomePath=XXX

ログ操作

  • logLevel
    • TRACE/DEBUG/INFO/WARN/ERROR/OFF
  • gradleLogLevel
    • 多分内部鯖(サービス)で実行しているgradle処理のログを出力してくれる
    • TRACE/DEBUG/INFO/WARN/ERROR/OFF
  • agentLogLevel

    • 多分内部鯖(サービス)で実行しているファイル転送等処理のログを出力してくれる
    • TRACE/DEBUG/INFO/WARN/ERROR/OFF
  • enableAgentLogInConsole=true

    • logcatに上記のログを出力してくれる
  • logcatLevel

    • enableAgentLogInConsole=trueの時のログレベル
    • ALL/DEFAULT/OFF
  • classDump=true

  • traceInnerClass=true

    • 通常のログが凄く細かく出てくる。(classLoader的なログとかも)
    • これ見てるとこういう動きしているんだーと実は勉強になったりも
  • clearLogOnStart

    • 実行時にログをクリアする奴*5
  • keepWorkFile

    • 実行時に生成される中間ファイルを残すか否かの設定かと
  • enableMetrics=true

    • 起動時に分析html生成

OFFにする意味あまり意味ない系 *6

  • runParallel=true
  • enableReloading=true
  • incrementalJavaC=true

多分用途的には、開発時のデバック切り分け用だと思う falseにすると、まともに動かないかなと

よくわからない系

  • showTimeLine=true
  • sendTimeLine=true
  • anableAnymoueTimeLine=true

  • forceAbBucket=1

*1:Dex処理に2gは必要なため

*2:何時も1.8使っていたため凄く困った

*3:-Xmx1g だとDex処理でOOMが出るのは定番

*4:サポートに聞いたらProject Structureの設定から持ってきている認識というお話でしたが、内部変数設定がAS実はいい加減?

*5:たぶんデフォルトはtrue

*6:たぶんデフォルトはtrue