2015-10-21 78 views
9

我有一個要求,從風格中刪除特定的res文件夾。如何從gradle構建風格中排除res文件夾?

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

但仍然drawable-mdpi文件夾來到apk。

所以任何人都可以請指出我犯了什麼錯誤。

感謝 維韋克

+1

你應該嘗試 'sourceSets { flavor1 { 主要{ 資源{ SRCDIR '水庫' 排除 '** /繪製-MDPI/**' }} } } ' –

+0

我試着相同但不起作用。 – vivek

+0

@vivek你是如何解決這個問題的? – Fahim

回答

4

我終於解決了這個問題!

我找到了this link

而且這樣做:

  1. 添加一個XML文件RES /原始文件夾中。我把它命名爲resources_discard.xml,這裏是:

    <?xml version="1.0" encoding="utf-8"?> 
    <resources xmlns:tools="http://schemas.android.com/tools" 
    tools:discard="@raw/hd/*" /> 
    
  2. 這個文件放在我的味道正確的目錄結構,稱爲精簡版「SCR /精簡版/ RES /生」

這方式,res/hd文件夾的內容不包含在lite版本中,有效地將我的lite build apk大小減少50%。

UPD:從不同風味中排除一些圖像,必須將圖像置於資源文件夾中,在渣滓聲明:

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

我還了解到你不能在/ raw文件夾中有子文件夾。

0

你可以嘗試使用拆分。

例(右從Android SDK網頁):

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

如果不工作,你可以分開你的RES/MDPI和RES /密度的文件夾的其餘部分爲兩個獨立的模塊(我們稱之爲他們,layoutMdpi和layoutAll)。兩個模塊都需要具有相同的包名,所以它們的R類是完全相同的並且可以互換(基本上與不同版本的android SDK之間發生的相同)。然後,爲您的口味創建至少兩個特定的依賴配置,一個用於那些應該使用MDPI的人,另一個用於那些不應該使用的人。

configurations { 
    mdpiCompile 
    allCompile 
} 

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

然後,由於MDPI資源不存在於layoutAll中,所以您很好。

相關問題