AndroidライブラリをjCenterに公開する



すべてのAndroid開発者の生活の中で、プロジェクトからプロジェクトにダウンロードする自己記述ユーティリティおよびヘルパーの数が10を超える瞬間が訪れます。 この場合、このようなヘルパーをAndroid Studioの観点から別個の「モジュール」として設計することをお勧めします。 ソースコードに適切なライセンスを提供して、ベストプラクティスをコミュニティと共有する場合はさらに良い方法です。 ただし、この場合、GitHubのソースコードを入力するだけでは十分ではありません。たとえば、次のように、1行のGradle依存関係を使用して、誰でもライブラリに接続できるようにします。

dependencies { compile 'com.github.romangromov:simpleprefs:0.0.8' } 

これを実現する方法については、この記事で説明します。

Android Studioが依存関係を読み込む方法


Android Studioのリリースに伴い、開発者はGradleプロジェクトの自動アセンブリ用の新しいシステムを提供されました。 ライブラリをプロジェクトに追加するには、 build.gradleファイルを修正し、依存関係ブロックで単一行の依存関係(この場合はリモートバイナリ依存関係)を指定するだけで十分です。

 dependencies { compile 'com.mcxiaoke.volley:library:1.0.16' } 

その後、Android Studioは目的のバージョンの指定されたライブラリをストレージサーバーからダウンロードし、プロジェクトに追加します。これは非常に便利です。 おそらく最も人気のあるJavaライブラリストレージサーバーはjCenterMaven Centralです。 アナログには、Node.jsのNPM、.NetのNuGet、Pythonのpipなどが含まれます。

プロジェクトのルートにあるbuild.gradleを見てください

 buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.2.3' } } allprojects { repositories { jcenter() } } 

ここで、 jcenter()は、Android StudioがjCenterリポジトリで指定された依存関係を検索することを示します。 同様のエントリにより、Android StudioはMaven Centralの依存関係を検索します。

 allprojects { repositories { mavenCentral() } } 

Android Studioの最新バージョンはデフォルトでjCenterを示しています-これは、Maven Centralでライブラリをロードするために開発者のより多くの努力が必要であるという事実に一部起因しています jCenterはJavaライブラリの最大のリポジトリと考えられていますが、同時に多くの開発者はMaven Centralを好みます。 jCenterとMaven Centralは物理的に異なるサーバーであることを忘れないでください。一方にライブラリが存在しても、他方のライブラリの可用性は保証されません。

私たちのタスクは、jCenterでのみライブラリをダウンロードすることです。 概略的には、プロセスは次のようになります。



ステップ0:将来のライブラリパッケージの名前を選択する


パッケージには、従わなければならない命名規則があります。 パッケージの名前は3つの部分で構成されています。

GROUP_ID:ARTIFACT_ID:VERSION

GROUP_ID :1つまたは複数のライブラリが配布されるアカウント、組織、またはパッケージ名の識別子として想像できます。 GROUP_IDは逆FQDN形式である必要があります。
ARTIFACT_ID :ライブラリの名前、またはMavenの用語では「アーティファクト」の名前。
VERSION :xyz形式のパターンを使用することをお勧めしますが、任意の文字列値を使用できます。

例:

 dependencies { compile 'com.squareup.okhttp:okhttp:2.1.0' compile 'com.squareup.okhttp:okhttp-urlconnection:2.1.0' } 

ここで、 com.squareup.okhttpはGROUP_IDであり、その下に多くのライブラリ、特にokhttpおよびokhttp-urlconnectionが配布されています。

注: GROUP_IDを選択する場合、選択したドメインを所有する必要があることに注意してください。 そうしないと、手順2で登録するときに問題が発生します。

デモとして、単純なクラスSimplePrefs.javaを使用します。これにより、 SharedPreferencesに簡単にアクセスできます。 Android Studioでライブラリモジュールを独自に作成し、ソースコードを公開リポジトリに配置できることが理解されています。

