[英]How to exclude resources or aar files from main APK
由於我需要減小APK文件的大小,我已經按照Apk擴展指南將APK分成塊。
Downloader庫定義了下載expansion file
,但我需要知道從apk中排除resource files
和aar
文件的方法。
我找到了以下,但這些既沒有刪除任何resource-drawable files
也沒有刪除任何arr
文件,並且apk的大小保持不變。
出於測試目的,我添加了大約4 MB
drawables
和幾個大小為3 MB
的arr
文件。 我正在從Build->Build APK
選項中創建apk
。 我不知道以下是否會影響已簽名的APK。
sourceSets {
main {
resources {
exclude '**/drawable/*'
}
}
}
android {
packagingOptions {
exclude 'lib/armeabi/a.so'
}
}
如果您希望保留或丟棄特定資源,請在項目中使用<resources>
標記創建XML文件,並指定要保留在工具中的每個資源:在工具中保留屬性和每個資源:discard屬性。 兩個屬性都接受以逗號分隔的資源名稱列表。
<?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" />
將此文件保存在項目資源中,例如,在res / drawable / keep.xml中。 構建不會將此文件打包到您的APK中。 這樣您就可以自定義要保留的資源。
擴展文件可能不包含任何可執行代碼。 這部分是Google Play政策,也是為了安全。 因為它們被寫入您的應用程序和Play可訪問的目錄,並且可能寫入SD卡,如果您將代碼放入其中,它將打開您的應用程序以獲得安全漏洞。
因此,您不希望將AAR文件放在擴展文件中,因為這些文件通常具有代碼。 許多資源可能不合適,因為這些資源是使用您的應用程序編譯的,因此有資源ID等。相反,您應該拆分不屬於顯式編譯的大型元素。 好的候選人是這樣的:
所有這些都可能位於您應用的資產目錄中,並且是擴展文件的主要候選者。
如果您沒有上述任何一項,如果您的規模超過100Mb,則可能是您沒有正確地編輯代碼,並且包括您的應用程序不使用的大量代碼。 如果是這種情況,那么學習正確使用Proguard可能比切換到擴展文件有了更大的改進。 如果您可以說明APK的大小在哪里,那么用戶可能會建議您更多? 圖片多少錢? 可執行代碼多少錢? 您使用的是Android Studio和Java,本機代碼還是Unity等技術? 所有這些都與APK大小最小化的方法略有不同。
你可以做兩件事。
首先,您可以使用Lint 。 Lint將幫助突出顯示並刪除您在代碼中未使用的所有資源,包括drawable。
其次你可以使用Proguard 。 使用Proguard
您可以選擇要收縮的APK版本,包括debug
(或主要版本,如您的示例)版本。 只需插入以下代碼即可。
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' } } }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.