2013-10-01 2 views
5

Il file di build che sto utilizzando è di seguito. Mi piacerebbe ottenere che la mia build a pagamento non contenga librerie pubblicitarie. Includo solo le librerie pubblicitarie in omaggio. Ma sono presenti in tutte le build.Come escludere le librerie pubblicitarie dalla compilazione di app a pagamento?

Come devo modificare il file di build per ottenere la versione a pagamento gratuita delle librerie di annunci?

buildscript { 
    repositories { 
     mavenCentral() 
    } 

    dependencies { 
     classpath 'com.android.tools.build:gradle:0.5.+' 
    } 
} 

tasks.withType(Compile) { 
    options.encoding = "UTF-8" 
} 

apply plugin: 'android' 

repositories { 
    mavenCentral() 
    mavenLocal() 
} 

dependencies { 
    compile fileTree(dir: 'src/main/libs', include: '*.jar') 
    compile 'com.android.support:support-v4:18.0.+' 
    compile 'com.android.support:appcompat-v7:18.0.+' 
} 

android { 
    compileSdkVersion 18 

    buildToolsVersion "18.0.1" 

    defaultConfig { 
     versionCode 25 
     versionName "1.9.1" 
     minSdkVersion 9 
     targetSdkVersion 18 
     packageName 'com.example.myproject' 
    } 

    signingConfigs { 
     debug { 
      storeFile file("your path") 
     } 

     release { 
      storeFile file("your path") 
      storePassword "" 
      keyAlias "" 
      keyPassword "" 
     } 
    } 

    buildTypes { 
     debug { 
      packageNameSuffix '.debug' 
      versionNameSuffix '-DEBUG' 
      signingConfig signingConfigs.debug 
     } 
     release { 
      signingConfig signingConfigs.release 
     } 
    } 

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

    flavorGroups 'market', 'version' 

    productFlavors { 
     google { 
      flavorGroup 'market' 
     } 
     amazon { 
      flavorGroup 'market' 
     } 
     slideme { 
      flavorGroup 'market' 
     } 
     free { 
      flavorGroup "version" 
      dependencies { 
       compile fileTree(dir: 'src/free/libs', include: '*.jar') 
      } 
     } 
     paid { 
      flavorGroup "version" 
      packageName = android.defaultConfig.packageName + ".paid" 
     } 
    } 

    android.sourceSets.amazon { 
     assets.srcDirs = ['src/amazon/assets'] 
     res.srcDirs = ['src/amazon/res'] 
     java.srcDirs = ['src/amazon/java'] 
    } 

    android.sourceSets.slideme { 
     assets.srcDirs = ['src/slideme/assets'] 
     res.srcDirs = ['src/slideme/res'] 
     java.srcDirs = ['src/slideme/java'] 
    } 

    android.sourceSets.free { 
     manifest.srcFile 'src/free/AndroidManifest.xml' 
     assets.srcDirs = ['src/free/assets'] 
     res.srcDirs = ['src/free/res'] 
     java.srcDirs = ['src/free/java'] 
    } 

    android.sourceSets.paid { 
     assets.srcDirs = ['src/paid/assets'] 
     res.srcDirs = ['src/paid/res'] 
     java.srcDirs = ['src/paid/java'] 
    } 
} 

risposta

8

Dopo alcune ricerche, penso di aver raggiunto ciò che volevo. Con l'aiuto di questo https://stackoverflow.com/a/17246390/1463357 e di questo post https://stackoverflow.com/a/18213259/1463357 sono riuscito a correggere il mio file gradle.build.

Ci sono stati due problemi con il mio file di build originale. Il primo problema era dipendenze erroneamente definite per i sapori. Dipendenze devono essere definiti dopo productFlavors, e devono essere definiti in forma flavorNameCompile come questo:

productFlavors { 
    free { 
    } 
} 

dependencies { 
    compile fileTree(dir: 'src/main/libs', include: '*.jar') 
    freeCompile fileTree(dir: 'src/free/libs', include: '*.jar') 
} 

secondo problema era nei sourceSets sbagliate definizione. Per definire correttamente i set di origine per i sapori, i sapori devono essere definiti prima dei set di origine. Come questo:

productFlavors { 
    free {     
    } 
} 

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

Dopo l'applicazione di tali modifiche, dimensioni APK per diversi gusti erano diversi come previsto e nessuna traccia di librerie di pubblicità si trovano in loro.

Ecco il mio finale di file gradle.build:

buildscript { 
    repositories { 
     mavenCentral() 
    } 

    dependencies { 
     classpath 'com.android.tools.build:gradle:0.6.+' 
    } 
} 

apply plugin: 'android' 

repositories { 
    mavenCentral() 
    mavenLocal() 
} 

android { 
    compileSdkVersion 18 

    buildToolsVersion "18.0.1" 

    defaultConfig { 
     versionCode 26 
     versionName "2.0" 
     minSdkVersion 9 
     targetSdkVersion 18 
     packageName 'com.example.myproject' 
    } 

    signingConfigs { 
     debug { 
      storeFile file("your path") 
     } 

     release { 
      storeFile file("your path") 
      storePassword "" 
      keyAlias "" 
      keyPassword "" 
     } 
    } 

    buildTypes { 
     debug { 
      packageNameSuffix '.debug' 
      versionNameSuffix '-DEBUG' 
      signingConfig signingConfigs.debug 
     } 
     release { 
      signingConfig signingConfigs.release 
     } 
    } 

    flavorGroups 'market', 'version' 

    productFlavors { 
     google { 
      flavorGroup 'market' 
     } 
     amazon { 
      flavorGroup 'market' 
     } 
     slideme { 
      flavorGroup 'market' 
     } 
     free { 
      flavorGroup "version" 
     } 
     paid { 
      flavorGroup "version" 
      packageName = android.defaultConfig.packageName + ".paid" 
     } 
    } 

    sourceSets { 
     main { 
      manifest.srcFile 'src/main/AndroidManifest.xml' 
      java.srcDirs = ['src/main/java'] 
      res.srcDirs = ['src/main/res'] 
      assets.srcDirs = ['src/main/assets'] 
     } 
     amazon { 
      assets.srcDirs = ['src/amazon/assets'] 
      res.srcDirs = ['src/amazon/res'] 
      java.srcDirs = ['src/amazon/java'] 
     } 
     slideme { 
      assets.srcDirs = ['src/slideme/assets'] 
      res.srcDirs = ['src/slideme/res'] 
      java.srcDirs = ['src/slideme/java'] 
     } 
     free { 
      manifest.srcFile 'src/free/AndroidManifest.xml' 
      assets.srcDirs = ['src/free/assets'] 
      res.srcDirs = ['src/free/res'] 
      java.srcDirs = ['src/free/java'] 
     } 
     paid { 
      assets.srcDirs = ['src/paid/assets'] 
      res.srcDirs = ['src/paid/res'] 
      java.srcDirs = ['src/paid/java'] 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'src/main/libs', include: '*.jar') 
    compile 'com.android.support:support-v4:18.0.+' 
    compile 'com.android.support:appcompat-v7:18.0.+' 
    freeCompile fileTree(dir: 'src/free/libs', include: '*.jar') 
} 
+0

Hi, in modo simile, se vogliamo aggiungere qualche riga di compilazione libreria sulla base di minimo livello di API di Android utilizzata per un gusto particolare, possiamo farlo? – beginner

Problemi correlati