2017-12-15 2 views
6

Da ich die Größe der APK-Datei reduzieren müssen, habe ich Apk Expansion Leitfaden APK in Stücke geteilt.Wie Ressourcen oder AAR-Dateien von der Haupt-APK auszuschließen

Die Downloader library definiert Möglichkeiten, um die expansion file herunterzuladen, aber ich brauche die Möglichkeit zu wissen, resource files und aar Dateien aus dem apk auszuschließen.

fand ich folgende, aber diese sind zu entfernen weder irgendwelche resource-drawable files noch eine arr Dateien und die Größe von apk bleibt gleich.

Für Testzwecke, ich habe drawables von rund 4 MB und paar arr Dateien mit einer Größe 3 MB hinzugefügt. Ich erstelle apk von Build->Build APK Option. Ich weiß nicht, ob das Folgende nur auf APK wirkt.

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

     } 
    } 
} 



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

Antwort

2

Es gibt 2 Dinge, die Sie tun können.

  1. Zum einen können Sie Lint verwenden. Mit Lint können Sie alle Ressourcen, die Sie nicht in Ihrem Code verwenden, einschließlich der Zeichenelemente, hervorheben und entfernen.

  2. Zweitens können Sie Proguard verwenden. Mit Proguard können Sie wählen, welche Version von APK Sie verkleinern möchten, einschließlich der debug (oder Main, wie in Ihrem Beispiel) Version. Fügen Sie einfach den folgenden Code ein.

    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

Wenn es spezifische Ressourcen, die Sie wünschen, eine XML-Datei in Ihrem Projekt mit einem <resources> Tag zu halten oder zu verwerfen, erstellen und jede Ressource angeben, in den Werkzeuge zu halten: halten Attribut und jede Ressource in den Tools verwerfen: verwerfen Attribut. Beide Attribute akzeptieren eine durch Kommas getrennte Liste von Ressourcennamen.

<?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" /> 

Speichern Sie diese Datei in Ihren Projektressourcen, z. B. res/drawable/keep.xml. Der Build verpackt diese Datei nicht in Ihr APK. Auf diese Weise können Sie festlegen, welche Ressourcen beibehalten werden sollen.

2

Erweiterungsdateien dürfen keinen ausführbaren Code enthalten. Dies ist teilweise eine Google Play-Richtlinie, aber auch für die Sicherheit. Da sie in ein Verzeichnis geschrieben werden, das sowohl für Ihre App als auch für Play zugänglich ist, und möglicherweise auch für eine SD-Karte, würde Ihre App bei Sicherheitslücken geöffnet werden, wenn Sie Code eingeben würden.

Aus diesem Grund möchten Sie keine AAR-Dateien in Erweiterungsdateien einfügen, da diese normalerweise über Code verfügen. Und viele Ressourcen sind möglicherweise nicht geeignet, da diese mit Ihrer App kompiliert werden und Ressourcen-IDs enthalten. Stattdessen sollten Sie große Elemente ausgliedern, die nicht Teil der expliziten Kompilierung sind.Gute Kandidaten sind Dinge wie:

  • Open GL Texturen
  • große Sound-Dateien für Sound-Effekte
  • großen Level-Daten oder Karten für Spiele
  • große Bilder

Alle diese könnten potenziell Sie befinden sich im Anlagenverzeichnis Ihrer App und sind Hauptkandidaten für Erweiterungsdateien.

Wenn Sie keine der oben genannten haben, wenn Sie über 100MB Größe gehen, ist es wahrscheinlich, dass Sie nicht Ihren Code richtig Proguarding und viel Code, die Ihre App nicht verwendet. Wenn dies der Fall ist, ist es wahrscheinlich eine größere Verbesserung, Proguard richtig zu benutzen, als auf Erweiterungsdateien umzusteigen. SO Nutzer können Sie vielleicht besser beraten, wenn Sie sagen können, wo die Größe in Ihrem APK ist? Wie viel auf Bildern? Wie viel auf ausführbaren Code? Verwenden Sie Android Studio und Java, systemeigenen Code oder eine Technologie wie Unity? Alle diese haben leicht unterschiedliche Ansätze zur APK-Größenminimierung.

Verwandte Themen