5

Tôi có nhiều thư viện trong dự án của tôi nhưKích thước tăng phụ thuộc thư viện của APK?

dependencies { 
    compile files('libs/universalloaderlibrary.jar') 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:22.2.1' 
    compile 'com.android.support:design:22.2.1' 
    compile 'com.android.support:recyclerview-v7:22.2.1' 
    compile 'com.android.support:cardview-v7:22.2.1' 
    compile 'de.hdodenhof:circleimageview:1.3.0' 
    compile 'com.jakewharton:butterknife:7.0.1' 
    //noinspection GradleCompatible 
    compile 'com.google.android.gms:play-services-gcm:7.3.0' 
    compile 'com.github.castorflex.smoothprogressbar:library:1.1.0' 
    compile 'com.google.code.gson:gson:2.2.4' 
    compile 'com.loopj.android:android-async-http:1.4.8' 
    compile 'com.android.support:multidex:1.0.1' 
} 

và các thư viện khác. Họ có tăng kích thước ứng dụng quá nhiều không. Tôi có hơn 25 thư viện trong dự án của mình. Ngay bây giờ kích thước APK là 11 MB và tôi phải thêm nhiều chức năng hơn trong đó. Điều gì có thể là lý do?

Tôi có một số câu hỏi, về vấn đề này.

Điều gì cần nhiều bộ nhớ hơn?

  1. Mô đun được thêm vào dự án.
  2. Tệp được thêm dưới dạng tệp JAR.
  3. Phụ thuộc Gradle chúng tôi thêm giống như compile 'com.android.support:appcompat-v7:22.2.1'.

Tôi đã đọc điều đó bằng cách bật Proguard, đặt minifyEnabled true có thể giảm kích thước ứng dụng.

buildTypes { 
     release { 
      minifyEnabled true 
      shrinkResources true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
} 

Làm cách nào để chúng hoạt động sau ảnh?

Chúng ta có nên tránh sử dụng nhiều thư viện trong dự án không?

Rất nhiều câu hỏi trong tâm trí của tôi để giảm kích thước APK. Bất kỳ loại gợi ý và trợ giúp nào cũng sẽ được đánh giá cao. Cảm ơn trước.

Trả lời

6

Cả ba của những phương pháp này sẽ làm tăng kích thước của gói ứng dụng. Sự khác biệt giữa chúng là mã nguồn cư trú ở đâu:

  • Một phụ thuộc mô-đun là mã nguồn trên máy cục bộ của bạn. Nó được biên dịch thành bytecode khi bạn xây dựng ứng dụng.
  • Tệp JAR là bytecode được biên dịch trước. Nó cũng nằm trên máy cục bộ của bạn, nhưng nó không thực sự là mã nguồn. Bytecode chỉ đơn giản là được thêm vào của riêng bạn khi bạn xây dựng.
  • Một phụ thuộc Gradle về cơ bản giống như sử dụng tệp JAR, ngoại trừ Gradle sẽ tải xuống tạo phẩm được biên dịch trước thay vì bạn thêm nó dưới dạng tệp trên máy cục bộ của bạn.

Bất kể điều gì ở trên, phụ thuộc sẽ đóng góp các lớp của nó vào bản dựng và chúng sẽ xuất hiện ở đầu ra cuối cùng (APK).

Proguard thực hiện một số điều có thể làm giảm kích thước APK của bạn. Nó có thể phân tích tĩnh tất cả bytecode và loại bỏ các lớp và các phương thức không bao giờ được sử dụng. Nó cũng có thể đổi tên các lớp, các trường và các phương thức thành các số nhận dạng nhỏ hơn như "abc", có thể làm giảm kích thước của bytecode một chút.

+0

Cảm ơn bạn đã giải thích.Vui lòng đề xuất một số cách để giảm kích thước. –

+0

@AnujSharma Bạn đã sử dụng proguard. 11MB không phải là nhiều, tập trung vào việc xây dựng ứng dụng và các tính năng của bạn trước và sau đó lo lắng về kích thước APK sau (nếu có). – Karakuri

+0

@Karkuri: Cảm ơn người đàn ông đã ủng hộ bạn. –

2

Có, phụ thuộc cộng với đầu ra của việc biên dịch mã nguồn của dự án, được gửi tới dex để chuyển đổi bytecode và đưa vào APK cuối cùng.

Với Proguard, các lớp học mà không được sử dụng có thể được gỡ bỏ một cách hệ thống

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