Buat perpustakaan Jar Android untuk distribusi

160

Saya tahu proyek Perpustakaan Android, yang memungkinkan Anda membuat proyek sumber bersama yang dapat ditarik ke Aplikasi Android sesuai kebutuhan. Namun, itu membutuhkan sumber yang tersedia.

Saya mencari cara untuk membangun dan mendistribusikan perpustakaan sumber tertutup yang dapat digunakan dalam proyek Android lainnya seperti JAR tradisional. Ini akan membutuhkan penggunaan kompiler Android, jadi itu bukan file JAR vanilla-Java. FWIW, saya tidak perlu menanamkan sumber daya / layout di JAR.

Saya telah melihat http://andparcel.com/ tetapi rasanya seperti solusi, dan saya lebih suka menggunakan sesuatu yang 'didukung secara resmi' oleh Google. Selain itu, saya perlu memastikan bahwa JAR yang saya buat kompatibel dengan versi Android SDK lama / baru (yaitu saya perlu cara untuk mengatur versi platform target, dll).

Apakah perangkat Android terbaru memungkinkan pembuatan / konsumsi binari JAR? Bisakah Anda menunjukkan beberapa dokumentasi tentang bagaimana saya bisa melakukannya?

psikotik
sumber
sudahkah Anda mendapat jawaban untuk pertanyaan Anda? Saya memiliki persyaratan serupa .. Bagaimana Anda membuat file jar?
Krishnabhadra
Untuk mendistribusikan .jar untuk Android, Anda tidak memerlukan Android dx compiler, Java complier biasa berfungsi. Jika Anda mendistribusikan jar, ia akan dikonversi menjadi bytecode dx saat aplikasi dibuat.
ThomasW

Jawaban:

49

Jika Anda membuat proyek Perpustakaan Android tanpa sumber daya apa pun, ADT (pertama kali diperhatikan di r16) akan membuat .jar dengan nama yang sama dengan proyek di folder 'bin'.