SimplePrefs.java
 package com.romangromov.simpleprefs; import android.content.Context; import android.content.SharedPreferences; public class SimplePrefs { private SharedPreferences prefs; public SimplePrefs(Context context, String prefsName, int mode) { this.prefs = context.getSharedPreferences(prefsName, mode); } public void putString(String key, String value) { prefs.edit().putString(key, value).apply(); } public String getString(String key) { return prefs.getString(key, null); } public void putInt(String key, int value) { prefs.edit().putInt(key, value).apply(); } public int getInt(String key, int defValue) { return prefs.getInt(key, defValue); } public void putLong(String key, long value) { prefs.edit().putLong(key, value).apply(); } public long getLong(String key, long defValue) { return prefs.getLong(key, defValue); } public void putBoolean(String key, boolean value) { prefs.edit().putBoolean(key, value).apply(); } public boolean getBoolean(String key) { return prefs.getBoolean(key, false); } public void clear() { prefs.edit().clear().apply(); } } 


AndroidManifest.xml
 <manifest package="com.romangromov.simpleprefs" /> 


ソースコードをGithubに投稿するので、次の形式でGROUP_IDを選択する必要があります。

com.github.<my-cool-username>

アーティファクトの識別子として、ライブラリの名前を使用し、任意のバージョンを選択します。 私の場合、将来のパッケージの名前は次のようになります。

com.github.romangromov:simpleprefs:0.0.8'

ステップ1:Bintrayでコンテナーを作成する


実際、Maven Centralでのライブラリのデプロイは非常に時間がかかるタスクであるため、このプロセスを簡素化するサービスがあります。 Bintrayは、jCenter、Mavel Central、およびその他のリポジトリを仲介するライブラリストレージシステムです。 それを使用します。

Bintrayにアカウントを作成し(無料のアカウントで十分です)、ライブラリをロードするコンテナーを準備します。OwnedRepositoriesセクションで、 Mavenを選択します



[ 新しいパッケージの追加]をクリックします。



すべてのフィールドに入力します。選択したライセンスを指定することを忘れないで、[ パッケージの作成 ]をクリックしてください



その後、Bintrayはコンテナを準備します。



ステップ2:GROUP_IDをSonatypeに登録します


Sonatype OSSリポジトリホスティングサービスは、Maven Centralの信頼できるアーティファクトリポジトリです。 Maven Centralサーバーは定期的にOSSRHと同期され、ユーザーがリリースの準備ができているとマークしたアーティファクトはMaven Central中央リポジトリにアップロードされます。 ライブラリを配布するGROUP_IDを登録するには、JIRAにissueを入力する必要があります。 アプリケーションを確認した後、Sonatypeで目的のリポジトリを開き、アーティファクトをダウンロードできます。

ここで登録し、新しい問題を開いて記入してください:




答えを待つのは残り、その後、選択したGROUP_IDを使用してSonatypeリポジトリによって作成されます。 彼らは1時間以内に私に答えた:



GROUP_IDを使用した問題
最初は、GROUP_IDに制限が課されていることを知りませんでしたが、これを選択しました: com.romangromov 、私は答えを受けました:


ここに手紙からのリンクがあります

その後、GROUP_IDをcom.github.romangromovによって提案されたものに変更し、落ち着きました。

SonatypeアカウントをBintrayに接続するだけです。そのためには、 [プロファイル設定] -> [ アカウント ]に移動し、Sonatypeディレクトリに登録されているユーザー名を指定します。



手順3:Bintrayでパッケージの自動署名を構成する


アーティファクトをMaven Centralにアップロードする前に、デジタル署名する必要があります。 Bintrayを使用すると、新しいパッケージの自動署名を構成したり、既存のパッケージの更新をダウンロードするときに構成できます。 まず、秘密鍵と公開鍵を生成する必要があります。 標準のLinux暗号化ユーティリティはPGP(Pretty Good Privacy)です。 個人は無料ですが、商用目的で使用するにはライセンスが必要です。 このプログラムの完全にオープンなアナログGnuPG(Gnu Privacy Guard) -同じことを行いますが、完全に無料です。

GPGのインストール方法は?
Linuxユーザーの場合: apt-get install gpgですが、Ubuntu 14.04ではLTSはそのままでした。
Windowsユーザーの場合: ダウンロード 、インストール、PATHへの追加。

公開鍵と秘密鍵のペアを生成します:

gpg --gen-key

ここでは、暗号化アルゴリズムの選択、氏名と住所の指定、およびパスワードの提示を求められます。 デフォルトですべてを残し、メールとパスワードを覚えて、次のようなものを取得します:



pub行の公開キー識別子2048R/<PUBLIC_KEY_ID> 。 このPUBLIC_KEY_IDを暗号化キーサーバーにアップロードする必要があります。これを行うには:

