簡體   English   中英

如何從主APK中排除資源或aar文件

[英]How to exclude resources or aar files from main APK

由於我需要減小APK文件的大小,我已經按照Apk擴展指南將APK分成塊。

Downloader庫定義了下載expansion file ,但我需要知道從apk中排除resource filesaar文件的方法。

我找到了以下,但這些既沒有刪除任何resource-drawable files也沒有刪除任何arr文件,並且apk的大小保持不變。

出於測試目的,我添加了大約4 MB drawables和幾個大小為3 MBarr文件。 我正在從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等。相反,您應該拆分不屬於顯式編譯的大型元素。 好的候選人是這樣的:

  • 打開GL紋理
  • 用於音效的大型聲音文件
  • 大型數據或游戲地圖
  • 大圖像

所有這些都可能位於您應用的資產目錄中,並且是擴展文件的主要候選者。

如果您沒有上述任何一項,如果您的規模超過100Mb,則可能是您沒有正確地編輯代碼,並且包括您的應用程序不使用的大量代碼。 如果是這種情況,那么學習正確使用Proguard可能比切換到擴展文件有了更大的改進。 如果您可以說明APK的大小在哪里,那么用戶可能會建議您更多? 圖片多少錢? 可執行代碼多少錢? 您使用的是Android Studio和Java,本機代碼還是Unity等技術? 所有這些都與APK大小最小化的方法略有不同。

你可以做兩件事。

  1. 首先,您可以使用Lint Lint將幫助突出顯示並刪除您在代碼中未使用的所有資源,包括drawable。

  2. 其次你可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM