Android Studioでライブラリプロジェクトを作成する方法と、ライブラリプロジェクトを使用するアプリケーションプロジェクト


164

GradleビルドシステムとIntelliJは初めてです。

では、Androidライブラリプロジェクト(com.myapp.lib1など)とアプリケーションプロジェクト(com.myapp.appなど)を作成し、ビルドシステムにcom.myapp.lib1をアプリケーションプロジェクトに含めるにはどうすればよいですか?

プロジェクト構造->モジュール-> My Appプロジェクトに行き、依存関係をlibプロジェクトに追加しました。IntelliJがアプリプロジェクトで使用されると、libプロジェクトのクラスを認識できるようになりましたが、アプリプロジェクトを実行すると、次のようなエラーが発生します。

Gradle: error: package com.myapp.lib1 does not exist

1
Androidライブラリを使用して、無料/有料バージョンのアプリを作成していました。新しいGradleビルドシステムにより、このアプローチはビルドバリアントの概念で廃止されました。同じコードから異なる署名付きAPKを自動的にビルドできるようになりました。もっと早く知っていたらよかったのに。
theczechsensation 2013

1
@ theczechsensation--詳しく説明できますか?完全版のAPKをアップロードした後、無料版のAPKをアップロードしようとしましたが、同じパッケージ名を使用しています。Google Playストア(GPS)から、そのパッケージ名は既に使用しているというメッセージが表示されました。あなたがgradleについて言っていることは、2つの別々のパッケージに2つの別々のアプリが必要ないことを意味しますか?
DSlomer64

これが完全な答えであるstackoverflow.com/a/31366602/1118772です。Aqib Mumtazが回答で言及しましたが、ついに終了しました。他の方法で時間を浪費する代わりに、これで行くことができます。 philosophicalhacker.com/2014/10/02/...
Noundlaサンディープ

ライブラリを追加する興味深いスレッド。画像の説明付き。
2015年

回答:


111

ライブラリを作成するには:

ファイル>新しいモジュール

Androidライブラリを選択

Lib

ライブラリを使用するには、依存関係として追加します。

ファイル>プロジェクト構造>モジュール>依存関係

dep

次に、モジュール依存関係としてモジュール(Androidライブラリ)を追加します。

モジュールを追加

プロジェクトを実行します。それはなります動作します。


194
これにより、プロジェクト内にモジュールのファイルが作成されます。モジュールをプロジェクトの外部にして、別のアプリケーションで使用できるようにするにはどうすればよいですか?
2013

2
@rrbrambley:複数のプロジェクトでモジュールを再利用する方法を見つけました。Windows用のwinbolic linkというアプリケーションを使用して(NTFS Junction)フォルダーリンクを作成しました。複数のプロジェクトで再利用したいモジュールがある場合、それを使用する各プロジェクトのディレクトリ内に、再利用するプロジェクトへのフォルダーリンクを作成します。この後、モジュールの依存関係を追加します(Andr。Studio内)。これで、同期を維持しながら、各プロジェクトでモジュールを使用/編集できます。それが正しい方法であるかどうかはわかりませんが、今のところはかなりうまくいくようです!これは、ローカルのMavenリポジトリよりもうまく機能します。
ピーター14

1
残念ながら、2014年7月の時点で、スクリーンに表示されるようなプロジェクト設定はありません。以下のGrkEngineerの回答のように、.gradeファイルを編集する必要がありました。
Tim Bray

24
これは既存のプロジェクト内からモジュールを作成するため、反対票を投じる必要があります
ジョナサン

2
他のプロジェクトで同じlibを使用する場合は、ライブラリモジュールをそのプロジェクトにコピーし、settings.gradleおよびメインモジュールのbuild.gradleを手動で構成する必要があります。
hanoo 2015年

114

スタンドアロンjarプロジェクトの例がないのはなぜですか。

Eclipseでは、プロジェクト設定ダイアログの[Is Library]ボックスをチェックするだけです。
Androidスタジオでは、この手順に従って、jarファイルを取得しました。

  1. プロジェクトを作成します。

  2. 左側のプロジェクトメニューでファイルを開きます。(app / build.gradle):Gradle Scripts> build.gradle(Module:XXX)

  3. 1行を変更します:apply plugin: 'com.android.application'->'apply plugin: com.android.library'

  4. ファイル内のapplicationIdを削除します。 applicationId "com.mycompany.testproject"

  5. プロジェクトのビルドビルド>プロジェクトの再構築

  6. 次に、aarファイルを取得できます:アプリ>ビルド>出力> aarフォルダー

  7. 変更のaarファイル拡張子名にzip

  8. 解凍するとclasses.jar、フォルダ内に表示されます。名前を変更して使用してください!

