2013-10-01 8 views
5

Plik kompilacji, którego używam, znajduje się poniżej. Chciałbym osiągnąć, że moja płatna kompilacja nie zawiera żadnych bibliotek reklamowych. Załączam tylko biblioteki reklamowe o wolnym smaku. Ale są one obecne we wszystkich kompilacjach.Jak wykluczyć biblioteki reklamowe z płatnej wersji aplikacji?

W jaki sposób należy zmienić plik kompilacji, aby uzyskać bezpłatne wersje płatne bibliotek?

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

Odpowiedz

8

Po pewnych badaniach wydaje mi się, że osiągnąłem to, co chciałem. Przy pomocy tego https://stackoverflow.com/a/17246390/1463357 i tego postu https://stackoverflow.com/a/18213259/1463357 udało mi się naprawić mój plik gradle.build.

Wystąpiły dwa problemy z moim oryginalnym plikiem kompilacji. Pierwszym problemem było błędnie określone zależności dla smaków. Zależności muszą być zdefiniowane po productFlavors i muszą być określone w formie flavorNameCompile tak:

productFlavors { 
    free { 
    } 
} 

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

Drugi problem był w niepowołane sourceSets definicja. Aby poprawnie zdefiniować sourceSets dla smaków, smaki muszą być zdefiniowane jako przed sourceSets. Tak:

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

Po zastosowaniu tych zmian, rozmiary APK dla różnych smakach różniły się zgodnie z oczekiwaniami i nie ma żadnych śladów bibliotek reklamowych znajdują się w nich.

Oto mój ostatni plik 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

Cześć, w podobny sposób, jeżeli chcemy dodać trochę biblioteki kompilacji linię opartą na poziomie min android api używany do konkretnego smaku, możemy to zrobić? – beginner

Powiązane problemy