Android Studioプロジェクトから.jarを作成する方法


96

私はAndroidStudioを使用しており、次のようなプロジェクトがあります。

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

青い円の中にあるのはmyLibです。myLibは、赤い円の内側にある外部libと、apacheパッケージ(緑の円)も使用する必要があります。

したがって、この全体を単一の.jarにして、別のプロジェクトで使用できるようにしたいと考えています。

ステップバイステップのガイドは本当にありがたいです、私は開発者の世界の初心者です。

ありがとう!


1
あなたが望むのは、依存関係として静かにリンクできるaarファイル(Androidアーカイブ)だと思います。基本的に、Androidライブラリプロジェクトを作成する必要があります。しかし、心からの正確なステップを書くことはできません。
2014

2
どのJavaプロジェクトでも使用できるように、.jarファイルが必要です。Androidだけではありません。
dum4ll3 2014

1
ほぼ同じでなければなりません-ライブラリプロジェクトを作成してエクスポートします。
Thrash Bean

このバグは、gradleビルドファイルを簡単にハッキングしてjarターゲットを追加することを妨げるAndroid gradleプラグインの欠陥を説明しています...
mmigdol

回答:


135
  • ライブラリプロジェクトのbuild.gradleを開く ここに画像の説明を入力してください

  • build.gradleに2つのタスクを記述します-deleteJarとcreateJarとルールを追加しますcreateJar.dependsOn(deleteJar、build) ここに画像の説明を入力してください

上記のコード:

task deleteJar(type: Delete) {
    delete 'libs/jars/logmanagementlib.jar'
}           

task createJar(type: Copy) {
    from('build/intermediates/bundles/release/')
    into('libs/jars/')
    include('classes.jar')
    rename('classes.jar', 'logmanagementlib.jar')
}

createJar.dependsOn(deleteJar, build)
  • 右からGradleパネルを展開し、yourlibrary-> othersの下のすべてのタスクを開きます。そこで2つの新しいタスクが表示されます-createJarとdeleteJar ここに画像の説明を入力してください

  • createJarをダブルクリックします ここに画像の説明を入力してください

  • タスクが正常に実行されたら、createJarタスクで言及されているパス、つまりlibs / xxxx.jarから生成されたjarを取得します ここに画像の説明を入力してください

  • 新しく生成されたjarを必要なプロジェクトのlibフォルダーにコピーします->右クリック-> [ライブラリとして追加]を選択します


4
時々、人は読むのではなく見ることで理解します。それはあなたが☺ご覧良いUXだ
Abhinavティアギ(Tyagi)

5
さて、私はあなたに私がよく分からないと言っておくべきですrelease。とは持っていますが、フォルダはdebugありdefaultませんrelease。使用しているプラ​​グインのバージョンは何ですか?これがどこかで文書化されているかどうか知っていますか?
Cameron Lowell Palmer

3
releaseフォルダーがありません。
Kamran Bigdely 2017

4
何をコピーしようとしていますか?APKファイルを含むフォルダをターゲットにすることになっていますか?from( 'build / intermediates / bundles / default')という行で、このディレクトリが何を保持しているかを意味します。私のAndroid Studioにはbundlesという名前のフォルダーがありません。createJarタスクでソースが表示されません
Bawender Yandra

12
Android Studio 3.1.3およびGradleバージョン4.4のfrom( 'build / intermediates / bundles / release /')をfrom( 'build / intermediates / packaged-classes / release /')に変更
Vaishakh

59

GradleでプレーンJavaモジュールとしてコードを設定した場合、Gradleにコンテンツを含むjarファイルを提供させるのは非常に簡単です。そのjarファイルにはコードのみが含まれ、依存する他のApacheライブラリは含まれません。この方法で配布することをお勧めします。ライブラリ内に依存関係をバンドルするのは少し奇妙であり、それらのライブラリのユーザーが独自にそれらの依存関係を含める必要があるのはより一般的です(そうでない場合、これらのプロジェクトの衝突が、おそらく異なるバージョンのライブラリのコピーをすでにリンクしているためです)。さらに、ライブラリを公開する場合は、他の人のコードの再配布に関する潜在的なライセンスの問題を回避できます。

jarにコンパイルする必要があるコードを取り、それをAndroid Studioの別のプレーンJavaモジュールに移動します。

  1. ファイルメニュー> 新規モジュール... > Javaライブラリ
  2. ウィザードでライブラリ、Javaパッケージ名、クラス名を設定します。(クラスを作成したくない場合は、モジュールが作成されたら削除できます)
  3. Androidコードで、新しいモジュールの依存関係を設定して、新しいライブラリのコードを使用できるようにします。
  4. ファイル > プロジェクト構造 > モジュール > (Androidモジュール) > 依存関係 > + > モジュール依存関係。以下のスクリーンショットをご覧ください。 ここに画像の説明を入力してください
  5. 表示されるダイアログのリストからモジュールを選択します。 ここに画像の説明を入力してください

うまくいけば、プロジェクトは現在正常にビルドされているはずです。ビルドを実行すると、Javaライブラリのjarファイルがモジュールのディレクトリのbuild / libsディレクトリに配置されます。jarファイルを手動でビルドする場合は、Gradleウィンドウからjarビルドファイルタスクを実行できます。 ここに画像の説明を入力してください


どうもありがとうございました!あなたの答えは本当に役に立ちました。ほとんどが、Gradleタスクを示す最後のスクリーンショットです。知らなかった。私はあなたの手順に従うことができましたが、それでもorg.apache.http.Headerがありません。どうすればライブラリにインポートできますか?
dum4ll3 2014