とにかく、なぜgoogleがjarの作成をAndroidスタジオで厄介なものにするのかはわかりません。


1
Android Studio 2.2.2で動作します。2016年
ハーマン、

95

Gradleファイルを構成して複数のプロジェクトを構築するためのGoogleのGradleプラグイン推奨方法にはいくつかの欠点があります1つのライブラリプロジェクトに依存する複数のプロジェクトがある場合、この投稿ではGoogleの推奨される構成とその欠点について簡単に説明し、gradleファイルを構成する別の方法を推奨していますAndroid Studioでマルチプロジェクトセットアップをサポート:

Android Studioの代替マルチプロジェクトセットアップ

別の方法:

Android Studioで複数のプロジェクトを管理するより良い方法があることがわかりました。秘訣は、ライブラリ用に個別のAndroid Studioプロジェクトを作成し、アプリが依存するライブラリのモジュールがライブラリのプロジェクトディレクトリにあることをgradleに伝えることです。上記のプロジェクト構造でこのメソッドを使用したい場合は、次のようにします。

  1. StickyListHeadersライブラリ用のAndroid Studioプロジェクトを作成する
  2. App2のAndroid Studioプロジェクトを作成する
  3. App1のAndroid Studioプロジェクトを作成する
  4. StickyListHeadersプロジェクトでモジュールをビルドするようにApp1とApp2を構成します。

4番目のステップは難しい部分なので、ここで詳しく説明します。settings.gradleファイルにプロジェクトステートメントを追加し、そのプロジェクトステートメントによって返されるProjectDescriptorオブジェクトのprojectDirプロパティを設定することにより、プロジェクトのディレクトリの外部にあるモジュールを参照できます。

ここに画像の説明を入力してください

入れなければならないコードsettings.gradle

include ':library1'
project(':library1').projectDir = new File('../StickyListHeader/library1')

これを正しく行った場合、プロジェクトによって参照されているモジュールが、プロジェクトディレクトリの外部にある場合でも、プロジェクトナビゲーターに表示されます。

ここに画像の説明を入力してください

これにより、ライブラリコードとアプリコードを同時に操作できます。このように外部からモジュールを参照すると、バージョン管理の統合も問題なく機能します。変更をコミットしてアプリコードにプッシュできるのと同じように、変更をコミットしてライブラリコードにプッシュできます。

このように複数のプロジェクトを設定することで、Googleの推奨構成を悩ませる問題を回避できます。プロジェクトディレクトリの外部にあるモジュールを参照しているので、それに依存するすべてのアプリに対してライブラリモジュールの追加のコピーを作成する必要はありません。また、なんらかのgitサブモジュールを使用せずにライブラリをバージョン管理できます。

残念ながら、複数のプロジェクトを設定するこの別の方法を見つけるのは非常に困難です。明らかに、これはGoogleのガイドを見て理解できるものではありません。現時点では、Android StudioのUIを使用してこのようにプロジェクトを構成する方法はありません。


4
これは完璧な答えです。ありがとう。
Noundla Sandeep、2015

1
良い回答ですが、リンクが切れた場合に備えて、関連するビットを投稿から回答にコピーする必要があります。
Greyson Parrelli、2015年

