閉じる

Eclipse + ADTから Android Studioへの移行

想定するのは複数のアプリと共通のライブラリプロジェクト複数を突っ込んでいたワークスペース。*1
そのワークスペースからアプリケーションを一つと依存するライブラリ一つを抜き出して Android Studioでビルドできるようにするまで書けたらいいな。*2
Android Studioでは一つのプロジェクトにアプリケーションを一つ、依存するライブラリ複数という形にせざるをえないみたい。
これだと、一つのアプリケーションをベースにライブラリを更新し、ライブラリをコミット、同じライブラリに依存するアプリケーションはライブラリの更新をかけてからアプリケーションの変更を行い、ライブラリの変更が必要になれば変更&コミットし、最初のアプリケーション側でも…というのを繰り返すことになる?
gitみたいなバージョン管理システムを使っているなら良いけど、svnだときつそうな感じ。
とりあえず、Android Studioで空のアプリケーションプロジェクトを作成。(New Projectで Add No Activityを指定)
PROJECT_ROOT/app/sr/main/java/がソースコードになるので、Eclipseでの PROJECT_ROOT/src/以下で入れ替える。
PROJECT_ROOT/app/sr/main/res/がリソースになるので、Eclipseでの PROJECT_ROOT/res/以下で入れ替える。
次に同じプロジェクトで空のライブラリモジュールを作成(New Moduleで Android Libraryを指定)
アプリケーション同様にソースとリソースを入れ替える。
Eclipseと同じ構成でやれなくもないらしい*3 けど、もう少し Android Studioに慣れてから考えよう。
これだけだとアプリケーション側でライブラリ側を参照できていないのでエラーになるので依存関係を設定してやる。
File – Project Structureで appの Dependenciesタブを選択し、追加で「Module dependency – 依存するライブラリプロジェクト」を選択する。
順番はまぁ とりあえず一番下で。
Project Structureウィンドウを閉じると早速設定が反映され、ビルドが始まる。
ライブラリプロジェクト作成時のデフォルト AndroidManifest.xmlに applicationタグが含まれていて、ic_launcherやら app_nameやら見つからないと言われてる。
ライブラリプロジェクトには不要だろうと Eclipseでは含めていなかったのだけど、あっさりと AndroidManifest.xmlからタグごと削除…というわけにはいかない。
エラー時に表示されているのは gradleが作成した AndroidManifest.xmlファイルで、パスも build/intermediates/bundlees/release/AndroidManifest.xmlのようになっている。
本物はプロジェクトウィンドウの manifestsを選択することで表示されるので、こちらの applicationタグをばっさりと削除。
ついでにアプリケーションのそれも Eclipseでの AndroidManifest.xmlを参照して更新してしまう。
次に単純に .jarファイルを libsディレクトリに入れて参照していたライブラリが引っかかる。
Eclipseの libs/に入れていた .jarファイルを PROJECT_ROOT/app/libs/なり PROJECT_ROOT/LIB_MODULE/libs/なりに入れ、ライブラリプロジェクトの参照追加時と同じように「File dependency」を指定して追加。
appcompat以外のサポートライブラリ*4 等オープンになっている物は libs/に入れるのではなく、「Library dependency」を指定して依存関係を作る方が良いかと。
次にぶつかったのが「R.javaが見つからない」エラー。
ファイルシステム上には生成されているようなので、良く確認すると、ライブラリプロジェクト名とパッケージ名とファイルシステム上の名前が食い違っていただけだった。
gradleはパッケージ名に従って R.javaを生成するのでその辺の確認を。
で、ここまで来ると IDE的には問題が無くなる…と思う。
が、実際にビルドを行う gradleに以上の設定は反映されないので、同様の設定を行ってやる必要があるのが面倒なところ。
プロジェクトウィンドウの Gradle Scriptsってのがそれ。
まずはアプリケーションの defaultConfig周り(applicationId,minSdkVersion,targetSdkVersion,versionCode,versionName)を Eclipseの AndroidManifest.xmlを参照しつつ書き換えると。
ライブラリの依存はモジュールを作成した時点で追加されているので、ここまででビルドは通るようになったので初回を終了。


*1 本来は一つのワークスペースにアプリケーションを一つ、依存するライブラリ複数が良いのだろうけど、このスタイルだとライブラリプロジェクトの変更にアプリを追従させる作業がやりやすいので。

*2 Eclipseからエクスポートを行い、Android Studioでインポートする方法もあるようだけど、Android Studioで新規に作成した場合と更正が異なるようなので、今後新規の企画は Android Studioで作成するであろう事を想定して一から環境構築。

*3 AndroidStudioでmainのディレクトリ構成を使わない方法

*4 android-support-v7-recyclerview.jar

コメントを残す

メールアドレスが公開されることはありません。必須項目には印がついています *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)