Android StudioでライブラリをJarにエクスポートするにはどうすればよいですか?


84

いくつかのライブラリソースをダウンロードしましたが、AndroidStudioを使用してJarファイルとしてエクスポートしたいと思います。Android Studioを使用してjarファイルにエクスポートする方法はありますか?

編集:

jarとしてエクスポートしたいライブラリはAndroidライブラリです。これは「StandOut」と呼ばれ、GitHubからダウンロードできます。 https://github.com/pingpongboss/StandOut


エクスポートするライブラリの詳細を入力してください
gamag 2013年

Androidライブラリの詳細を使用して質問を編集しました。
Sage Pourpre 2013年

回答:


85

Androidライブラリをjarファイルとしてエクスポートすることはできません。ただし、aarファイルとしてエクスポートすることは可能です。AarファイルはAndroidライブラリの新しいバイナリ形式です。それらに関する情報は、Google I / O、新しいビルドシステムのビデオにあります。

まず、Android Studioで、またはgradle buildライブラリのルートディレクトリから発行するコマンドラインからライブラリをビルドします。

これにより、<yourlibroot>/libs/build/yourlib.aarファイルが作成されます。

このaarファイルはライブラリのバイナリ表現であり、依存関係プロジェクトとしてライブラリの代わりにプロジェクトに追加できます。

aarファイルを依存関係として追加するには、それをmaven中央またはローカルのmavenリポジトリに公開してから、プロジェクトのgradle.buildファイルでaarファイルを参照する必要があります。

ただし、この手順は少し複雑です。私はここでそうする方法の良い説明を見つけました:

http://www.flexlabs.org/2013/06/using-local-aar-android-library-packages-in-gradle-builds


2
また、他のandroid-libraryに依存するandroid-libraryがあると、問題が発生する可能性があります。
ロイックフォーレ-ラクロワ2013年

resフォルダーはaarファイルに含まれますか?
Bagusflyer 2014年

以下の@Wallmart_Hoboの回答を参照してください。可能であり、エクスポートされたjarがEclipseandroidアプリプロジェクトで正常に機能することを確認できます。
ペレット2014年

2
私のaarファイルがこのリンクに含まれているのを見つけました:lib \ build \ outputs \ aar
Simon


44

.jarこのソリューションのアプローチを使用して、コンパイルされたファイルにライブラリソースコードを構築することができました:https//stackoverflow.com/a/19037807/1002054

これが私がしたことの内訳です:

1.ライブラリリポジトリをチェックアウトします

場合によっては、それはボレーライブラリでした

2. AndroidStudioにライブラリをインポートします。

Android Studio0.3.7を使用しました。そのステップでいくつかの問題が発生しました。つまり、gradleVolleyライブラリのソースコードをインポートする前に、新しいAndroidプロジェクトからフォルダーをコピーする必要がありました。これは、使用するソースコードによって異なる場合があります。

3.build.gradleファイルを変更します

// If your module is a library project, this is needed
//to properly recognize 'android-library' plugin
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.6.3'
    }
}

apply plugin: 'android-library'

android {
    compileSdkVersion 17
    buildToolsVersion = 17

    sourceSets {
        main  {
            // Here is the path to your source code
            java {
                srcDir 'src'
            }
        }
    }
}

// This is the actual solution, as in https://stackoverflow.com/a/19037807/1002054
task clearJar(type: Delete) {
    delete 'build/libs/myCompiledLibrary.jar'
}

task makeJar(type: Copy) {
    from('build/bundles/release/')
    into('build/libs/')
    include('classes.jar')
    rename ('classes.jar', 'myCompiledLibrary.jar')
}

makeJar.dependsOn(clearJar, build)

4.gradlew makeJarプロジェクトルートからコマンドを実行します。

私の場合、新しいAndroidプロジェクトからライブラリプロジェクトルートにファイルをコピーする必要がgradlew.batありましたgradle。コンパイルしたライブラリファイルmyCompiledLibrary.jarbuild\libsディレクトリにあります。

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

編集:

警告

これは機能しますが、複数のモジュール(アプリケーションモジュールを含む)が同じものに依存している複数のモジュールでプロジェクトをコンパイルしているときに、ライブラリの重複例外が発生します jarファイルに(たとえば、モジュールにはbuild.gradle、特定のモジュールで参照されている独自のライブラリディレクトリがあります) 。