gpg --keyserver hkp://pool.sks-keyservers.net --send-keys PUBLIC_KEY_ID

ここで、作成されたキーペアをテキストファイルとしてエクスポートし、キー生成手順で指定したメールの値を置き換えることを忘れないでください。

gpg -a --export yourmail@email.com > public_key_sender.asc
gpg -a --export-secret-key yourmail@email.com > private_key_sender.asc


2つのテキストファイルが表示され、その内容をコピーし、Bintrayのプロファイル設定、 GPG署名セクションに移動します。



自動署名を許可するチェックマークを付けることは残っています。ここでもプロファイルの編集に進み、 GPG Sign Uploaded filesを自動的に探します



ダウンロード可能なアーティファクトは、Bintrayに自動的に署名されます。

詳細はこちらをご覧ください

ステップ4:Android Studioでプロジェクトをセットアップする


2つのモジュールを含む標準プロジェクトを作成します。

1) jCenterにロードするライブラリモジュールSimplePrefsLibrary。
2)ライブラリの機能を示すアプリケーションモジュール、 サンプル (ダウンロードできません)。

ライブラリをBintrayに読み込むには、Gradleのbintray-releaseプラグインを使用します。

実際には、ライブラリをBintrayにロードする前に、jCenterまたはMaven Centralの要件を満たす特定のメタデータを提供する必要があります。 これを手動で行わないために、必要なメタファイルの生成を処理するプラグインを使用します。

まず、Bintrayが親切に提供してくれるAPIキーを取得します。 プロファイル設定 -> APIキー



プロジェクトのルートにあるbuild.gradleに移動して、プラグインを追加します。

 buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.3.1' classpath 'com.novoda:bintray-release:0.3.4' } } allprojects { repositories { jcenter() } } 

ライブラリモジュールのbuild.gradle編集します。

 apply plugin: 'com.android.library' apply plugin: 'com.novoda.bintray-release' android { compileSdkVersion 21 buildToolsVersion "21.1.2" defaultConfig { minSdkVersion 14 targetSdkVersion 21 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { } //      bintray-release publish { groupId = 'com.github.romangromov' artifactId = 'simpleprefs' publishVersion = '0.0.8' desc = 'A small library containing a wrapper for the SharedPreferences of Android' licences = ['MIT'] website = 'https://github.com/romangromov/SimplePrefs' } 

ここでは、必要なMaven構成パラメーターをBintrayで指定しました。パラメーターの詳細な説明はwikiにあります

その後、Android Studioでターミナルを開き、次を実行します。

gradlew clean build bintrayUpload -PbintrayUser=< bintray> -PbintrayKey=<api bintray> -PdryRun=false


これにより、gradleプロジェクトのビルドスクリプトが実行され、Bintrayにデプロイされます。すべてが正常であれば、 BUILD SUCCESSFULが表示されます。それ以外の場合、ルールメッセージはclear / googledであるため、メッセージを読み取ってエラーを排除します。

Bintrayの[ ファイル ]タブに移動し、パッケージがダウンロードされたかどうかを確認します。



すべてが正常な場合、パッケージの内容が表示されます。 素晴らしい、今では誰でもダウンロードできます! ただし、現時点では、パッケージはMaven CentralまたはjCenterではなく、個人のMavenリポジトリでホストされています。 使用するには、作成者のMavenリポジトリを明示的に指定する必要があります。

 repositories { maven { url 'https://dl.bintray.com/romangromov/maven/' } } dependencies { compile 'com.github.romangromov:simpleprefs:0.0.8' } 

私自身はそのような依存関係が嫌いなので、jCenterと同期してすぐにそれを取り除きます(これはワンクリックで完了します!):Bintrayに移動してパッケージページに移動し、 Maven CentralタブとjCenterに追加ポップアップウィンドウからのリンクをクリックします。

それだけです。その後、ライブラリをjCenterに追加するリクエストが生成されます。



ライブラリがjCenterに追加されると、「 jCenterリンク」という碑文のアイコンが表示され、誰でもライブラリを1行の依存関係で使用できるようになります。
 dependencies { compile 'com.github.romangromov:simpleprefs:0.0.8' } 

それだけです、注意をありがとう!

Githubのプロジェクトのソース。

使用材料:
1. inthecheesefactory.com
2. blog.bintray.com
3. habrahabr.ru
4. opennet.ru

Source: https://habr.com/ru/post/J266801/


All Articles