2015-10-21 17 views
9

Mam wymóg usunięcia określonego folderu res z zapachu.Jak wykluczyć folder res z gradle kompilacji smaków?

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" 
} 

Ale nadal dostępny jest folder do pobrania - mdpi.

Czy ktoś mógłby podać, jaki błąd popełniam.

Dzięki Vivek

+1

Należy spróbować 'sourceSets { flavor1 {{ główne zasoby { SRCDIR res ' wykluczyć '**/odkształcalne-MDPI/**' } } } }' –

+0

Próbowałam to samo, ale to nie działa. – vivek

+0

@vivek w jaki sposób rozwiązałeś ten problem? – Fahim

Odpowiedz

4

I wreszcie rozwiązać ten problem!

Znalazłem this link.

I to zrobił:

  1. dodać plik xml do folderu res/raw. Nazwałem to resources_discard.xml, oto ona:

    <?xml version="1.0" encoding="utf-8"?> 
    <resources xmlns:tools="http://schemas.android.com/tools" 
    tools:discard="@raw/hd/*" /> 
    
  2. Ten plik jest umieszczony w prawidłowej struktury katalogów dla mojego smaku nazwie lite "SCR/Lite/res/raw"

ten sposób, zawartość folderu res/hd nie jest zawarta w kompilacjach lite, skutecznie redukując rozmiar pliku apk w lite o 50%

UPD: aby wykluczyć niektóre obrazy z różnych smaków, musisz umieścić zdjęcia w folderze zasobów, i w gradle zadeklarować:

flavor { 
     aaptOptions { 
      ignoreAssetsPattern '/folder:*.jpg:*.png' //use : as delimiter 
     } 
    } 

również dowiedziałem się, że nie można mieć podfolderów w folderze/raw.

0

Możesz spróbować użyć podziałów.

Przykład (z prawej z Android SDK stronie):

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' 
    } 
    } 
} 

Jeśli to nie zadziała, można oddzielić RES/MDPI i resztę RES/folderów gęstości na dwa oddzielne moduły (nazwijmy je, layoutMdpi i layoutAll). Oba moduły muszą mieć tę samą nazwę pakietu, aby ich klasy R były identyczne i zamienne (w zasadzie to samo, co dzieje się między różnymi wersjami Androida SDK). Następnie utwórz co najmniej dwie konkretne konfiguracje zależności dla swoich smaków, jedną dla tych, którzy powinni korzystać z MDPI, i jedną dla tych, którzy nie powinni.

configurations { 
    mdpiCompile 
    allCompile 
} 

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

A następnie, ponieważ zasoby MDPI nie są obecne w layoutAll, jesteś dobry, aby przejść.