Cara membuat proyek perpustakaan di Android Studio dan proyek aplikasi yang menggunakan proyek perpustakaan

164

Saya baru mengenal sistem build gradle dan IntelliJ.

Jadi bagaimana cara membuat Proyek Perpustakaan Android (mis. Com.myapp.lib1) dan proyek aplikasi (mis. Com.myapp.app) dan membuat sistem build menyertakan com.myapp.lib1 pada proyek aplikasi?

Saya pergi ke Struktur Proyek -> Modul -> proyek Aplikasi Saya dan menambahkan ketergantungan pada proyek lib. IntelliJ sekarang dapat mengenali kelas dari proyek lib ketika digunakan dalam proyek aplikasi, tetapi ketika saya menjalankan proyek aplikasi, ada kesalahan seperti:

Gradle: error: package com.myapp.lib1 does not exist
Randy Sugianto 'Yuku'
sumber
1
Saya menggunakan Perpustakaan Android untuk membuat versi gratis / berbayar dari aplikasi saya. Sistem pembangunan Gradle yang baru membuat pendekatan ini usang dengan konsep Build Variants. Anda sekarang dapat secara otomatis membuat APK yang ditandatangani berbeda dari kode yang sama. Saya berharap saya tahu ini lebih cepat.
theczechsensation
1
@ sensus negara - dapatkah Anda menguraikannya? Setelah mengunggah APK untuk versi lengkap, saya mencoba mengunggah APK untuk versi gratis, tetapi menggunakan nama paket yang sama. Google Play Store (GPS) memberi saya pesan yang mengatakan saya sudah menggunakan nama paket itu. Apakah yang Anda katakan tentang gradle berarti saya tidak perlu dua aplikasi terpisah dalam dua paket terpisah?
DSlomer64
Inilah jawaban sempurna stackoverflow.com/a/31366602/1118772 . Aqib Mumtaz disebutkan dalam jawaban, tetapi akhirnya. Alih-alih membuang-buang waktu dengan cara lain, Anda bisa menggunakan ini. filsafaticalhacker.com/2014/10/02/...
Noundla Sandeep
Utas menarik menambahkan Perpustakaan . Dengan penjelasan bergambar.
Harish

Jawaban:

111

Untuk membuat perpustakaan:

File> Modul Baru

pilih Perpustakaan Android

Lib

Untuk menggunakan perpustakaan, tambahkan itu sebagai ketergantungan:

File> Struktur Proyek> Modul> Dependensi

dep

Kemudian tambahkan modul (perpustakaan android) sebagai dependensi modul.

tambahkan modul

Jalankan proyek Anda. Itu akan berhasil.

Blundell
sumber
194
Ini menciptakan file modul dalam proyek. Bagaimana jika Anda ingin modul menjadi eksternal untuk proyek sehingga dapat digunakan dengan aplikasi lain?
rrbrambley
2
@ rrbrambley: Saya telah menemukan cara untuk menggunakan kembali modul di banyak proyek. Saya membuat tautan folder (NTFS Junction) menggunakan aplikasi yang disebut tautan winbolic untuk Windows. Ketika saya memiliki modul yang ingin saya gunakan kembali dalam banyak proyek, saya membuat tautan folder ke proyek yang akan digunakan kembali di dalam direktori setiap proyek untuk menggunakannya. Setelah ini saya menambahkan dependensi modul (di Andr. Studio). Sekarang saya dapat menggunakan / mengedit modul di setiap proyek sambil menjaga sinkronisasi. Tidak yakin apakah itu cara yang tepat untuk pergi, tetapi untuk saat ini tampaknya berfungsi dengan baik! Ini berfungsi lebih baik daripada repo pakar pakar lokal.
Peter
1
Sayangnya, pada Juli 2014, tidak ada lagi pengaturan Proyek seperti yang ditunjukkan pada screenie. Saya harus mengedit file .grade seperti pada jawaban GrkEngineer di bawah ini.
Tim Bray
24
Ini harus diberi suara karena ini menciptakan modul dari dalam proyek yang ada
Jonathan
2
Jika Anda ingin menggunakan lib yang sama di proyek lain, Anda harus menyalin modul perpustakaan ke proyek itu dan untuk mengkonfigurasi settings.gradle dan build.gradle modul utama secara manual.
Hanoo
114

