2013-10-01 16 views
5

Build-Datei, die ich verwende, ist unten. Ich möchte erreichen, dass mein bezahlter Build keine Werbebibliotheken enthält. Ich schließe nur Werbebibliotheken in freiem Geschmack ein. Aber sie sind in allen Builds vorhanden.Wie kann man Werbelibliotheken von Paid App Build ausschließen?

Wie soll ich meine Build-Datei ändern, um die kostenlose kostenpflichtige Version der Anzeigenbibliotheken zu erhalten?

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

Antwort

8

Nach ein paar Recherchen glaube ich, dass ich erreicht habe, was ich wollte. Mit Hilfe dieser https://stackoverflow.com/a/17246390/1463357 und dieser https://stackoverflow.com/a/18213259/1463357 Post konnte ich meine grdle.build Datei reparieren.

Es gab zwei Probleme mit meiner ursprünglichen Build-Datei. Das erste Problem war falsch definierte Abhängigkeiten für Aromen. Abhängigkeiten müssen nach productFlavors definiert werden, und sie müssen in Form flavorNameCompile wie folgt definiert werden:

productFlavors { 
    free { 
    } 
} 

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

Zweites Problem in der Definitionfalsch sourceSets war. Um SourceSets für Flavors korrekt zu definieren, müssen die Flavors vor sourceSets definiert werden. Wie folgt aus:

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

Nachdem diese Änderungen übernommen werden, apk Größen für verschiedene Aromen waren anders als erwartet und keine Spuren von Werbe-Bibliotheken werden in ihnen gefunden.

Hier ist meine letzte gradle.build Datei:

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

Hallo, in ähnlicher Weise, wenn wir eine Bibliothek Kompilierung Linie basierend auf min android api Ebene für einen bestimmten Geschmack verwendet hinzufügen wollen, können wir das tun? – beginner

Verwandte Themen