2
注: Gradleでの文字列評価の場合は、二重引用符( ")を使用する必要があります。これは私にとって「1日を節約する」です。これに
Solata

1
アプリのコードからライブラリコードを参照するにはどうすればよいですか?セットアップ手順を実行した後も、アプリコードはライブラリコード内のパッケージを参照できません。実行する必要がある追加の手順はありますか?
CEGRD 2016年

2
@CEGRD [ファイル]> [プロジェクト構造]に移動し、作業中のモジュールの名前をクリックする必要があります。次に、[依存関係]タブに移動し、ドロップダウンメニューで[+]、[モジュールの依存関係]の順にクリックします。これで、library1モジュールを現在のプロジェクトに追加できるようになります。
OliasailO 2016年

45

マルチプロジェクトのセットアップについては、こちらのリンクをご覧ください

注意すべき点がいくつかあります。設定モジュールとライブラリモジュールの両方を参照するようにsettings.gradleを更新してください。

settings.gradle: include ':app', ':libraries:lib1', ':libraries:lib2'

また、アプリのbuild.gradleに以下が含まれていることを確認してください。

dependencies {
     compile project(':libraries:lib1')
}

次の構造が必要です。

 MyProject/
  | settings.gradle
  + app/
    | build.gradle
  + libraries/
    + lib1/
       | build.gradle
    + lib2/
       | build.gradle

アプリのbuild.gradleはcom.android.applicationプラグインを使用し、ライブラリのbuild.gradleはcom.android.libraryプラグインを使用する必要があります。

この設定でコマンドラインからビルドできる場合は、Android Studio IDEが更新されるはずです。


build.gradleで定義されたプラグインが唯一の違いですか?つまり、1行を変更することで、既存のモジュールをAndroidライブラリに変更できますか?
Enrico 2013年

22
ある日、インポートボタンをクリックするとライブラリが機能するようになり、エディタでコードの入力を開始します。
スティーブM

6
このアプローチには、実際のプロジェクトにライブラリが含まれているようです。OPが求めていたのは、独自のプロジェクト/スペースにあり、メインアプリプロジェクトにlibとしてのみ含まれる別のAndroidライブラリプロジェクトを作成する方法を知ることでした
Jonathan

@SteveMそれは私のキャリアを通して私の問題でした。デザインなしでコーディングを始めます。そして、デバッグとリファクタリングに何時間も費やします。
Rajkiran

13

Intellij IDEA(およびAndroid Studio)の場合、各ライブラリはモジュールです。Android Studioのモジュールは、Eclipseのプロジェクトに相当すると考えてください。Android Studioのプロジェクトは、モジュールのコレクションです。モジュールは、実行可能なアプリケーションまたはライブラリモジュールです。

したがって、新しいAndroidライブラリプロジェクトを追加するには、「Androidライブラリ」タイプのモジュールを作成する必要があります。次に、このライブラリモジュールをメインモジュール(アプリケーションモジュール)の依存関係リストに追加します。


12

ライブラリプロジェクトを作成して再利用する最も簡単な方法:

  1. 開いているプロジェクトfile > new > new module(およびUIの質問に答える)

ここに画像の説明を入力してください

  1. ファイルsettings.gradleにあるかどうかを確認/追加してください:include ':myLibrary'
  2. ファイルbuild.gradleにあるかどうかを確認または追加します。

    dependencies { ... compile project(':myLibrary') }

  3. このライブラリモジュールを別のプロジェクトで再利用するには、手順1ではなくプロジェクトのフォルダーをコピーし、手順2と3を実行します。

新しいスタジオアプリケーションプロジェクトを作成することもでき ます。build.gradleファイルのプラグイン割り当てをcom.android.libraryに変更することで、既存のアプリケーションモジュールをライブラリモジュールに簡単に変更できます。

apply plugin: 'com.android.application'

android {...}

apply plugin: 'com.android.library'

android {...}

もっとここに


プラグインの割り当てを変更して既存のアプリケーションモジュールをライブラリモジュールに変更する場合は、gradleファイルから「applicationId "com ...."」という行も削除する必要があります。
TDG

「警告:構成 'compile'は廃止され、 'implementation'および 'api'に置き換えられました。」
slhck

9

あなたはできる新しいモジュールを追加すると、任意のアプリケーションにブランデルが彼の答えに言って、その後、他のアプリケーションからそれを参照します。

モジュールをコンピューター上の任意の場所に移動する場合は、モジュールフォルダーを移動するだけです(モジュールは完全に独立しています)。その場合、モジュールを参照する必要があります。

このモジュールを参照するには:

  • アプリのbuild.gradleファイルに以下を追加します。

    dependencies {
    ...
    compile project(':myandroidlib')
    }
    
  • settings.gradleファイルに以下を追加します。

     include ':app', ':myandroidlib'
     project(':myandroidlib').projectDir = new File(PATH_TO_YOUR_MODULE)
    

たとえばproject(':library').projectDir = new File('../library')libraryはAndroidプロジェクトのフォルダーと並行するフォルダー名です。
誰かどこか

5

適用プラグインの代わりにで使用することを忘れないapply plugin: 'com.android.library'でくださいbuild.gradle'com.android.application'


4

ドキュメントの方法

これは、Android Studioのドキュメントに記載されているアドバイスに従って推奨される方法です。

ライブラリモジュールを作成する

ライブラリを作成する新しいプロジェクトを作成します。[ ファイル]> [新規]> [新しいモジュール]> [Androidライブラリ]> [次へ]>(名前を選択)> [完了]をクリックします。次に、必要なクラスとリソースをライブラリに追加します。

モジュールをビルドすると、AARファイルが作成されます。で見つけることができますproject-name/module-name/build/outputs/aar/

ライブラリを依存関係として追加する

次のように、ライブラリを依存関係として別のプロジェクトに追加できます。

  1. ファイル>新規モジュール> .JAR / .AARパッケージのインポート>次へ>(ファイルの場所を選択)>完了でライブラリAARファイルをインポートします。(コードをインポートしないでください。インポートすると、編集可能な場所が多すぎます。)
  2. settings.gradleファイルで、ライブラリ名がそこにあることを確認します。

    include ':app', ':my-library-module'
    
  3. アプリのbuild.gradleファイルで、依存関係セクションにコンパイル行を追加します。

    dependencies {
        compile project(":my-library-module")
    }
    
  4. プロジェクトをGradleと同期するように求められます。やれ。

それでおしまい。これでライブラリを使用できるようになります。

ノート

ライブラリをより多くのユーザーが簡単に利用できるようにする場合は、JitPacまたはJCenterの使用を検討してください


3

同じ質問を持っていて、それを次の方法で解決しました:

開始状況

FrigoShare (root)
|-Modules:    frigoshare,   frigoShare-backend

ターゲット:という名前のモジュールを追加するdataformats

  1. (例:新しいモジュールを追加しますJava Library
  2. settings.gradleこのように見えることを確認してください(通常は自動的に):

    include ':frigoshare', ':frigoShare-backend', ':dataformats'

  3. ライブラリを使用する必要があるモジュールのファイルに次の依存関係があることを(手動で)確認しbuild.gradleます。

    dependencies { ... compile project(':dataformats') }



2

上記のチェコセンセーションのコメントとして、Gradle Build Variansについて検索しようとしたところ、次のリンクが見つかりました。http://code.tutsplus.com/tutorials/using-gradle-build-variants--cms-25005 これは非常に簡単な解決策です。これは私がやったことです:-build.gradle:

flavorDimensions "version"

productFlavors {
    trial{
        applicationId "org.de_studio.recentappswitcher.trial"
        flavorDimension "version"
    }
    pro{
        applicationId "org.de_studio.recentappswitcher.pro"
        flavorDimension "version"
    }

}

次に、アプリのバージョンがさらに2つあります。上記のコードの2つのapplicationIdである2つの異なるpackageNameを使用したプロ版と試用版の両方なので、Google Playに両方をアップロードできます。私はまだ「メイン」セクションでコーディングし、getpackageNameを使用してバージョンを切り替えます。詳細については、指定したリンクにアクセスしてください。


1

どちらかが機能しない場合、最も簡単な方法が2つあります。もう1つを試してください。

  1. ライブラリur usingのbuild.gradleファイル内の依存関係内のライブラリの依存関係を追加し、urライブラリを外部ライブラリに貼り付けます。

または

  1. appフォルダー内のlibsフォルダーに移動し、すべての.jarを貼り付けます。たとえば、ライブラリファイルをそこに貼り付けますここでの秘訣は、settings.gradleファイル内に移動し、「include ':app:libs'」を「include」の後に追加することです。 app '"間違いなく動作します........... :)

1

私の場合、MAC OS X 10.11とAndroid 2.0を使用し、Aqib Mumtazが説明したとおりに実行します。

しかし、毎回次のメッセージが表示されました:「プロジェクト ':app'の構成中に問題が発生しました。>モジュールxxxを評価できません: 'default'という名前の構成が見つかりません。」

このメッセージの理由は、Android 2.0ではライブラリを直接作成できないためです。そこで、私は最初にアプリプロジェクトを作成し、次にそれをライブラリとして変換するためにbuild.gradleを変更することにしました。

ライブラリプロジェクトはアプリプロジェクトとは大きく異なるため、このソリューションは機能しません。

だから、私はこのように私の問題を解決しました:

  • 最初に標準アプリを作成します(必要な場合)。
  • 次に、「ファイル/モジュールの作成」を選択します
  • ファインダーに移動し、フレームワークディレクトリに新しく作成したモジュールのフォルダーを移動します。

次に、Aqib Mumtazによって提案されたソリューションを続行します。

その結果、ライブラリソースは、ソースファイルを毎回複製する必要なく共有されます(私にとって異端でした!)

これがお役に立てば幸いです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.