2015-06-04 30 views
36

Tôi có một dự án Android với gradle. Vấn đề là: Ở chế độ xem project Tôi thấy vài phiên bản của các thư viện support-v4, ví dụ: support-v4-21.0.3support-v4-22.2.0.gradle - thư viện trùng lặp trong các phụ thuộc

Nhưng trong build.gradle Tôi hoàn toàn không có support-v4.

Nhưng tôi có ~ 10 phụ thuộc khác trong build.gradle. Ví dụ: appcompat-v7:22.2.0. Tôi có thể gợi ý rằng appcompat-v7:22.2.0 depens trên support-v4-22.2.0 trong phụ thuộc maven và ngầm kéo nó. Nhưng tôi không có ý tưởng ai kéo support-v4-21.0.3.

Theo như tôi biết tất cả libs này sẽ được đóng gói trong APK của tôi và tăng trọng số của APK.

Vì vậy, tôi có thắc mắc tiếp theo:

  1. Làm thế nào để tránh trùng lặp thư viện?
  2. Cách xem phụ thuộc của maven trong Android Studio?
  3. Cách phát hiện thư viện nào yêu cầu thư viện này? Ví dụ thư viện nào yêu cầu support-v4-21.0.3 trong dự án của tôi?

Trả lời

71

Để tìm phụ thuộc trùng lặp hoặc phụ thuộc bắt buộc của nó, bạn có thể trực quan hóa các phụ thuộc thư viện trong cây. Thực hiện lệnh gradle như dưới đây.

gradle -q dependencies yourProject:dependencies --configuration compile 

Lưu ý rằng, chạy gradlew trong Windows như dưới đây.

gradlew -q dependencies yourProject:dependencies --configuration compile 

Kết quả lệnh sẽ cho bạn thấy hệ thống phân cấp cây có thể đọc được của tất cả các phụ thuộc như dưới đây.

compile - Classpath for compiling the main sources. 
+--- org.androidannotations:androidannotations-api:3.2 
+--- com.android.support:support-annotations:22.1.1 
+--- com.squareup:otto:1.3.6 
+--- in.srain.cube:grid-view-with-header-footer:1.0.10 
+--- com.nostra13.universalimageloader:universal-image-loader:1.9.3 
+--- com.github.chrisbanes.photoview:library:1.2.3 
+--- org.simpleframework:simple-xml:2.7.1 
+--- com.google.android.gms:play-services-base:6.5.+ -> 6.5.87 
+--- project :yourProject 
| +--- com.loopj.android:android-async-http:1.4.6 
| +--- org.apache.httpcomponents:httpmime:4.2.5 
| | \--- org.apache.httpcomponents:httpcore:4.2.4 
| \--- com.google.code.gson:gson:2.3.1 
+--- project :facebook 
| \--- com.android.support:appcompat-v7:22.1.1 
|   \--- com.android.support:support-v4:22.1.1 
|    \--- com.android.support:support-annotations:22.1.1 -> 22.2.0 

Bạn có thể thấy phụ thuộc quá mức và quyết định nên tránh những phụ thuộc nào. Trong ví dụ trên, dòng cuối cùng com.android.support:support-annotations quà được ghi đè từ 22.1.1 đến 22.2.0 nội bộ.

Để tránh trùng lặp, bạn có thể thêm exclude mệnh đề trong mỗi dự án build.gradle tệp.

compile('com.github.chrisbanes.photoview:library:1.2.3') { 
    exclude group: 'com.android.support' 
} 
compile('org.simpleframework:simple-xml:2.7.1') { 
    exclude module: 'stax' 
    exclude module: 'stax-api' 
    exclude module: 'xpp3' 
} 
compile('com.google.android.gms:play-services-base:6.5.+') 
     { 
      exclude module: 'support-v4' 
     } 

Để biết thêm thông tin, bạn có thể xem hướng dẫn tại https://docs.gradle.org/current/userguide/userguide_single.html#sec:listing_dependencies

+0

Perfect. Trong trường hợp của tôi nó mang lại cho tôi quá nhiều đầu ra, vì vậy Bạn nên thêm một cái gì đó giống như '--configuration compile' tại và. – anber

+0

@anber // đề xuất của bạn được áp dụng. cảm ơn. – Youngjae

+0

Cảm ơn câu trả lời, tiết kiệm thời gian của tôi. –

23

Plugin Android studio sau đây cung cấp cho bạn thông tin chi tiết về sự phụ thuộc trùng lặp và tổng số phương pháp của mỗi phụ thuộc. Android Methods Count Plugin

enter image description here

Các vấn đề liên quan