くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

Android+Gitで共通ライブラリ

  • Androidアプリ開発での共通化まとめ
  • git submoduleを使って共通ライブラリ化してみた

開発環境

  • 開発環境は下記な感じ。
    • AndroidStudio
    • Gradle
    • Git

プロジェクトの構成

  • プロジェクトの構成は下記な感じ
    • Common-lib
      • 共通ライブラリのプロジェクト
    • App1、App2・・・
      • アプリのプロジェクト
App1/
├── Common-lib
│   ├── build.gradle
│   ├── common-lib
│   ├── gradle
│   ├── gradle.properties
│   ├── gradlew
│   ├── gradlew.bat
│   └── settings.gradle
├── app1
│  ├── build
│  ├── build.gradle
│  ├── libs
│  ├── proguard-rules.txt
│  ├── app1.iml
│  └── src
├── App1.iml
├── build.gradle
└── settings.gradle
  • プリプロジェクトを作って、git initして、submodule addする
$ cd App1
$ git init
$ git submodule add <repogitory_url> Common-lib
  • App1のsettings.gradleを下記な感じに
    • 「:Common-lib:common-lib」のようにディレクトリ構造を書くのがポイントっぽい
include ':app1'                                                                                                                                                                                           
include ':Common-lib:common-lib'
  • App1/app1のbuild.gradleを下記な感じに
    • setting.gradleと同じく「:Common-lib:common-lib」のようにディレクトリ構造を書くのがポイントっぽい
apply plugin: 'android'

android {
・・・
}

dependencies {                                                                                                                                                                                               
    compile fileTree(dir: 'libs', include: ['*.jar'])                                                                                                                                                        
    compile project(':Common-lib:common-lib')                                                                                                                                                                
    compile 'com.android.support:appcompat-v7:19.1.0'                                                                                                                                                        
    compile 'com.android.support:gridlayout-v7:19.1.0'                                                                                                                                                       
    compile 'com.android.support:support-v4:19.1.0'                                                                                                                                                          
}                 
  • App1/Common-libのsettings.gradleは下記な感じ
include ':common-lib'
  • App1/Common-lib/common-libのbuild.gradleは下記な感じ
    • ライブラリなプロジェクトは「android」ではなく、「android-library」プラグインを利用するのがポイントっぽい
apply plugin: 'android-library'                                                                                                                                                                              
                                                                                                                                                                                                             
android {                                                                                                                                                                                                    
    compileSdkVersion 19                                                                                                                                                                                     
    buildToolsVersion "19.1.0"                                                                                                                                                                               
                                                                                                                                                                                                             
    defaultConfig {                                                                                                                                                                                          
        minSdkVersion 11                                                                                                                                                                                     
        targetSdkVersion 19                                                                                                                                                                                  
        versionCode 1                                                                                                                                                                                        
        versionName "1.0"                                                                                                                                                                                    
    }                                                                                                                                                                                                        
                                                                                                                                                                                                             
    compileOptions {                                                                                                                                                                                         
        sourceCompatibility JavaVersion.VERSION_1_7                                                                                                                                                          
        targetCompatibility JavaVersion.VERSION_1_7                                                                                                                                                          
    }                                                                                                                                                                                                        
    buildTypes {                                                                                                                                                                                             
        release {                                                                                                                                                                                            
            runProguard false                                                                                                                                                                                
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'                                                                                                               
        }                                                                                                                                                                                                    
    }                                                                                                                                                                                                        
}                                                                                                                                                                                                            
                                                                                                                                                                                                             
dependencies {                                                                                                                                                                                               
    compile fileTree(dir: 'libs', include: ['*.jar'])                                                                                                                                                        
    compile 'com.android.support:appcompat-v7:19.+'                                                                                                                                                          
}