Cara membuat .jar dari proyek Android Studio


96

Saya menggunakan AndroidStudio dan saya memiliki proyek ini seperti yang ditunjukkan:

masukkan deskripsi gambar di sini

Apa yang ada di dalam lingkaran biru adalah myLib. myLib juga perlu menggunakan lib eksternal yang ada di dalam lingkaran merah, dan paket apache (lingkaran hijau).

Jadi saya ingin membuat semua ini menjadi satu .jar, jadi saya bisa menggunakannya di proyek lain.

Panduan langkah demi langkah akan sangat dihargai, saya seorang pemula di dunia pengembang.

Terima kasih!


1
Saya pikir yang Anda inginkan adalah file aar (arsip Android) yang dapat ditautkan sesederhana ketergantungan. Pada dasarnya Anda perlu membuat proyek perpustakaan Android. Tetapi saya tidak dapat menulis langkah-langkah yang tepat dari pikiran.
rekire

2
Saya membutuhkan file .jar agar dapat digunakan dalam proyek java apa pun. Tidak hanya android.
dum4ll3

1
Harus hampir sama - buat proyek perpustakaan dan ekspor.
Thrash Bean

Bug ini menjelaskan kekurangan dalam plugin gradle Android yang mencegah dengan mudah meretas file build gradle untuk menambahkan target jar ...
mmigdol

Jawaban:


135
  • Buka build.gradle untuk proyek perpustakaan masukkan deskripsi gambar di sini

  • Tulis dua tugas di build.gradle - deleteJar dan createJar dan tambahkan aturan createJar.dependsOn (deleteJar, build) masukkan deskripsi gambar di sini

Kode dari atas:

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)
  • Perluas panel gradle dari kanan dan buka semua tugas di bawah perpustakaan Anda-> lainnya. Anda akan melihat dua tugas baru di sana - createJar dan deleteJar masukkan deskripsi gambar di sini

  • Klik dua kali pada createJar masukkan deskripsi gambar di sini

  • Setelah tugas berhasil dijalankan, dapatkan jar yang Anda buat dari jalur yang disebutkan dalam tugas createJar yaitu libs / xxxx.jar masukkan deskripsi gambar di sini

  • salin jar yang baru dibuat ke dalam folder lib proyek yang Anda butuhkan -> klik kanan -> pilih "tambahkan sebagai perpustakaan"


4
Terkadang orang memahami dengan melihat daripada membaca. Ini UX yang bagus, Anda lihat ☺
Abhinav Tyagi

5
Kalau begitu, saya harus memberi tahu Anda bahwa saya tidak yakin release. Saya punya debugdan default, tapi tidak ada releasefolder. Versi plugin apa yang Anda gunakan? Tahukah Anda jika ini didokumentasikan di mana saja?
Cameron Lowell Palmer

3
Saya tidak punya releasefolder.
Kamran Bigdely

4
Apa yang Anda coba salin ?? Apakah kita harus menargetkan folder yang berisi file APK ?? Maksud saya di baris dari ('build / intermediates / bundles / default') apa direktori ini untuk Anda. Tidak ada folder di studio android saya dengan bundel nama, dan saya tetap tidak mendapatkan SUMBER di tugas
createJar

12
ubah dari ('build / intermediates / bundles / release /') ke dari ('build / intermediates / packaged-class / release /') untuk Android Studio 3.1.3 dan Gradle versi 4.4
Vaishakh

59

Jika Anda menyiapkan kode sebagai modul Java biasa di Gradle, maka sangat mudah untuk meminta Gradle memberi Anda file jar dengan isinya. File jar itu hanya akan memiliki kode Anda, bukan pustaka Apache lain yang bergantung padanya. Saya merekomendasikan untuk mendistribusikannya dengan cara ini; Agak aneh untuk menggabungkan dependensi di dalam perpustakaan Anda, dan lebih normal bagi pengguna perpustakaan tersebut untuk menyertakan dependensi tersebut sendiri (karena jika tidak, ada benturan dari proyek-proyek tersebut yang sudah menautkan salinan perpustakaan, mungkin dari versi yang berbeda ). Terlebih lagi, Anda menghindari potensi masalah lisensi seputar pendistribusian ulang kode orang lain jika Anda akan menerbitkan perpustakaan Anda.

Ambil kode yang juga perlu dikompilasi ke jar, dan pindahkan ke modul Java biasa yang terpisah di Android Studio:

  1. Menu File > Modul Baru ... > Perpustakaan Java
  2. Siapkan pustaka, nama paket Java, dan nama kelas di wizard. (Jika Anda tidak ingin membuat kelas untuk Anda, Anda dapat menghapusnya setelah modul dibuat)
  3. Dalam kode Android Anda, siapkan dependensi pada modul baru agar dapat menggunakan kode di library baru Anda:
  4. File > Project Structure > Modules > (Android Module Anda) > Dependencies > + > Module dependency . Lihat tangkapan layar di bawah ini: masukkan deskripsi gambar di sini
  5. Pilih modul Anda dari daftar di dialog yang muncul: masukkan deskripsi gambar di sini

Mudah-mudahan proyek Anda harus berjalan normal sekarang. Setelah Anda melakukan build, file jar untuk library Java Anda akan ditempatkan di direktori build / libs di direktori modul Anda. Jika Anda ingin membuat file jar secara manual, Anda dapat menjalankan tugas file build jar dari jendela Gradle: masukkan deskripsi gambar di sini


