##概要
Android Studio(0.3.2)におけるLibrary Projectのインポートに結構苦労したので、自分用の備忘録も兼ねて。
例として、ViewPagerIndicatorを導入しています。
##注意事項
Android Studioのバージョンが0.3.2以外でも同様に動く保証はありません。
特に、0.3.1以下だとそもそもメニューのなかの項目が無かったりするので、ご注意を。
#Android Studio(0.3.2)におけるLibrary Project
##下準備
今回は、ここの例に習って、Android Studio側の
Library Studioをインポートしたい大本のプロジェクト(ここではViewPagerIndicatorTestProject)は以下の様な構成とします。
まずはインポートしたいLibrary ProjectをGradle buildに対応させてやる必要があります。
該当するプロジェクトをADTで開き、右クリック→Exportから、Generate Gradle build filesを選択。
Exportしたいプロジェクトを選択し、ViewPagerIndicatorTestProject/librariesに書き出します。
##Moduleのインポート
プロジェクトを右クリックし、メニューからOpen Module Settingsを選択します。
Project SettingsのModulesを選択し、+ボタンを押してImport Moduleを選択します。
ViewPagerIndicatorTestProject/libraries/libraryを選択(build.gradleを選択しないように注意)し、
Create module from existing sourcesを選択し、チェックリストに全てチェックが入っているのを確認しながらNextを何度か押す。
library.imlの上書き確認を求められた場合には、特に変更をしていなければ上書きしてしまって問題ありません。
インポートが終わるとこんな感じになります。
この際、いくつか下部にエラーが表示されている可能性がありますが、今はスルーしてOKを押してProject Structureウィンドウを閉じます。
##Library Project側のbuild.gradleの設定
まずはGradle Pluginを0.6.+にしてやります。
buildscriptのdependenciesを以下のように変更。
dependencies {
classpath 'com.android.tools.build:gradle:0.6.+'
}
また、プロジェクト自体をLibrary Projectとして認識させるために、
apply pluginの項がandroidではなくandroid-libraryになっている事を確認します。
apply plugin: 'android-library'
次に、SDKのバージョンを大本のプロジェクト(ViewPagerIndicatorTestProject)と合わせておかないと、
コンパイルした時にターゲットがおかしいと怒られる可能性があるので、大本のプロジェクトと合わせます。
今回は19に設定しました。
android {
compileSdkVersion 19
最後に、このLibrary Projectが大本のプロジェクトと同一のライブラリに依存していると、
大本のプロジェクトをコンパイルした時にエラーになるので、インクルードの内容を大本のプロジェクトと同様にします。
今回の例では、大本のプロジェクトとLibrary Projectがどちらもcom.android.support:support-v4:18.0.0を利用するため、
dependanciesを以下のように変更します。
※大本のプロジェクトでincludeしないようにしても良いようですが、未確認です。
dependencies {
compile 'com.android.support:support-v4:18.0.0'
//compile fileTree(dir: 'libs', include: '*.jar')
}
Library Project側のbuild.gradleの設定は以上です。
##ViewPagerIndicatorTest側のbuild.gradleの設定
Library Projectをincludeして適切にコンパイルするように指定してやる必要があるので、
dependanciesを以下のように変更します。
'com.android.support:support-v4:18.0.0'に依存している理由は上記を参考のこと。
dependencies {
compile project(':libraries:library')
compile 'com.android.support:support-v4:18.0.0'
}
##settings.gradleの設定
Library Projectをincludeするように設定するだけでOKです。
include ':ViewPagerIndicatorTest', ':libraries:library'
#エラー対策とか
まずは./gradlew cleanを試してみましょう。その上でいくつか遭遇したエラーへの対策をメモ。
##Execution failed for task ':libraries:library:compileReleaseAidl'. > failed to find target android-16
ターゲットとしているAPIレベルのAndroid SDKが見つからない場合に出るようです。
compileSdkVersionを大本のプロジェクトと同様にしたら直りました。
##Execution failed for task ':Hoge:dexDebug'.> Could not call IncrementalTask.taskAction() on task ':Hoge:dexDebug'
インポートしようとしているLibrary Projectと、大本のLibrary Projectが同様のライブラリを利用している場合に起こるようです。
Library Project側のbuild.gradleのdependenciesの記述を確認し、該当するライブラリの参照を大本のプロジェクトと同様にすることによって解決できました。(Library Project側のbuild.gradleの設定参照のこと)
##Local path doesn't exist.
エラー原因は読んで字のごとくなのですが、どうみても適切なパスが設定されているのにこのエラーが発生しました。
Open Module Settingsから、Project Structureウィンドウを開き、出ているエラーを適当に直したり、
cleanしたら気付いたら直ってました・・・。参考までに。