Saya heran mengapa tidak ada contoh proyek stoples yang berdiri sendiri.

Dalam gerhana, kita cukup centang kotak "Is Library" dalam dialog pengaturan proyek.
Di Android studio, saya mengikuti langkah-langkah ini dan mendapatkan file jar.

  1. Buat proyek.

  2. buka file di menu proyek sebelah kiri. (app / build.gradle): Script Gradle> build.gradle (Modul: XXX)

  3. ubah satu baris: apply plugin: 'com.android.application'->'apply plugin: com.android.library'

  4. hapus applicationId dalam file: applicationId "com.mycompany.testproject"

  5. build project: Build> Rebuild Project

  6. maka Anda bisa mendapatkan file aar: app> build> outputs> folder aar

  7. ubah aarnama ekstensi file menjadizip

  8. unzip, dan Anda dapat melihat classes.jardi folder. ganti nama dan gunakan!

Lagi pula, saya tidak tahu mengapa google membuat pembuatan jar sangat merepotkan di studio android.

Jinbom Heo
sumber
1
Bekerja untuk saya di Android Studio 2.2.2 Desember. 2016.
Herman
95

Plugin Gradle Google merekomendasikan cara untuk mengonfigurasi file gradle Anda untuk membangun beberapa proyek memiliki beberapa kekurangan. Jika Anda memiliki beberapa proyek tergantung pada satu proyek perpustakaan, posting ini menjelaskan secara singkat konfigurasi yang direkomendasikan Google, kekurangannya, dan merekomendasikan cara berbeda untuk mengonfigurasi file gradle Anda ke mendukung pengaturan multi-proyek di Android Studio:

Pengaturan multi-proyek alternatif untuk studio android

Cara Yang Berbeda:

Ternyata ada cara yang lebih baik untuk mengelola beberapa proyek di Android Studio. Caranya adalah dengan membuat proyek Android Studio terpisah untuk perpustakaan Anda dan memberi tahu gradle bahwa modul untuk perpustakaan tempat aplikasi Anda berada berada di direktori proyek perpustakaan. Jika Anda ingin menggunakan metode ini dengan struktur proyek yang saya jelaskan di atas, Anda akan melakukan hal berikut:

  1. Buat proyek Android Studio untuk pustaka StickyListHeaders
  2. Buat proyek Android Studio untuk App2
  3. Buat proyek Android Studio untuk App1
  4. Konfigurasikan App1 dan App2 untuk membangun modul dalam proyek StickyListHeaders.

Langkah ke-4 adalah bagian yang sulit, jadi itulah satu-satunya langkah yang akan saya jelaskan secara terperinci. Anda dapat referensi modul yang eksternal ke direktori proyek Anda dengan menambahkan pernyataan proyek di file settings.gradle Anda dan dengan mengatur properti projectDir pada objek ProjectDescriptor yang dikembalikan oleh pernyataan proyek:

masukkan deskripsi gambar di sini

Kode yang harus dimasukkan settings.gradle:

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

Jika Anda telah melakukan ini dengan benar, Anda akan melihat bahwa modul yang dirujuk oleh proyek Anda akan muncul di navigator proyek, bahkan jika modul-modul itu di luar direktori proyek:

masukkan deskripsi gambar di sini

Ini memungkinkan Anda untuk bekerja pada kode pustaka dan kode aplikasi secara bersamaan. Integrasi kontrol versi juga berfungsi dengan baik ketika Anda mereferensikan modul secara eksternal dengan cara ini. Anda dapat melakukan dan mendorong modifikasi Anda ke kode perpustakaan sama seperti Anda dapat melakukan dan mendorong modifikasi ke kode aplikasi Anda.