複数のモジュールで単一のライブラリを使用する必要がある場合は、次のアプローチを使用することをお勧めします: Androidgradleビルドとサポートライブラリ


瓶の中に解像度を含める方法がないことがわかりました。それは可能ですか?
Bagusflyer 2014年

7
Android Studioの最近のバージョンでは、1つの変更が必要です。行は `from( 'build / intermediates / bundles / release /')`となるはずです
Greg Ennis

@GregEnnis yaですが、私の場合は、mobule名でjarを作成しており、実際のjarはそのjar内にあります。module_name.jarのようなモジュール名で作成したjarを抽出しました。
pyus13 2014

6
@ bagusflyer、resフォルダが必要な場合、AARファイルはまさにそれです-resフォルダをサポートするJARファイル。
Martin Konecny 2014

このjarを生成するためにproguardを適用する方法は?
Amrut Bidri 2015

37

Android Studio V1.0以降、jarファイルは次のプロジェクトリンク内で利用できます。

デバッグバージョン: "your_app" \ build \ Intermediates \ bundles \ debug \ classes.jar

リリースバージョン: "your_app" \ build \ Intermediates \ bundles \ release \ classes.jar

JARファイルはビルド手順で作成されます。AndroidStudioGUIでは、[ビルド]-> [プロジェクトの作成]から作成され、CMD行からは「gradlewビルド」になります。


3
あなたはこの答えのために私のすべてのインターネットを受け取るでしょう
m02ph3u5 2015年

1
ビルドバリアントで、ビルドバリアントを「リリース」として選択する必要があります。しかし、classes.jarはリリースフォルダーに存在しません!
Aparajith Sairam 2015

1
@AparajithSairam JAR、コマンドライン、またはGUIをどのように構築しましたか?
Avi Levin

1
@ AparajithSairam、GUIで何かを見つけましたが、APKファイルのビルドにのみ関連しています。関連するビルドバリアントを選択した後、緑色の「再生」アイコンを押します。ファイルを作成するバックグラウンドアセンブリgradleコマンドを実行します。CMDのJARファイルの場合、gradlew assembleDebugまたはRelease、またはその他のフレーバーを実行する必要があります。その後、JARは次の場所で利用できるようになります:your_app "\ build \ Intermediates \ bundles \" falvor "\ classes.jar" gradlewタスク "を使用してすべてのアセンブリコマンドを表示できます
Avi Levin

1
私は1年以上前に別の答えに賛成しました。そのビジネスをねじ込みます。これはケーキです!ありがとう!
ケビン

31

以下をbuild.gradleに含めます。

android.libraryVariants.all { variant ->
    task("generate${variant.name}Javadoc", type: Javadoc) {
        description "Generates Javadoc for $variant.name."
        source = variant.javaCompile.source
        ext.androidJar = "${android.plugin.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
        classpath = files(variant.javaCompile.classpath.files) + files(ext.androidJar)
    }

    task("javadoc${variant.name}", type: Jar) {
        classifier = "javadoc"
        description "Bundles Javadoc into a JAR file for $variant.name."
        from tasks["generate${variant.name}Javadoc"]

    }

    task("jar${variant.name}", type: Jar) {
        description "Bundles compiled .class files into a JAR file for $variant.name."
        dependsOn variant.javaCompile
        from variant.javaCompile.destinationDir
        exclude '**/R.class', '**/R$*.class', '**/R.html', '**/R.*.html'
    }
}

次に、次のコマンドを使用してgradleを実行./gradlew clean javadocRelease jarReleaseできます。これにより、Jarとjavadocjarがビルドされます。build/libs/コマンドでます。これフォルダーにます。

編集: Android Gradleツール1.10。+では、AndroidSDKディレクトリの取得が以前とは異なります。以下を変更する必要があります(Vishalに感謝します!):

android.sdkDirectory 

の代わりに

android.plugin.sdkDirectory

素晴らしい答えです、これは私にとって完璧に機能しました。android studioにgradleターゲットを追加して、使用可能なjarを作成するjarDebugタスクを実行することもできます(これはeclipseプロジェクトでテストしましたが、正常に動作します)。
ペレット2014年

