2017-12-15 112 views
6

Vì tôi cần giảm kích thước tệp APK, tôi đã theo dõi Apk Expansion hướng dẫn chia APK theo khối.Cách loại trừ tài nguyên hoặc tệp aar khỏi APK chính

Downloader library xác định cách tải xuống expansion file, nhưng tôi cần biết cách loại trừ resource filesaar tệp khỏi gói ứng dụng.

Tôi đã tìm thấy sau đây, nhưng chúng không xóa bất kỳ resource-drawable files cũng như bất kỳ tệp arr nào và kích thước của gói ứng dụng vẫn giữ nguyên.

Để kiểm tra mục đích, tôi đã thêm drawables trong khoảng 4 MB và một số tệp arr có kích thước 3 MB. Tôi đang tạo apk từ tùy chọn Build->Build APK. Tôi không biết liệu việc theo dõi sẽ chỉ có hiệu lực trên APK đã ký hay không.

sourceSets { 
    main { 
     resources { 
      exclude '**/drawable/*' 

     } 
    } 
} 



android { 
    packagingOptions { 
     exclude 'lib/armeabi/a.so' 
    } 
} 

Trả lời

2

Có 2 việc bạn có thể làm.

  1. Trước tiên, bạn có thể sử dụng Lint. Lint sẽ giúp làm nổi bật và loại bỏ tất cả các tài nguyên mà bạn không sử dụng trong mã của bạn bao gồm cả các bản vẽ.

  2. Thứ hai, bạn có thể sử dụng Proguard. Sử dụng Proguard bạn có thể chọn phiên bản APK bạn muốn thu nhỏ bao gồm phiên bản debug (hoặc chính, như trong ví dụ của bạn). Chỉ cần chèn mã sau đây.

    android { 
    buildTypes { 
        debug { 
         minifyEnabled true 
         useProguard false 
         proguardFiles getDefaultProguardFile('proguard-android.txt'), 
           'proguard-rules.pro' 
        } 
        release { 
         minifyEnabled true 
         proguardFiles getDefaultProguardFile('proguard-android.txt'), 
           'proguard-rules.pro' 
        } 
    } } 
    
5

Nếu có nguồn lực cụ thể mà bạn muốn giữ lại hoặc loại bỏ, tạo một tập tin XML trong dự án của bạn với một thẻ <resources> và chỉ định mỗi tài nguyên để giữ trong công cụ: giữ thuộc tính và mỗi tài nguyên để loại bỏ trong các công cụ : loại bỏ thuộc tính. Cả hai thuộc tính đều chấp nhận danh sách tên tài nguyên được phân cách bằng dấu phẩy.

<?xml version="1.0" encoding="utf-8"?> 
<resources xmlns:tools="http://schemas.android.com/tools" 
    tools:keep="@layout/l_used*_c,@layout/l_used_a,@layout/l_used_b*" 
    tools:discard="@layout/unused2" /> 

Lưu tệp này vào tài nguyên dự án của bạn, ví dụ: tại res/drawable/keep.xml. Bản dựng không đóng gói tệp này vào APK của bạn. Bằng cách này bạn có thể tùy chỉnh tài nguyên nào cần giữ.

2

Tệp mở rộng có thể không chứa bất kỳ mã thực thi nào. Đây là một phần chính sách của Google Play, nhưng cũng bảo mật. Bởi vì chúng được ghi vào một thư mục có thể truy cập cho cả ứng dụng và Play của bạn và có thể với thẻ SD, nếu bạn đặt mã, chúng sẽ mở ứng dụng của bạn để khai thác bảo mật.

Vì lý do này, bạn không muốn đặt các tệp AAR trong các tệp mở rộng, vì chúng thường có mã. Và nhiều tài nguyên có thể không phù hợp, vì chúng được biên dịch với ứng dụng của bạn và do đó có id tài nguyên, vv Thay vào đó bạn nên tách ra các phần tử lớn không phải là một phần của biên dịch rõ ràng.ứng cử viên tốt là những thứ như: kết cấu

  • Open GL
  • file âm thanh lớn cho hiệu ứng âm thanh
  • dữ liệu mức độ lớn hay các bản đồ cho các trò chơi
  • hình ảnh lớn

Tất cả những có thể có khả năng nằm trong thư mục tài sản của ứng dụng của bạn và là ứng cử viên chính cho các tệp mở rộng.

Nếu bạn không có gì ở trên, nếu bạn đang trên 100Mb kích thước có khả năng bạn không Proguarding mã của bạn một cách chính xác, và bao gồm rất nhiều mã ứng dụng của bạn không sử dụng. Nếu đây là trường hợp, sau đó học cách sử dụng Proguard một cách chính xác có lẽ là một cải tiến lớn hơn so với chuyển sang các tập tin mở rộng. SO người dùng có thể tư vấn cho bạn nhiều hơn nếu bạn có thể nói kích thước trong APK của mình đang diễn ra ở đâu? Bao nhiêu hình ảnh? Bao nhiêu trên mã thực thi? Bạn đang sử dụng Android Studio và java, mã gốc hoặc công nghệ như Unity? Tất cả các phương pháp này có cách tiếp cận hơi khác nhau để giảm thiểu kích thước APK.

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