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

AndroidStudio,eclipse(ADT22),IDEA13EAP 関係の相互移行を確認してみた

前回のエントリはこちら


IDEAの伝道師 エキスパートの @ さんが比較表まとめられていたので追記


JAVA_HOMEで起動できない人は、ANDROID_STUDIO_SDK
って環境変数も別途容易されているとのこと


自分でいじれば JDKバンドルっぽいのも出来るらしい*1

実はこれだけだと言葉足らずで下記な対処は必要。macもJDK7は同じ構造なのでいけるかと思う

http://twitter.com/kimukou2628/status/338318459085668353:twitter:detail:right
http://twitter.com/kimukou2628/status/338318933620846593:twitter:detail:right
http://twitter.com/kimukou2628/status/338320706238574592:twitter:detail:right
http://twitter.com/kimukou2628/status/338321618952663040:twitter:detail:right

な話。tools.jarが見えなくて動かなくなったみたいなネタ

http://twitter.com/kimukou2628/status/338322891177349121:twitter:detail:right



さて本題。

というつぶやきがあったので検証してみた

eclipse上でgradle実行構成を作る場合

環境パスの指定のお話もありますが

  • gradle.properties
# 0525 systemProp.XXX の形でないとgradle1.6では認識できないようなので修正
systemProp.ANDROID_HOME=/Application/android-sdks
systemProp.JAVA_OPTS=-Dgroovy.source.encoding=UTF-8 -Dfile.encoding=UTF-8

を作成すれば要らないはずです

各プロジェクト直下に入れるの面倒とかいう人は

  • $HOME/.gradile

フォルダに入れればOK


1) AndroidStudio

  1. 直下にbuild.gradleファイルがあれば実行する形
  2. gradleの仕様上、一応空でも同じ位置に settings.gradleがあれば動くのでそこからマルチプロジェクト構成で動いてる
  3. 実行自体はgradewでgradle 1.6ランタイムでうごいてる
    1. 上位のgradleで動かす場合は
      1. gradle/warpper/gradle-wrapper.properties の星を書き換えればOK*2 *3
  4. 現状jetGradleのようなウインドウがないので gradleコマンドをタスク指定して実行はできないよう
    1. 下の方で書いてるけど しおしおさん によると[外部実行]登録すればいいんじゃない? とのお話が。。。
distributionUrl=http\://services.gradle.org/distributions/gradle-1.6-bin.zip //☆

な話があったけど


distributionUrl=XXX
を閉鎖環境の鯖のURLに変更すれば閉鎖環境でも使えるとは思う

あとは build.gradleの編集あたりかも(こっちは実行時に落としてくる

  • android_yutori
    • yutori_hisory
      • build.gradle
buildscript {
    repositories {
        //maven { url 'http://repo1.maven.org/maven2' }
        maven { url 'file://opt/repo/maven' }        
        //maven { url 'file:///c:/opt/repo/maven' }  //winならこっち?

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
}

Macならmaven形式に拘るなら

  1. /opt/repo/maven のフォルダ作る
  2. The Central Repository Search Engine からjarを落としてくる
  3. mavenと同じように階層をさらに掘る
  4. gradle-libs/gradle-04.jar を置く

まあそれもめんどいなら

buildscript {
    repositories {
        //maven { url 'http://repo1.maven.org/maven2' }
        flatDir(dirs: file("$projectDir/gradle-libs"))
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
}
  1. カレントフォルダに gradle-libs フォルダを作る
  2. gradle-libs/gradle-04.jar を置く

でもOKだけど。


あとmaven系からDLしてきたのは下記にあるのでコピーとか必要かも

gradle(build.gradle) $HOME/.ivy2
maven(pom.xml) $HOME/.m2

を他の端末にコピーして持っていくイメージ

 まあイマイ先生は古くからIDEA使いこなしてる
mavenモヒカンだからな−。そこら辺いまさら言わせんな 自分で考えろ感覚なんだろうけど(苦笑
 リアルに
GUI卒業=>ant卒業=>maven使いこなしてる
人ってどのくらい要るんだろうね−

http://twitter.com/kimukou2628/status/336514338045194240:twitter:detail:right
http://twitter.com/kimukou2628/status/336514851440566272:twitter:detail:right
http://twitter.com/kimukou2628/status/336516855181221888:twitter:detail:right

まあ会社でもほぼ同じ感じかな。
気が向いたら環境構築して後々さわる(かもしれない<多分正確には動作確認するかも)
だから手順書だけは起こしておいてみたいな・・。
まあIOSが売れてるプラっとホーマーだから仕方ないかね−。
 サムライズムの先生には悪いけど
[AppCodeのなんで無料版がないんだ!]
と息巻いてるお仕事場です><*4



AndroidStudioで新規プロジェクトで生成されるbuild.gradleファイル)

  • android_yutori
    • build.gradle (空)
    • settings.gradle
include ':yutori_history'
    • yutori_hisory
      • build.gradle
buildscript {
    repositories {
        maven { url 'http://repo1.maven.org/maven2' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
}
apply plugin: 'android'

dependencies {
    compile files('libs/android-support-v4.jar')
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 4
        targetSdkVersion 17
    }
}

前回の試しではこのファイルをコピってきてeclipse上で動かす試しをしていた
=> 色々とうまく行かなかった

dependencies {
   //compile files('libs/android-support-v4.jar')
   compile fileTree(dir: 'libs', includes: ['*.jar'])
}

書き換えたりとか・・



2)eclipse3.7 & ADT22

eclipse上でのADT22からの

  • export=> Android=>Generate gradle build fileを試してみる
    • 直下にbuid.gradleファイルが生成されるのみ*5
    • ライブラリプロジェクトの場合は


apply plugin: 'android-library'
と生成されている *6

  • dependencies 記述が無いので手動で追加する必要はあり

つうかlibs固定な話になってるので

dependencies {
   compile fileTree(dir: 'libs', includes: ['*.jar'])
}

をデフォルト生成テンプレートに追加して欲しいかな‥‥

  • ちょっとだけ微妙に頭がいい状態。
    • ただ ASだと [ targetSdkVersion 17] となってたのが
    • ADT22 exportだと [targetSdkVersion 4] となってるのは気になる。。。問題ないの??
  • 普通のプロジェクト
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
}
apply plugin: 'android'

dependencies {
}

android {
    compileSdkVersion 17
    buildToolsVersion "17"

    defaultConfig {
        minSdkVersion 4
        targetSdkVersion 4
    }
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        instrumentTest.setRoot('tests')
    }
}
  • ライブラリプロジェクト
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
}
apply plugin: 'android-library'