8
なぜ「新しい」のAndroidビルドシステムは、この醜い:(作るん
マーティンKonecny

これまでのところ、それがうまくいった唯一の答えです。どうもありがとうございました@ Walmart_Hobo– 2014
ドリュー

JARファイルを生成するための優れたソリューション!リソースも含めることは可能ですか?
ガエタン

12

このチュートリアルを使用して、Android Studioでjarファイルをエクスポートできました:https//www.youtube.com/watch?v = 1i4I-Nph-Cw 「AndroidStudioからjarをエクスポートする方法」

AndroidStudioでJARをエクスポートするためのすべての手順を含めるように回答を更新しました。

1)Androidアプリケーションプロジェクトを作成し、app-> build.gradleに移動します

2)このファイルの以下を変更します。

  • プラグインの適用を変更: 'com.android.application'プラグイン適用するには: 'com.android.library'

  • 以下を削除します:applicationId、versionCode、versionName

  • 次のコードを追加します。

// Task to delete old jar
task deleteOldJar(type: Delete){
   delete 'release/AndroidPlugin2.jar'
}
// task to export contents as jar
task exportJar(type: Copy) {
    from ('build/intermediates/bundles/release/')
    into ('release/')
    include ('classes.jar')
    rename('classes.jar', 'AndroidPlugin2.jar')
}
exportJar.dependsOn(deleteOldJar, build)

3)このファイルで今すぐ同期をクリックすることを忘れないでください(右上または同期ボタンを使用)。

4)Gradleタブ(通常は右中央)をクリックし、下にスクロールして exportjarます

5)実行ウィンドウにビルド成功メッセージが表示されたら、通常のファイルエクスプローラーを使用して、パスC:\ Users \ name \ AndroidStudioProjects \ ProjectName \ app \ release を使用してエクスポートされたjarに移動します。このディレクトリにjarファイルが表示されます。

幸運を :)


1
ステップ2は重要です。他の誰もこれについて言及していません。ありがとう、これは私のために働いた!
pookie

9

これは、いくつかの機能強化を加えた、さらに別のわずかに異なる答えです。

このコードは、.aarから.jarを取り出します。個人的には、.jar経由で出荷されるビットが.aar経由で出荷されるビットと同じであるという自信が少しあります。これは、ProGuardを使用している場合、出力jarが必要に応じて難読化されることも意味します。

また、すべてのビルドバリアントのjarを作成するスーパー「makeJar」タスクを追加しました。

task(makeJar) << {
    // Empty. We'll add dependencies for this task below
}

// Generate jar creation tasks for all build variants
android.libraryVariants.all { variant ->
    String taskName = "makeJar${variant.name.capitalize()}"

    // Create a jar by extracting it from the assembled .aar
    // This ensures that products distributed via .aar and .jar exactly the same bits
    task (taskName, type: Copy) {
        String archiveName = "${project.name}-${variant.name}"
        String outputDir = "${buildDir.getPath()}/outputs"

        dependsOn "assemble${variant.name.capitalize()}"
        from(zipTree("${outputDir}/aar/${archiveName}.aar"))
        into("${outputDir}/jar/")
        include('classes.jar')
        rename ('classes.jar', "${archiveName}-${variant.mergedFlavor.versionName}.jar")
    }

    makeJar.dependsOn tasks[taskName]
}

好奇心旺盛な読者のために、com.android.libraryプラグインが.aarファイルに名前を付けるために使用する正しい変数とパラメーターを決定するのに苦労しました。私はついにAndroidオープンソースプロジェクトそれらを見つけました。


4

Android Studioにより、リソースファイルなしでAndroidライブラリプロジェクトのjarファイルをエクスポートできます。私が最近会ったことも要件です。

1.build.gradleファイルを構成します

    // Task to delete old jar

    task clearJar(type: Delete){
       delete 'release/lunademo.jar'
    }

    // task to export contents as jar
    task makeJar(type: Copy) {
       from ('build/intermediates/bundles/release/')
       into ('build/libs/')
       include ('classes.jar')
       rename('classes.jar', 'lunademo.jar')
    }
    makeJar.dependsOn(clearJar, build)

2.プロジェクトルートでgradlewmakeJarを実行します

運が良ければ、ディレクトリの下にビルド/ libs /としてライブラリが表示されます。

================================================== ==========

以下のようにコマンドラインで「ソケットタイムアウト例外」として問題が発生した場合は、

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

この手順に従って、右側のGradleウィンドウを開き、AndroidStudioで[makeJar]をクリックします。

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

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

次に、build / libs dirに移動すると、jarファイルが表示されます。

それがあなたに役立つことを願っています。

幸運を @。@

ルナ

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