Freddroid
sumber
tolong
1
Ini memberi saya toples, tetapi apakah saya harus tetap mendistribusikan folder sumber daya? Mencoba untuk membuka sherlock actionbar dan proyek saya tidak dapat dikompilasi karena mereka tidak dapat menemukan sumber daya actionbar.
Nathan Schwermann
1
@ schwiz ini hanya berfungsi untuk proyek non-sumber daya (seperti saya nyatakan dalam jawabannya). Kalau tidak, Anda perlu mengimpornya sebagai proyek Perpustakaan Android standar.
Freddroid
1
Apakah ini masih benar? Saya tidak melihat myapp.jardi /binfolder. Ada classes.jar, tapi bukan itu, kan?
garbagecollector
Saya sedang menjalankan ADT terbaru dan saya masih mendapatkan <nama proyek> .jar di folder / bin saya. Tetapi jika proyek Anda bergantung pada sumber daya, itu tidak baik dan proyek tersebut perlu dimasukkan sebagai proyek perpustakaan (Anda masih mendapatkan .jar.
Freddroid
23

Android tidak menyediakan jenis Android-JAR khusus. Tapi yang bisa Anda lakukan adalah menambahkan build.xml ke proyek Anda dan membangun JAR dengan semut.

Build.xml saya terlihat seperti ini:

<project name="MyAndroidLib" default="dist" basedir=".">
  <description>
This is my Android lib
  </description>
  <!-- set global properties for this build -->
  <property name="src" location="src" />
  <property name="bin" location="bin" />

  <target name="jar">
    <jar destfile="MyAndroidLib.jar" basedir="bin/classes/">
      <!-- replace 'com' by what ever you are using -->
      <!-- as first part of the package name -->
      <!-- e.g. de, org, ... -->
      <!-- the ** is important to include the directory recursively -->
      <include name="com/**" />
    </jar>
  </target>
</project>

Bangun JAR dengan menjalankannya ant jardi folder utama proyek Anda.

white_gecko
sumber
Mencoba ini dan dapat membangun file JAR, tetapi ukurannya aneh (hanya 343 byte), dibandingkan dengan ketika mengekspor perpustakaan ke JAR. Adakah yang tahu tentang bendera apa yang hilang?
Shane Oliver
Anda dapat memeriksa konten JAR dengan program arsip (JAR adalah ZIP) dan melihat apa yang hilang dan menambahkannya. Anda dapat menemukan informasi lebih lanjut di sini: ant.apache.org/manual/Tasks/jar.html
white_gecko
5
Dengan SDK Android terbaru, file Java dikompilasi bin/classes, jadi <jar destfile="MyAndroidLib.jar" basedir="bin/">seharusnya<jar destfile="MyAndroidLib.jar" basedir="bin/classes/">
Theo
17

Anda dapat membuat proyek Java "biasa" dan mengimpor dari sana Android.jar. Kemudian, Anda akan memiliki akses ke setiap komponen di SDK. Kemudian, Anda dapat mengekspor proyek Anda sebagai toples ... dan memuatnya dari aplikasi Android Anda. Ini bekerja dengan baik dan tampaknya cara mudah untuk melakukannya.

ferostar
sumber
1
Dalam hal itu, bagaimana mendeklarasikan komponen perpustakaan seperti layanan, aktivitas, penerima siaran, intentfilters. Apakah aplikasi klien perlu menyimpan semua deklarasi ini dalam manifes?
Ron
@ferostar Bagaimana saya bisa mengimpor android.jar ke proyek java?
Krishnabhadra
Jika perpustakaan memiliki sumber daya, cara menghasilkan R.java dan menambahkannya ke JAR
15

cukup buka properti proyek yang ingin Anda buat jar. Klik pada tab Android. dan centang di perpustakaan Is. sekarang Anda dapat melihat file .jar di folder bin. gunakan di tempat yang ingin Anda gunakan.

Dhrupal
sumber
2
Ini tampaknya berfungsi jika LibraryProject tidak memiliki sumber daya. Adakah cara untuk membuatnya bekerja dengan sumber daya?
Nathan Schwermann
Ini adalah jawaban yang buruk, jika proyek perpustakaan Anda bergantung pada proyek lain. Referensi itu tidak akan diambil.
stevebot
10

Satu-satunya solusi 'yang didukung secara resmi' oleh Google adalah proyek Library, dan membutuhkan kode sumber untuk didistribusikan. Anda bisa membuat JAR dengan cara biasa, tetapi Anda tidak bisa memasukkan atau referensi sumber daya di dalamnya.

Sayangnya saya pikir itu juga tidak mungkin untuk memasukkan JAR yang dikemas dalam proyek Perpustakaan, sebagai cara untuk berkeliling di sekitar persyaratan kode sumber.

Jeff Gilfelt
sumber
"Anda dapat membuat JAR dengan cara biasa, tetapi Anda tidak bisa memasukkan atau referensi sumber daya di dalamnya." <- sepertinya tidak berfungsi dengan baik di Eclipse jika saya mereferensikan kelas Android atau menggunakan kompiler Android. Petunjuk tentang cara membuatnya bekerja?
psychotik
5
Saya baru saja membuat proyek Java normal di Eclipse, tambahkan android.jar ke jalur build, lalu pilih Ekspor - Java - Jar File.
Jeff Gilfelt
@JeffGilfelt dan jika Anda memasukkan android.jar untuk direktori android-13 sdk, apakah Anda dapat menggunakan perpustakaan jar Anda masih dalam proyek-proyek untuk tingkat API yang lebih tinggi?
Fran Marzoa
10

Dalam versi terbaru Android Studio 1.2, pembuatan perpustakaan JAR telah dibuat sesederhana titik dan klik.

Langkah-langkah untuk diikuti:

  • File Goto -> Baru -> Modul Baru masukkan deskripsi gambar di sini
  • Pilih "Java Library" di akhir daftar opsi masukkan deskripsi gambar di sini
  • Masukkan nama lib jar dan nama kelas di dalamnya dan tekan tombol finish masukkan deskripsi gambar di sini
  • Itu dia !

Langkah selanjutnya adalah menambahkan Perpustakaan Jar Anda sebagai ketergantungan di aplikasi Anda. Sesederhana itu saja

  • File Goto -> Struktur Proyek -> Pilih 'aplikasi' -> Pilih 'Ketergantungan'
  • Pilih '+' di bagian bawah -> Pilih 'Ketergantungan Modul' masukkan deskripsi gambar di sini
  • Pilih modul jar lib Anda yang baru saja Anda buat di atas masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini
  • Pilih Ok dan hanya itu!

.... Atau Anda bisa menambahkan baris di bawah ini ke file App gradle Anda

dependencies {
      compile fileTree(dir: 'libs', include: ['*.jar']) // Default Gradle Task, should be already present
      compile 'com.android.support:appcompat-v7:21.0.3' // Default Gradle Task, should be already present

      compile project(':nameOfYourJarLibraryModule') // This is your jar library module
 }

Google mempromosikan Android Archive (AAR), meskipun JAR yang didukung dibawa kembali ke studio android. Untuk mengetahui perbedaan antara AAR dan JAR, rujuk tautan ini

Nishant.
sumber
Saya tidak mengerti bagaimana ini membuat file jar baru. Sepertinya Anda baru saja membuat modul baru yang akan digunakan sebagai perpustakaan di proyek Android Anda
Jejefcgb
Apa?! Anda membuat toples baru dari nol?
Ewoks
@Ewoks: setelah Anda membuat modul, Anda harus menambahkan kelas ke dalamnya. Setelah selesai, Anda menambahkannya sebagai ketergantungan
Nishant.
2
Pertanyaannya adalah: ada perpustakaan yang rusak dengan kode sumber. Cara membuat toples jadi hanya toples digunakan di proyek lain, bukan seluruh kode sumber perpustakaan .. Atau saya melewatkan sesuatu?
Ewoks
2
@Nishant. Bekerja untukku! Terima kasih!
ramires.cabral
6

Coba ini: Ini berhasil

1) menjadikan proyek perpustakaan Anda proyek normal dengan membatalkan pilihan bendera IsLibrary.

