Cách nhập dự án Android dưới dạng thư viện và KHÔNG biên dịch nó dưới dạng apk (Android studio 1.0)


120

Tôi đã cố gắng nhập một dự án (projLib) làm phụ thuộc cho một dự án khác (projAPK).

projAPK gradle có cái này:

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

nhưng khi tôi đồng bộ hóa gradle, nó sẽ xuất hiện lỗi này:

Lỗi: Phụ thuộc Android_2015: projLib: không xác định trên dự án projAPK giải quyết thành một kho lưu trữ APK không được hỗ trợ như một phần phụ thuộc biên dịch. Tệp: /Users/myname/Documents/Development/Android_2015/libs/projAPK/build/outputs/apk/projLib-release-unsigned.apk

vì vậy tôi đoán có hai giải pháp cho điều này:

  1. bằng cách nào đó làm cho gradle nghĩ rằng projLib là một thư viện không nên được biên dịch sang apk
  2. bằng cách nào đó làm cho gradle KHÔNG biên dịch projLib một cách rõ ràng

Vấn đề là, tôi không thể tìm thấy cách làm điều đó. Sẽ rất tuyệt nếu các bạn có thể giúp :)

Câu trả lời:


330

Trong tệp build.gradle của projLib, bạn sẽ thấy một câu lệnh như sau:

apply plugin: 'com.android.application'

yêu cầu Gradle xây dựng nó như một ứng dụng, tạo APK. Nếu bạn thay đổi nó thành thế này:

apply plugin: 'com.android.library'

nó sẽ xây dựng như một thư viện, tạo ra một AAR, và nó sẽ hoạt động.

Nếu bạn cũng cần projLib để tạo APK riêng, thì bạn sẽ phải thực hiện một số cấu trúc lại để kéo mã chung mà bạn cần vào mô-đun thư viện thứ ba và có cả hai APK phụ thuộc vào nó.

Các thư viện không được phép đặt applicationId, vì vậy nếu bạn thấy thông báo lỗi cho hiệu ứng đó, hãy xóa nó khỏi tập lệnh xây dựng của thư viện.


Cảm ơn bạn, điều này đã làm việc. Có cách đọc / tài liệu nào bạn có thể giới thiệu cho tôi về những thứ plugin này không?
Vic Zhou

13
Tôi đã thử điều đó và gặp lỗi mới: Error:Library projects cannot set applicationId. applicationId is set to 'com.bulletnoid.android.widget.StaggeredGridViewDemo' in default config.StprisredGridViewDemo là một gói trong thư viện mà tôi đã cố gắng nhập dưới dạng mô-đun.
Azurespot

13
Tôi vừa xóa dòng Id ứng dụng khỏi defaultConfig {} và nó đã hoạt động.
ericharlow

cũng có thể bạn sẽ cần phải thêm 'công cụ: thay thế = 'android: biểu tượng' trên <application ...> ... để ghi đè lên biểu tượng chính
Ric17101

24

Trong tệp gradle mô-đun -

Thay thế apply plugin: 'com.android.application' bằngapply plugin: 'com.android.library'

Sau đó loại bỏ applicationId "xxx.xxx.xxxx"

Làm sạch và xây dựng


tất cả được làm trong tập tin gradle mô-đun
Vlad

1

chỉ cần thêm các dòng này vào gradletệp thư viện và xóa các phần khác

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'
  ,...
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.