dependencies {
}

android {
    compileSdkVersion 17
    buildToolsVersion "17"

    defaultConfig {
        minSdkVersion 4
        targetSdkVersion 4
    }
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        instrumentTest.setRoot('tests')
    }
}

でこの自動生成されたやつだとaidlのコンパイルが通る。
なんで?? と MacでWinMargeをX経由で動かして比較してみたら


公式サイトの記述)
http://tools.android.com/tech-docs/new-build-system/user-guide

aild.srcDirs = ['src']

自動生成)
aidl.srcDirs = ['src']

なんですね・・勘弁してくれっす。。。><



3) IDEA13EAP IDEA12

IDEA13EAPで見てみようと思ったら
gradleがうまく認識させられないみたいで、gradle設定が違うっぽい
ASはどうも IDEA13EAPベースっぽいかな。。。

  • IDEA12

IDEA12_gradle_setting on Twitpic

  • IDEA13/AS

IDEA13EAP_gradle_setting on Twitpic


A) IDEA12 => eclipse37

IDEA12 でAndroidプロジェクト作成

new=>File

  • build.gradle 作成
repositories {
   mavenCentral()
}
apply plugin: 'eclipse'

jetGradle で [gradle eclipse]タスク実行

  • eclipseのプロジェクト設定ファイルが作成される

エラーが出る場合は
javaビルドパス => 順序及びエクスポート

チェックつける


コンパイルが通った状態で
export=> Android=>Generate gradle build file
を実行。これでASでも動かせるようになったはず。

B)AS =>eclipse37
これが一番ひどかった。。。

new=>File

  • build.gradle 作成
repositories {
   mavenCentral()
}
apply plugin: 'eclipse'

対象プロジェクトのコマンドラインから


./gradlew eclipse

  • eclipseのプロジェクト設定ファイルが作成される
  • eclipseにインポート
    • 普通のjavaプロジェクトとしてimportされる。

まあ android maven project ってそういうもんなんで
だから

を普通のandroid project形式に直したんだもんな。。 ADTで認識せ−へんので。。。(汗

C) eclipse37 =>IDEA12
 <= これが一番現実的☆

eclipse37&ADT22環境で新規Androidプロジェクトを作成


build.gradleを上書きしたくない場合は,_build.gradle等で別ファイルで作成

一応 -b コマンドで実行出来ます

  • _build.gradle
repositories {
   mavenCentral()
}
apply plugin: 'idea'

Android アプリケーション開発: Gradle Android プラグインで Android アプリをビルドする で外部実行構成で実行するなら

-b _build.gradle idea

で実行は可能です

  • => IDEAのプロジェクト設定ファイルが作成
  • export=> Android=>Generate gradle build file

でbuild.gradleファイルを作成

この状態だとJetGradle等 でコケるので
local.propertiesを新規作成するか、他のプロジェクトからコピーしてきてください

  • local.propertie
sdk.dir=/Users/XXXXX/android-sdks

ADT22速くパッチでないかな‥‥‥

でもまあ ADT22で