2) Jalankan proyek Anda sebagai Aplikasi Android. (Ini tidak akan menampilkan kesalahan)

3) Anda akan menemukan file .jar di folder bin bersama dengan .apk.

4) Beri Anda .jar yang ingin menggunakan perpustakaan Anda.

5) Katakan kepada mereka untuk hanya mengimpor jar eksternal ke jalur build.

ini akan bekerja dengan baik dengan semua sumber daya. semoga berhasil.

Aayush Rana
sumber
1
Saya harus memperbaiki posting ini: File-file JAR hanya dapat berisi kode, tidak ada sumber daya android. Jika ada sumber daya yang disertakan / dibutuhkan, kami harus tetap membuka proyek perpustakaan dan tidak bisa hanya menggunakan file JAR sederhana.
cody
@cody: Bagaimana kita menghasilkan file jar bersama dengan sumber daya dan menggunakannya dalam proyek lain?
Mahantesh M Ambi
1

ADT membuat folder bin yang berisi semua file kelas untuk semua file sumber yang cocok dan direktori dalam proyek Anda, Anda bisa menggunakan perintah jar, membuat arsip jar yang berisi file kelas ini dan direktori dan mungkin perpustakaan Anda, tetapi tentu saja perpustakaan Anda, file platform level platform hanya akan ditargetkan untuk level proyek saat ini - Anda akan memerlukan file jar yang berbeda untuk setiap level platform; Namun hal yang hebat tentang ini adalah bahwa file R.class termasuk dalam pohon direktori proyek dan karenanya Anda memiliki akses ke sumber dayanya. Saya tidak tahu apakah ini cara resmi untuk melakukan hal-hal di android, tetapi itu berhasil bagi saya.

David Evans
sumber
0

Dalam proyek kami, kami membuat apk (menggunakan apkbuilder) yang diinstal di / system / framework dan menambahkan apk ini di classpath default. Untuk kompilasi aplikasi menggunakan jar, kami membuat file jar (menggunakan jar c).

Catatan: Kami tidak memiliki sumber daya di perpustakaan.

Karan
sumber
0

.jar hanyalah file .zip yang berisi file .class (Anda dapat mencoba mengubah ekstensi file .jar apa pun menjadi .zip lalu lihat hasilnya). Mudah, Anda dapat membuat perpustakaan .jar apa pun untuk tujuan apa pun dengan zip file .class.

Renzokuken
sumber
Tidak sepenuhnya benar, lihat en.wikipedia.org/wiki/JAR_(file_format) untuk perbedaan halus (terutama pemesanan entri dalam ZIP)
iddo
0

Langkah :

1) Buka file project.properties

2) Tambahkan nilai android.library=true

3) Simpan file

4) Dari menu eclipse untuk proyek, pilih build secara otomatis kemudian pilih clean

Hasil: Jar baru dibuat di bawah nampan .

Pana Technica
sumber