備忘録 〜プログラミング〜

プログラミングに関する事をつらつらと、、

Android Studioでライブラリプロジェクトを管理する方法

EclipseからAndroid Studioに移行する事になったのですが、ライブラリプロジェクトをどう管理するのか分からなかったので、調べてみました。

1:Androidプロジェクトを作成する(例としてHelloWorldプロジェクトを作成)
2:以下がオリジナルプロジェクト(HelloWorldプロジェクト)の構造

HelloWorld/
      app/
           - build.gradle  // ローカル設定(HelloWorldプロジェクトのみに有効)
           ...
      - build.gradle // グローバル設定(全体のプロジェクトに有効)
      - settings.gradle 
      - gradle.properties
      ...

3:ルートディレクトリ(HelloWorld/)配下に、external librariesを置くためのlibフォルダを作成する(任意)
例としてPagerSlidingTabStrip library( https://github.com/astuetz/PagerSlidingTabStrip )を使用する。
4:libフォルダを作ったら、そこにexternal librariesを置く。
ここまででHelloWorldプロジェクトの構造は以下のようになる

HelloWorld/
      app/
           - build.gradle 
           ...
      libs/
           PagerSlidingTabStrip/
                - build.gradle // ローカル設定(PagerSlidingTabStripプロジェクトのみに有効)
      - build.gradle
      - settings.gradle 
      - gradle.properties
      ...

5:setting.gradleファイルに、追加したライブラリをincludeする。
もし、任意のフォルダなどを作っていたら、以下のようにしてパスを設定する必要がある。

include ':app', ':PagerSlidingTabStrip'
project(':PagerSlidingTabStrip').projectDir = new File('libs/PagerSlidingTabStrip')

6:app/build.gradleにライブラリプロジェクトを追加

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile project(":PagerSlidingTabStrip")
}

7:追加したライブラリプロジェクトに、build.gradleがなければ、以下の例のように手動で作成する

apply plugin: 'com.android.library'

dependencies {
    compile 'com.android.support:support-v4:21.0.3'
}

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 21
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            res.srcDirs = ['res']
        }
    }
}

8:gradle.propertiesファイルに、全てのモジュールで使用するSDKバージョン、ビルドツールバージョンを加え、設定値の一元化を行う。

ANDROID_BUILD_MIN_SDK_VERSION=14
ANDROID_BUILD_TARGET_SDK_VERSION=21
ANDROID_BUILD_TOOLS_VERSION=21.1.3
ANDROID_BUILD_SDK_VERSION=21

これで、appと、libs/{ライブラリ}配下のbuild.gradleで上記設定値を使用する事が出来るようになる。

//...
android {
    compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_VERSION)
    buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION

    defaultConfig {
        minSdkVersion Integer.parseInt(project.ANDROID_BUILD_MIN_SDK_VERSION)
        targetSdkVersion Integer.parseInt(project.ANDROID_BUILD_TARGET_SDK_VERSION)
    }
}
//...

9:gradleアイコンをクリックして完了
f:id:buchi_orz:20150216180550p:plain

actionbarsherlock - How do I add a library project to the Android Studio? - Stack Overflow

ちなみに、ライブラリプロジェクトと、jarの違いは、Resourceを保持出来るか、出来ないか。
という事が、根本的な違いのようです。

Android Library Project と JAR の違いを理解する - Unmotivated