Terima kasih banyak! Jawaban Anda sangat membantu, sebagian besar di tangkapan layar terakhir yang menunjukkan tugas-tugas Gradle. Saya tidak tahu itu. Saya bisa mengikuti langkah-langkah Anda, tetapi saya masih kehilangan org.apache.http.Header. Bagaimana cara mengimpornya ke lib saya?
dum4ll3

Apa yang Anda maksud ketika Anda mengatakan Anda melewatkannya?
Scott Barta

1
Lakukan alur Project Structure> yang sama, tetapi pilih modul library Anda, bukan project Anda, dan tambahkan dependensi dengan cara yang sama. Dalam jawaban saya, saya mengatakan bahwa itu menempatkan file jar di build / libs dir di direktori modulnya.
Scott Barta

1
Saya mendapat: java.lang.NoClassDefFoundError: com.loopj.android.http.RequestParams. Itu perpustakaan eksternal saya yang saya kompilasi dengan milik saya.
dum4ll3

2
Ini bekerja dengan perpustakaan java saja, dan tugas jar di perpustakaan android tidak ada
cuasodayleo

26

Di Android Studio IDE, akses " Run Anything bar " dengan:

CTRL+ CTRL+ gradle CreateFullJarRelease+ENTER

Setelah itu Anda akan menemukan artefak Anda di folder ini di proyek Anda
Build > Intermediates > Full_jar > Release > CreateFullJarRelease > full.jar


ATAU


Gradle sudah memiliki Taskuntuk itu, di menu samping gradle, di bawah otherfolder.

toolbar gradle

Kemudian gulir ke bawah createFullJarReleasedan klik.

Tugas Gradle

Setelah itu Anda akan menemukan artefak Anda di folder ini di proyek Anda

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


2
Tidak dapat melihat opsi ini. Apakah ini telah ditambahkan pada versi Studio terbaru?
Dibzmania

1
Saya membangun dan ketika menemukan * .jar namanya adalah: full.jar. 30 menit untuk menemukannya lol
nobjta_9x_tq

1
Dalam kasus saya, saya menemukannya dibuild\intermediates\intermediate-jars\release
Yusril Maulidan Raji

Saya punya pertanyaan. Dalam kasus saya, ini menghasilkan 3 file jar. classes.jar,, full.jardan res.jar. Haruskah saya mengimpor semua file jar kapan pun saya ingin menggunakannya?
Yusril Maulidan Raji

Cukup gunakan full.jar
Haroun Hajem

11

Cukup tambahkan ini ke build.gradle modul java Anda. Ini akan mencakup perpustakaan dependen dalam arsip.

mainClassName = "com.company.application.Main"

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

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

Ini akan menghasilkan file [module_name] / build / libs / [module_name] .jar.


Tetapi apakah perpustakaan .jar memiliki kelas Utama? OP mengatakan mereka sedang membangun file .jar "sehingga saya dapat menggunakannya di proyek lain" (sic). Kedengarannya seperti perpustakaan.
Steve White

Hanya orang ini yang benar-benar mengerti, hanya pembuatan stoples tidak menyelesaikan masalah. bagaimana jika kita perlu menjalankannya. Kode di atas menghindari kesalahan "Tidak dapat mengeksekusi file jar:" tidak ada atribut manifes utama "".
MobileEvangelist

1

File .jar akan otomatis dibuat ketika Anda mengkompilasi / menjalankan aplikasi Anda.

Anda dapat menemukan file class.jar Anda dari root_folder / app / build / intermediates / bundles / debug

lokasi file jar


1
  1. Buka tab Gradle di Android Studio, lalu pilih proyek perpustakaan.

  2. Lalu pergi ke Tasks

  3. Lalu pergi ke Lainnya

  4. Klik dua kali pada bundleReleaseaar

Anda dapat menemukan .aarfile Anda di bawahyour_module/build/outputs/aar/your-release.aar

Berikut gambar


Saya tidak melihat "Tab Gradle" di mana pun. Akhirnya saya mengetik "Gradle" di pencarian Bantuan, dan mendapatkan tampilan seperti Gradle Anda. Tetapi daftar di dalamnya sangat berbeda, jauh lebih pendek dari daftar Anda. Tidak ada bundleReleaseaar di bawah Tasks-> Other. Ada "createJar", tetapi ketika saya mengklik itu, saya mendapatkan "Tugas 'createJar' tidak ditemukan di proyek root ..." Saya macet. Dan ... mengapa kita menginginkan file .aar? OP meminta file .jar. Apakah itu sama saja>
Steve White

Tapi pertanyaannya adalah bagaimana membuat .jartidak.aar
Aleksey Timoshchenko

0

cara saya menemukan adalah untuk menemukan keluaran kompilator proyek (struktur proyek> proyek). kemudian temukan folder yang sesuai dari modul yang ingin Anda ubah menjadi jar, kompres dengan zip dan ubah ekstensi keluaran dari zip ke 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

Jika Anda menjalankan tugas gradle dari AndroidStudio [Lainnya]

assembleRelease 
//or
bundleReleaseAar

atau melalui terminal

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

maka Anda akan dapat menemukannya .aardi

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

.aarFile (Android Library) terdiri dari file .jar(Java Library) dan sumber daya Android tambahan. .aarfile adalah file zip dengan ekstensi aar itu sebabnya Anda dapat mengganti .aardengan .zipatau run

unzip "<path_to/module_name>.aar"
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.