あなたがそれを逃していると言うとき、あなたはどういう意味ですか?
スコットバルタ

1
同じプロジェクト構造>依存関係フローを通過しますが、プロジェクトの代わりにライブラリモジュールを選択し、同じ方法で依存関係を追加します。私の答えでは、モジュールファイルのbuild / libsディレクトリにjarファイルを置くと言います。
スコットバルタ2014

1
私は得ました:java.lang.NoClassDefFoundError:com.loopj.android.http.RequestParams。それは私が自分でコンパイルしている私の外部ライブラリです。
dum4ll3 2014

2
Javaライブラリでのみ動作し、Androidライブラリ内のjarタスクは存在しません
cuasodayleo 2015

26

Android Studio IDEで、次の方法で「Run Anything bar」にアクセスします

CTRL+ CTRL+ gradle CreateFullJarRelease+ENTER

その後、プロジェクトのこのフォルダにアーティファクトが見つかります
Build > Intermediates > Full_jar > Release > CreateFullJarRelease > full.jar


または


GradleにはTask、gradleサイドメニューのotherフォルダーの下にすでにそのためのがあります。

Gradleツールバー

次に、下にスクロールしてcreateFullJarReleaseクリックします。

Gradleタスク

その後、プロジェクトのこのフォルダにアーティファクトが見つかります

Build > Intermediates > Full_jar > Release > CreateFullJarRelease > full.jar


2
このオプションは表示されません。これは最近のStudioバージョンに追加されましたか?
Dibzmania

1
私はビルドし、*。jarを見つけると、その名前は:full.jarです。30分で見つかりましたlol
nobjta_9x_tq

1
私の場合、私はそれを見つけましたbuild\intermediates\intermediate-jars\release
ユスリルモーリダンラージ

質問があります。私の場合、3つのjarファイルが生成されます。classes.jar、、full.jarおよびres.jar。使用したいときはいつでもすべてのjarファイルをインポートする必要がありますか?
Yusril Maulidan Raji

full.jarを使用してください
Haroun Hajem '10 / 10/19

11

これをJavaモジュールのbuild.gradleに追加するだけです。依存ライブラリがアーカイブに含まれます。

mainClassName = "com.company.application.Main"

jar {
  manifest { 
    attributes "Main-Class": "$mainClassName"
  }  

  from {
    configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
  }
}

これにより、[module_name] / build / libs / [module_name] .jarファイルが生成されます。


しかし、.jarライブラリにはMainクラスがありますか?OPは、「別のプロジェクトで使用できるように」(原文のまま).jarファイルを作成していると述べています。それは図書館のように聞こえます。
スティーブホワイト

この男だけが実際にそれを理解しました、jarの作成だけでは問題を解決しません それを実行する必要がある場合はどうでしょうか。上記のコードは、「jarファイルを実行できません:「メインマニフェスト属性がありません」」エラーを回避します。
MobileEvangelist

1

.jarファイルは、アプリケーションをコンパイル/実行すると自動的に生成されます。

class.jarファイルは、root_folder / app / build / intermediates / bundles / debugから見つけることができます

jarファイルの場所


1
  1. Android Studioの[Gradle]タブに移動し、ライブラリプロジェクトを選択します。

  2. 次に、タスクに移動します

  3. 次に、その他に移動します

  4. bundleReleaseaarをダブルクリックします

次の場所に.aarファイルを見つけることができますyour_module/build/outputs/aar/your-release.aar

こちらの画像


「Gradle Tab」がどこにも表示されません。最後に、ヘルプ検索で「Gradle」と入力し、Gradleビューのようなものを取得しました。しかし、内部のリストは非常に異なり、あなたのリストよりもはるかに短いです。Tasks-> Otherの下にbundleReleaseaarはありません。「createJar」がありますが、それをクリックすると、「タスク「createJar」がルートプロジェクトに見つかりません...」というメッセージが表示されます。そして...なぜ.aarファイルが必要なのですか?OPは.jarファイルを要求しました。同じことですか?
スティーブホワイト

しかし、問題はどうやって作ら.jarないのかです.aar
アレクセイ・ティモシェチェンコ

0

私が見つけた方法は、プロジェクトコンパイラの出力(プロジェクト構造>プロジェクト)を見つけることでした。次に、jarにするモジュールのコンパイル済みフォルダーを見つけ、zipで圧縮し、出力の拡張子をzipからjarに変更します。


0
task deleteJar(type: Delete) {
    delete 'libs/mylibrary.jar'
}           

task exportjar(type: Copy) {
    from('build/intermediates/compile_library_classes/release/')
    into('libs/')
    include('classes.jar')
    rename('classes.jar', 'mylibrary.jar')
}

exportjar.dependsOn(deleteJar, build)

0

AndroidStudioからgradleタスクを実行する場合[詳細]

assembleRelease 
//or
bundleReleaseAar

またはターミナル経由

./gradlew <moduleName>:assembleRelease
//or
./gradlew <moduleName>:bundleReleaseAar

あなたは見つけることができます.aar

<project_path>/build/outputs/aar/<module_name>.aar
//if you do not see it try to remove this folder and repeat the command

.aar(Androidライブラリ)ファイルは、.jar(Javaライブラリ)ファイルと追加のAndroidリソースで構成されます。.aarfileはaar拡張子の付いたzipファイルです。そのため.aar、置換.zipまたは実行できます。

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