Bagaimana cara mengimpor proyek android sebagai perpustakaan dan TIDAK mengkompilasinya sebagai apk (Android studio 1.0)

120

Saya mencoba mengimpor proyek (projLib) sebagai ketergantungan untuk proyek lain (projAPK).

projAPK gradle memiliki ini:

dependencies {
    compile project(':libs:NewsAPI')
    compile project(':projLib')
}

tetapi ketika saya menyinkronkan gradle, itu memberikan kesalahan ini:

Kesalahan: Ketergantungan Android_2015: projLib: tidak ditentukan pada proyek projAPK menyelesaikan arsip APK yang tidak didukung sebagai ketergantungan kompilasi. File: /Users/myname/Documents/Development/Android_2015/libs/projAPK/build/outputs/apk/projLib-release-unsigned.apk

jadi saya kira ada dua solusi untuk ini:

  1. entah bagaimana membuat gradle berpikir bahwa projLib adalah pustaka yang tidak boleh dikompilasi ke apk
  2. entah bagaimana membuat gradle TIDAK mengkompilasi projLib secara eksplisit

Masalahnya adalah, saya tidak dapat menemukan cara melakukan semua itu. Akan luar biasa jika kalian bisa membantu :)

Vic Zhou
sumber

Jawaban:

330

Dalam projLib berkas build.gradle 's, Anda akan melihat pernyataan seperti ini:

apply plugin: 'com.android.application'

yang memberi tahu Gradle untuk membuatnya sebagai aplikasi, menghasilkan APK. Jika Anda mengubahnya menjadi ini:

apply plugin: 'com.android.library'

itu akan dibangun sebagai perpustakaan, menghasilkan AAR, dan seharusnya berfungsi.

Jika Anda juga memerlukan projLib untuk membuat APK terpisah, Anda harus melakukan beberapa pemfaktoran ulang untuk menarik kode umum yang Anda perlukan ke dalam modul library ketiga, dan kedua APK bergantung padanya.

Pustaka tidak diizinkan untuk menyetel applicationId, jadi jika Anda melihat pesan kesalahan untuk efek itu, hapus dari skrip build perpustakaan.

Scott Barta
sumber
Terima kasih Pak, ini berhasil. Apakah ada bacaan / dokumentasi yang bisa Anda rekomendasikan tentang plugin ini?
Vic Zhou
13
Saya mencobanya dan mendapat kesalahan baru: Error:Library projects cannot set applicationId. applicationId is set to 'com.bulletnoid.android.widget.StaggeredGridViewDemo' in default config.StaggeredGridViewDemo adalah paket di perpustakaan yang saya coba impor sebagai modul.
Azurespot
13
Saya baru saja menghapus baris Id aplikasi dari defaultConfig {} dan berhasil.
ericharlow
Anda juga perlu menambahkan 'tools: replace = "android: icon" pada <application ...> ... untuk menimpa ikon utama
Ric17101
24

Dalam file modul gradle -

Ganti apply plugin: 'com.android.application' denganapply plugin: 'com.android.library'

Lalu hapus applicationId "xxx.xxx.xxxx"

Bersihkan dan Bangun

san88
sumber
semua lakukan dalam file modul gradle
Vlad
1

cukup tambahkan baris ini ke gradlefile perpustakaan dan hapus bagian lain

apply plugin: 'com.android.library'

android {
   compileSdkVersion 23
   buildToolsVersion '23.0.2'
}

dependencies {
   compile fileTree(dir: 'libs', include: ['*.jar'])
   compile 'com.squareup.picasso:picasso:2.4.0'
   compile 'com.google.code.gson:gson:2.2.4'
   compile 'com.android.support:appcompat-v7:23.1.1'
   compile 'com.android.support:gridlayout-v7:23.1.1'
  ,...
}
Hamidreza Sadegh
sumber