Cara mengatur beberapa proyek ini menghindari kesulitan yang mengganggu konfigurasi yang disarankan Google. Karena kami mereferensikan sebuah modul yang berada di luar direktori proyek, kami tidak perlu membuat salinan tambahan dari modul perpustakaan untuk setiap aplikasi yang bergantung padanya dan kami dapat memvariasikan perpustakaan kami tanpa segala macam git submodule nonsense.

Sayangnya, cara lain untuk mendirikan beberapa proyek ini sangat sulit ditemukan. Jelas, ini bukan sesuatu yang akan Anda ketahui dari melihat panduan Google, dan pada titik ini, tidak ada cara untuk mengkonfigurasi proyek Anda dengan cara ini dengan menggunakan UI dari Android Studio.

Aqib Mumtaz
sumber
4
Ini jawaban yang sempurna. Terima kasih.
Noundla Sandeep
1
Jawaban yang bagus, tetapi Anda harus menyalin bit yang relevan dari pos ke jawaban Anda jika tautan rusak.
Greyson Parrelli
2
CATATAN: untuk evaluasi string secara bertahap, Anda harus menggunakan penawaran ganda ("). Ini" save the day "untuk saya. Ditautkan dengan ini
Solata
1
Bagaimana kami merujuk kode perpustakaan dari kode aplikasi? Setelah mengikuti instruksi pengaturan Anda, kode aplikasi masih tidak dapat merujuk ke paket dalam kode perpustakaan. Apakah ada langkah ekstra yang perlu dilakukan?
CEGRD
2
@ CEGRD Anda harus pergi ke File> Struktur Proyek dan klik pada nama modul yang sedang Anda kerjakan. Lalu buka tab dependensi> klik pada '+' lalu 'Ketergantungan modul' di menu tarik turun. Anda kemudian dapat menambahkan modul library1 ke proyek Anda saat ini.
OliasailO
45

Lihat tautan ini tentang pengaturan multi proyek .

Beberapa hal yang perlu diperhatikan, pastikan Anda memiliki pengaturan Anda. Diperbarui untuk referensi modul aplikasi dan perpustakaan.

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

Pastikan juga build.gradle aplikasi memiliki followng:

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

Anda harus memiliki struktur berikut:

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

Build.gradle aplikasi harus menggunakan com.android.applicationplugin sementara build.gradle perpustakaan mana pun harus menggunakan com.android.libraryplugin.

Android Studio IDE harus diperbarui jika Anda dapat membangun dari baris perintah dengan pengaturan ini.

GrkEngineer
sumber
Apakah plugin didefinisikan dalam build.gradle satu-satunya perbedaan? mis. Bisakah Anda mengubah modul yang ada menjadi perpustakaan Android dengan mengubah satu baris itu?
Enrico
22
Suatu hari, kita akan mengklik tombol impor dan perpustakaan hanya akan berfungsi, maka kita akan mulai mengetik kode di editor.
Steve M
6
Pendekatan ini tampaknya memasukkan perpustakaan dalam proyek yang sebenarnya. Apa yang diinginkan OP adalah untuk mengetahui cara membuat proyek perpustakaan Android terpisah yang hidup di proyek / ruangnya sendiri dan hanya dimasukkan pada proyek aplikasi utama sebagai lib
Jonathan
@SteveM Itu telah menjadi masalah saya sepanjang karier saya. Saya baru saja mulai coding tanpa desain. Dan kemudian menghabiskan berjam-jam debugging dan refactoring.
Rajkiran
13

Untuk Intellij IDEA (dan Android Studio) setiap perpustakaan adalah Modul. Pikirkan Modul di Android Studio yang setara dengan proyek di Eclipse. Proyek di Android Studio adalah kumpulan modul. Modul dapat dijalankan aplikasi atau modul perpustakaan.

Jadi, untuk menambah proyek perpustakaan android baru Anda perlu membuat modul tipe "perpustakaan Android". Kemudian tambahkan modul perpustakaan ini ke daftar ketergantungan modul utama Anda (modul Aplikasi).

Simon-Droid
sumber
12

Cara paling sederhana bagi saya untuk membuat dan menggunakan kembali proyek perpustakaan:

  1. Pada proyek yang dibuka file > new > new module(dan jawab pertanyaan UI)

masukkan deskripsi gambar di sini

  1. centang / atau tambahkan jika di file settings.gradle :include ':myLibrary'
  2. centang / atau tambahkan jika dalam file build.gradle :

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

  3. Untuk menggunakan kembali modul perpustakaan ini di proyek lain, salin folder itu di proyek daripada langkah 1 dan lakukan langkah 2 dan 3.

Anda juga dapat membuat proyek aplikasi studio baru. Anda dapat dengan mudah mengubah modul aplikasi yang ada ke modul perpustakaan dengan mengubah tugas plugin di file build.gradle menjadi com.android.library.

apply plugin: 'com.android.application'

android {...}

untuk

apply plugin: 'com.android.library'

android {...}

lebih lanjut di sini

hanoo
sumber
Jika Anda mengubah modul aplikasi yang ada ke modul perpustakaan dengan mengubah tugas plugin, Anda juga harus menghapus baris `applicationId" com .... "dari file gradle.
TDG
"PERINGATAN: Konfigurasi 'kompilasi' sudah usang dan telah diganti dengan 'implementasi' dan 'api'."
slhck
9

Anda dapat menambahkan modul baru ke aplikasi apa pun seperti yang dikatakan Blundell pada jawabannya dan kemudian merujuknya dari aplikasi lain.

Jika Anda ingin memindahkan modul ke sembarang tempat di komputer Anda cukup pindahkan folder modul (modul benar-benar independen), maka Anda harus merujuk modul tersebut.

Untuk referensi modul ini Anda harus:

  • Pada file build.gradle aplikasi Anda, tambahkan:

    dependencies {
    ...
    compile project(':myandroidlib')
    }
    
  • Pada file settings.gradle tambahkan yang berikut ini:

     include ':app', ':myandroidlib'
     project(':myandroidlib').projectDir = new File(PATH_TO_YOUR_MODULE)
    
Julian
sumber
misalnya di project(':library').projectDir = new File('../library')mana librarynama folder secara paralel dengan folder proyek android.
Seseorang di suatu tempat
5

Jangan lupa gunakan apply plugin: 'com.android.library'di build.gradleplugin Anda alih-alih terapkan:'com.android.application'

Ryan R
sumber
4

Cara Dokumentasi

Ini adalah cara yang disarankan sesuai saran yang diberikan dalam dokumentasi Android Studio.

Buat modul perpustakaan

Buat proyek baru untuk menjadikan perpustakaan Anda masuk. Klik File> Baru> Modul Baru> Perpustakaan Android> Selanjutnya> (pilih nama)> Selesai . Kemudian tambahkan kelas apa saja dan sumber daya yang Anda inginkan ke perpustakaan Anda.

Ketika Anda membangun modul, file AAR akan dibuat. Anda dapat menemukannya di project-name/module-name/build/outputs/aar/.

Tambahkan perpustakaan Anda sebagai ketergantungan

Anda dapat menambahkan perpustakaan Anda sebagai ketergantungan ke proyek lain seperti ini:

  1. Impor file AAR perpustakaan Anda dengan File> Modul Baru> Impor .JAR / .AAR Paket> Berikutnya> (pilih lokasi file)> Selesai . (Jangan mengimpor kode, jika tidak akan dapat diedit di terlalu banyak tempat.)
  2. Di file settings.gradle, pastikan nama perpustakaan Anda ada di sana.

    include ':app', ':my-library-module'
    
  3. Di file build.gradle aplikasi, tambahkan baris kompilasi ke bagian dependensi:

    dependencies {
        compile project(":my-library-module")
    }
    
  4. Anda akan diminta untuk menyinkronkan proyek Anda dengan gradle. Lakukan.

Itu dia. Anda harus dapat menggunakan perpustakaan Anda sekarang.

Catatan

Jika Anda ingin membuat perpustakaan Anda mudah tersedia untuk audiens yang lebih besar, pertimbangkan untuk menggunakan JitPac atau JCenter .

Suragch
sumber
3

Punya pertanyaan yang sama dan menyelesaikannya dengan cara berikut:

Mulai situasi :

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

Target : ingin menambahkan modul bernamadataformats

  1. Menambahkan modul baru (misalnya: Java Library)
  2. Pastikan settings.gradlepenampilan Anda seperti ini (biasanya otomatis):

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

  3. Pastikan ( secara manual ) bahwa build.gradlefile - file modul yang perlu menggunakan perpustakaan Anda memiliki ketergantungan berikut:

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

Matthias
sumber
2

Seperti yang dikomentari oleh responden, saya mencoba mencari tentang Gradle Build Varians dan saya menemukan tautan ini: http://code.tutsplus.com/tutorials/using-gradle-build-variants--cms-25005 Ini adalah solusi yang sangat sederhana. Inilah yang saya lakukan: - Dalam build.gradle:

flavorDimensions "version"

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

}

Kemudian saya memiliki 2 versi lebih banyak dari aplikasi saya: pro dan percobaan dengan 2 packageName berbeda yang merupakan 2 applicationId dalam kode di atas sehingga saya dapat mengunggah keduanya ke Google Play. Saya masih hanya kode di bagian "utama" dan menggunakan getpackageName untuk beralih ke versi. Cukup buka tautan yang saya berikan untuk detail.

Hai nguyen thanh
sumber
1

Ada dua cara paling sederhana jika salah satu tidak berfungsi, silakan coba yang lain.

  1. Tambahkan dependensi perpustakaan di dalam dependensi di dalam file build.gradle dari perpustakaan yang Anda gunakan, dan tempel perpustakaan Anda di Perpustakaan Eksternal.

ATAU

  1. Masuk saja ke folder libs Anda di dalam folder aplikasi dan tempelkan semua file .jar misalnya file Library Anda di sana. Sekarang triknya adalah sekarang masuk ke dalam file settings.gradle sekarang tambahkan baris ini "include ': app: libs'" after "include ': app '"Pasti akan bekerja ........... :)
Sudhanshu Gaur
sumber
1

Dalam kasus saya, menggunakan MAC OS X 10.11 dan Android 2.0, dan dengan melakukan persis seperti yang dijelaskan Aqib Mumtaz.

Tetapi, setiap kali, saya mendapat pesan ini: " Terjadi masalah saat mengonfigurasi proyek ': app'.> Tidak dapat mengevaluasi modul xxx: Konfigurasi dengan nama 'default' tidak ditemukan ."

Saya menemukan bahwa alasan pesan ini adalah bahwa Android 2.0 tidak memungkinkan untuk membuat perpustakaan secara langsung. Jadi, saya telah memutuskan pertama untuk membuat projet aplikasi dan kemudian memodifikasi build.gradle untuk mengubahnya sebagai perpustakaan.

Solusi ini tidak berfungsi, karena proyek Perpustakaan sangat berbeda dari proyek aplikasi.

Jadi, saya telah menyelesaikan masalah saya seperti ini:

  • Pertama buat aplikasi standar (jika perlu);
  • Kemudian pilih 'File / Buat Modul'
  • Pergi ke finder dan pindahkan folder modul yang baru dibuat di direktori framework Anda

Kemudian lanjutkan dengan solusi yang diusulkan oleh Aqib Mumtaz.

Akibatnya, sumber pustaka Anda akan dibagikan tanpa perlu menduplikasi file sumber setiap kali (itu adalah bid'ah bagi saya!)

Berharap ini membantu Anda.

Chrstph SLN
sumber