2015-10-21 4 views
9

Ich habe eine Anforderung, einen bestimmten Res-Ordner aus einem Geschmack zu entfernen.Wie res Ordner res von Gravel Build-Aromen auszuschließen?

sourceSets { 
    main { 
     manifest.srcFile 'AndroidManifest.xml' 
     java.srcDirs = ['src'] 
     res.srcDirs = ['res'] 
     aidl.srcDirs = ['src'] 
     assets.srcDirs = ['assets'] 
    } 
} 

productFlavors { 
    flavor1 { 
     sourceSets { 
      flavor1 { 
       resources { 
        exclude 'res/drawable-mdpi/*' 
       } 
      } 
     } 
    } 
    flavorDimensions "flavor" 
} 

Aber immer noch Drawable-MDPI-Ordner kommt in die apk.

Also könnte jemand bitte angeben, welchen Fehler ich mache.

Dank Vivek

+1

sollten Sie versuchen, 'sourceSets { flavor1 { main { Ressourcen { srcdir ausschließen 'res' '**/ziehbar-MDPI/**' } } } }' –

+0

Ich habe versucht, das gleiche, aber es funktioniert nicht. – vivek

+0

@vivek Wie hast du dieses Problem gelöst? – Fahim

Antwort

4

Ich löste dieses Problem endlich!

Ich habe this link gefunden.

Und tat dies:

  1. eine XML-Datei zu res/raw Ordner hinzufügen. Ich nannte es resources_discard.xml, hier ist es:

    <?xml version="1.0" encoding="utf-8"?> 
    <resources xmlns:tools="http://schemas.android.com/tools" 
    tools:discard="@raw/hd/*" /> 
    
  2. diese Datei in einer korrekten Verzeichnisstruktur für meinen Geschmack platziert heißt lite "scr/lite/res/raw"

Diese Weg, Inhalte von Res/HD-Ordner sind nicht in Lite-Builds enthalten, effektiv reduzieren meine Lite-Build-APK-Größe um 50%

UPD: um einige Bilder aus verschiedenen Geschmacksrichtungen auszuschließen, müssen Sie die Bilder in Assets Ordner und in Gradle erklären:

auch ich habe gelernt, dass Sie Unterordner in/Raw-Ordner haben können.

0

Sie könnten versuchen, Splits zu verwenden.

Beispiel (rechts aus dem Android SDK Webseite):

android { 
    ... 
    splits { 

    // Configures multiple APKs based on screen density. 
    density { 

     // Configures multiple APKs based on screen density. 
     enable true 

     // Specifies a list of screen densities Gradle should not create multiple APKs for. Here you should add all the densities except MDPI. 
     exclude "ldpi", "xxhdpi", "xxxhdpi" 

     // Specifies a list of compatible screen size settings for the manifest. 
     compatibleScreens 'small', 'normal', 'large', 'xlarge' 
    } 
    } 
} 

Wenn das nicht funktioniert, könnten Sie Ihre res/MDPI und den Rest der res/Dichte Ordner in zwei separate Module (nennen wir trennen sie, layoutMdpi und layoutAll). Beide Module müssen denselben Paketnamen haben, so dass ihre R-Klassen identisch und austauschbar sind (im Wesentlichen das gleiche wie zwischen den verschiedenen Versionen des Android-SDK). Erstellen Sie dann mindestens zwei spezifische Abhängigkeitskonfigurationen für Ihre Geschmacksrichtungen, eine für diejenigen, die MDPI verwenden sollten, und eine für diejenigen, die dies nicht tun sollten.

configurations { 
    mdpiCompile 
    allCompile 
} 

dependencies { 
    ... 
    mdpiCompile project(':layoutMdpi') 
    allCompile project(':layoutAll') 
} 

Und dann, da MDPI Ressourcen in layoutAll nicht vorhanden sind, sind Sie gut zu gehen.

Verwandte Themen