2013-10-01 1 views
5

Файл сборки, который я использую, приведен ниже. Я бы хотел, чтобы моя платная сборка не содержала рекламных библиотек. Я только включаю рекламные библиотеки в свободный вкус. Но они присутствуют во всех сборках.Как исключить рекламные библиотеки из платной сборки приложения?

Как мне изменить файл сборки, чтобы получить бесплатную платную версию библиотеки объявлений?

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

ответ

8

После некоторых исследований, я думаю, что достиг того, чего хотел. С помощью этого https://stackoverflow.com/a/17246390/1463357 и этого сообщения https://stackoverflow.com/a/18213259/1463357 я смог исправить файл gradle.build.

Были проблемы с моим исходным файлом сборки. Первой проблемой было ошибочно определенные зависимости для ароматов. Зависимости должны быть определены после productFlavors, и они должны быть определены в виде flavorNameCompile так:

productFlavors { 
    free { 
    } 
} 

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

Вторая проблема была в неправильных sourceSets определение. Чтобы правильно определить исходные наборы для ароматизаторов, необходимо определить ароматы перед исходными наборами. Как это:

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

После применения этих изменений, APK размеры для разных вкусов были разными, как и ожидалось, и никаких следов рекламных библиотек не будут найдены в них.

Вот мой последний 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

Привет, подобным образом, если мы хотим, чтобы добавить библиотеку компиляции линии, основанной на мин андроида уровне апи используется для определенного аромата, мы можем сделать это? – beginner

Смежные вопросы