みたいなことも出来るようになったそうなんですけど、追いきれてないかな。。(汗


この操作をすれば
IDEA側から OpenProjectで開けるようになる。ASも問題なし

注)
gradle idea コマンドだと
javaプロジェクトとしてプロジェクト設定ファイルを作ってしまうようで

  • ProjectStructure => SDK:AndroidSDK 選択

をする必要があります

あとeclipseと違い IDEAは libsを標準で認識しませんので

な感じで

  • [+]ボタンよりディレクトリを登録する
  • exportのチェックもつける

必要があります




まあIDEA12にはLibraryProjectがmavenで遣らないといけないから大変
というイバラの道が有るわけなんですけどね。。単一プロジェクトならまあ問題ないのでは?


LibraryProject(ActionBarShalockを使うプロジェクトの場合)


LibP
maven buildトリガーセット
MainP
maven build後のjar参照 =>build
な連携イメージ(ココeclipseユーザには敷居
上記みたいな部分着火が出来るなら 現時点版のASでもlibrary projectいけるかも? id:sakura_bird1 さんに期待?

に解決編の記事があります


IDEAからのgradle task指定の実行の仕方)

http://twitter.com/mike_neck/status/335247647931789312:twitter:detail:right
http://twitter.com/_siosio_/status/335248177789820929:twitter:detail:right
http://twitter.com/_siosio_/status/335257604030857216:twitter:detail:right
http://twitter.com/_siosio_/status/335258921755348992:twitter:detail:right
http://twitter.com/_siosio_/status/335265181330468864:twitter:detail:right
http://twitter.com/_siosio_/status/335265300972961792:twitter:detail:right


参考サイト>

IDEAで外部実行、あとで確認)



AVDに関して)

eclipse と IDEAでうまく共有できない疑惑が。。

 Android Studio のパッケージを表示にすると
AS自体はtarget-17のものしか持ってないようですね。。
AndroidSDKは同梱のようですhttp://twitter.com/penguindaa/status/335231178703532032:twitter:detail:right
http://twitter.com/penguindaa/status/335234551435640833:twitter:detail:right
http://twitter.com/penguindaa/status/335235236256440321:twitter:detail:right
http://twitter.com/kerukerupappa/status/335237300046934018:twitter:detail:right

備考)
一応参照してるAndroid SDKの位置を変更する方法は

にまとめています

 本来はASだけでデモ環境が完結しなければいけなかったのが
変にシステムのANDROID_HOMEを見てしまっている所があって
eclipse側にも大惨事って感じがADT22騒動な感じがしますよね−(汗


追記)

Android Studio で Google Maps Andoird API v2のデモプロジェクトをビルドして実機で動かすまで - sos の 作業メモ
AndroidアプリをGradleでビルドしてみる(2) - fkm 〜 Super Software Entertainerへの道 〜
の記事読んでて思ったこと

  • gradle.properties を追加
ANDROID_HOME=/Users/XXXXXX/android-sdks
JAVA_OPTS=-Dgroovy.source.encoding=UTF-8 -Dfile.encoding=UTF-8

な話も一応はあるので

# 0525修正 systemProp.を付けないと最新版gradleでは読み込まれないよう
systemProp.ANDROID_HOME='/Users/XXXXXX/android-sdks'
systemProp.JAVA_OPTS='-Dgroovy.source.encoding=UTF-8 -Dfile.encoding=UTF-8'

と書いておいたほうがいいかもしれない。。

  • build.gradleを修正
dependencies {
    //compile files('libs/android-support-v4.jar')
    compile files("$ANDROID_HOME/extras/android/support/v4/android-support-v4.jar")
}

とかでは駄目なんだろうか‥‥‥‥‥。まああくまでビルドを通すだけって観点ですが。

  • IDEA/ASで追加jarの補完を聞かせたい場合は
    • sosさんが遣られた 作業メモ をやらざるを得ないのですけど..*7

というかeclipse みたいに libs をIDEA上で自動認識してもらえないもんなんですかね(汗
正確には dependencies 記述あたりをば、、、


まあココらへんの設定って

  • local.propertie
sdk.dir=/Users/XXXXX/android-sdks

に書いているはずなんで、gradle.properties に設定しなくても
local.propertie を読込=>値設定する taskを作ればいい気もするんだけど
ADT22で生成されないってのは今後 廃止なん? それともテンポラリバグ?


gradle使う人は

をまず読みましょう。

@ さんは

でgradleのユーザガイドを翻訳されている方です。

*1:上記でも動かない人の最終手段にも使える

*2:変更すると$HOME/.gradle にランタイムが無ければ勝手にダウンロードしてくる

*3:ダウンロードウザイなら他の端末からそこら辺の情報をコピーしてきてください

*4:どうしても必須でなければ開発ソフトに金払う気があんまりない。会社経営的には普通?

*5:基本上書きっぽい挙動?

*6:export複数チェック入れてもメインプロジェクトにコピーまではしてくれないよう。

*7:classpathにないと補完が動かない。。