user icon

GradleでAndroid部品を社内共有しよう!

1.はじめに
  Androidの開発をやっていると、前のプロジェクトで使った部品を次のプロジェクトでも
  使いたいなんてことがでてくると思います。しかし、公開されているリポジトリに
  登録できるような内容の部品じゃないということはよくあると思います。
  ということで、社内のリポジトリにGradleでAndroid部品を共有する内容を書いていきます。

2.手順
  ①gitlabにリポジトリを作成(社内ではgitlabを使っているため)
  ②ライブラリプロジェクトを作成し、AARをリポジトリに登録
  ③②のライブラリを使うプロジェクトの作成

3.gitlabにリポジトリを作成
  テスト的にこういう画像のカスタムビューを持つライブラリにします。
  ということでプロジェクト名は「Android-BaseLine」にしました。
  1

4.BaseLineライブラリを作成します。
  EclipseだとAARが使えないためAndroid Studioを使用します。

5.BaseLineViewはこんな感じ

package com.lancard.baseline;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;

public class BaseLineView extends View {

    public BaseLineView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        Paint paint = new Paint();
        paint.setColor(Color.rgb(0, 49, 236));
        //paint.setStrokeWidth(5);

        int height = getHeight();
        int width = getWidth();

        int y = 0;
        while(y

6.AAR作成用にbuild.gradleを書きます。
  ここのbuild.gradleになります。
2

元のソース

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.1"

    defaultConfig {
        applicationId "com.lancard.baseline"
        minSdkVersion 18
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

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

次のように書き換えます。

apply plugin: 'android-library'
apply plugin: 'maven-publish'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.1"

    defaultConfig {
        applicationId "com.lancard.baseline"
        minSdkVersion 18
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

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

android.libraryVariants
publishing {
    publications {
        maven(MavenPublication) {
            groupId 'com.lancard.lib'
            artifactId 'baseline-aar'
            version '1.0'
            artifact source: file("${project.buildDir}/outputs/aar/${project.name}-release.aar")
        }
    }
    repositories {
        maven {
            url "file:${projectDir}/maven-repo"

        }
    }
}

  <やっていること>
  ①apply plugin: 'com.android.application'→apply plugin: 'android-library'で
   アプリケーションプロジェクトからライブラリプロジェクトに
  ②apply plugin: 'maven-publish'を追加しMaven Publishプラグインを使えるようにする。
  ③ publishingを追加し、公開するファイルの設定をします。

  (ちなみにURLはリポジトリ管理ツールで運用されていれば
    直接転送できgit pushする必要はありません。)

7.Gradleのタスクを実行します。
  Maven Publishプラグインを使用すると、「maven(MavenPublication) 」の名前から
  publishMavenPublicationToMavenRepositoryというタスクができるので実行します。
3

  以下のようにmaven-repoというディレクトリができますので全て
  3.で作成したgitリポジトリにpushします。
4

  このようになったでしょうか。
5

8.BaseLineViewを使うプロジェクトを作成し、build.gradleを以下のように追記し、buildタスクを実行します。

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.1"

    defaultConfig {
        applicationId "com.lancard.hoge"
        minSdkVersion 18
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    lintOptions {
        abortOnError false
    }
}

repositories {
    maven {
        url "https://{社内gitlab}/{username}/android-baseline/raw/master/maven-repo"
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.lancard.lib:baseline-aar:1.0'
}

lintはとりあえず、オフにしています。

9.以下のように「com.lancard.baseline.BaseLineView」を使用するxmlを書いて実行できれば成功です。



    


10.バージョンがあがっていくとリポジトリはこのようになります。

6

11.SSLクライアント認証している場合
  社内のリポジトリがSSLクライアント認証している場合が多いと思います。
  SSLクライアント認証している場合は、gradleラッパーのJVMオプションで
  証明書のパスを設定する必要があります。
  プロジェクト配下にあるgradlewのDEFAULT_JVM_OPTSを以下のように書き換えます。

7

DEFAULT_JVM_OPTS=" \
-Djavax.net.ssl.keyStore=証明書のパス \
-Djavax.net.ssl.keyStoreType=pkcs12 \
-Djavax.net.ssl.keyStorePassword=証明書のパスワード \
"

  あとはgradleコマンドではなくgradlewを実行するようにします。

./gradlew build
Facebooktwitterlinkedintumblrmail
名前
E-mail
URL
コメント

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