Skip to content

Instantly share code, notes, and snippets.

@dhesson
Forked from dmarcato/strip_play_services.gradle
Last active August 29, 2015 14:06

Revisions

  1. @dmarcato dmarcato revised this gist Jul 18, 2014. 1 changed file with 44 additions and 27 deletions.
    71 changes: 44 additions & 27 deletions strip_play_services.gradle
    Original file line number Diff line number Diff line change
    @@ -1,35 +1,52 @@
    afterEvaluate { project ->
    android.applicationVariants.each { variant ->
    variant.javaCompile.dependsOn stripPlayServices
    def toCamelCase(String string) {
    String result = ""
    string.findAll("[^\\W]+") { String word ->
    result += word.capitalize()
    }
    return result
    }

    task stripPlayServices << {
    def explodedDir = project.tasks.findAll { it.name.startsWith("prepare") && it.name.endsWith("Library")}.iterator().next().explodedDir.getParentFile().getParentFile().getParentFile()
    def playServiceRootFolder = new File(explodedDir, "com.google.android.gms/play-services/")
    playServiceRootFolder.list().each { versionName ->
    def versionFolder = new File(playServiceRootFolder, versionName)
    copy {
    from (file(new File(versionFolder, "classes.jar")))
    into (file(versionFolder))
    rename { fileName ->
    fileName = "classes_orig.jar"
    afterEvaluate { project ->
    Configuration runtimeConfiguration = project.configurations.getByName('compile')
    ResolutionResult resolution = runtimeConfiguration.incoming.resolutionResult
    // Forces resolve of configuration
    ModuleVersionIdentifier module = resolution.getAllComponents().find { it.moduleVersion.name.equals("play-services") }.moduleVersion

    String prepareTaskName = "prepare${toCamelCase("${module.group} ${module.name} ${module.version}")}Library"
    File playServiceRootFolder = project.tasks.find { it.name.equals(prepareTaskName) }.explodedDir

    Task stripPlayServices = project.tasks.create(name: 'stripPlayServices', group: "Strip") {
    inputs.files new File(playServiceRootFolder, "classes.jar")
    outputs.dir playServiceRootFolder
    description 'Strip useless packages from Google Play Services library to avoid reaching dex limit'

    doLast {
    copy {
    from(file(new File(playServiceRootFolder, "classes.jar")))
    into(file(playServiceRootFolder))
    rename { fileName ->
    fileName = "classes_orig.jar"
    }
    }
    }
    tasks.create(name: "strip" + versionName, type: Jar) {
    destinationDir = versionFolder
    archiveName = "classes.jar"
    from (zipTree(new File(versionFolder, "classes_orig.jar"))) {
    exclude "com/google/ads/**"
    exclude "com/google/android/gms/analytics/**"
    exclude "com/google/android/gms/games/**"
    exclude "com/google/android/gms/plus/**"
    exclude "com/google/android/gms/drive/**"
    exclude "com/google/android/gms/ads/**"
    tasks.create(name: "stripPlayServices" + module.version, type: Jar) {
    destinationDir = playServiceRootFolder
    archiveName = "classes.jar"
    from(zipTree(new File(playServiceRootFolder, "classes_orig.jar"))) {
    exclude "com/google/ads/**"
    exclude "com/google/android/gms/analytics/**"
    exclude "com/google/android/gms/games/**"
    exclude "com/google/android/gms/plus/**"
    exclude "com/google/android/gms/drive/**"
    exclude "com/google/android/gms/ads/**"
    }
    }.execute()
    delete {
    delete (file(new File(playServiceRootFolder, "classes_orig.jar")))
    }
    }.execute()
    delete {
    delete (file(new File(versionFolder, "classes_orig.jar")))
    }
    }

    project.tasks.findAll { it.name.startsWith('prepare') && it.name.endsWith('Dependencies') }.each { Task task ->
    task.dependsOn stripPlayServices
    }
    }
  2. @dmarcato dmarcato revised this gist Jul 18, 2014. 1 changed file with 2 additions and 1 deletion.
    3 changes: 2 additions & 1 deletion strip_play_services.gradle
    Original file line number Diff line number Diff line change
    @@ -5,7 +5,8 @@ afterEvaluate { project ->
    }

    task stripPlayServices << {
    def playServiceRootFolder = new File(rootProject.buildDir, "intermediates/exploded-aar/com.google.android.gms/play-services/")
    def explodedDir = project.tasks.findAll { it.name.startsWith("prepare") && it.name.endsWith("Library")}.iterator().next().explodedDir.getParentFile().getParentFile().getParentFile()
    def playServiceRootFolder = new File(explodedDir, "com.google.android.gms/play-services/")
    playServiceRootFolder.list().each { versionName ->
    def versionFolder = new File(playServiceRootFolder, versionName)
    copy {
  3. @dmarcato dmarcato renamed this gist Jul 3, 2014. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  4. @dmarcato dmarcato created this gist Jul 3, 2014.
    34 changes: 34 additions & 0 deletions build.gradle
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,34 @@
    afterEvaluate { project ->
    android.applicationVariants.each { variant ->
    variant.javaCompile.dependsOn stripPlayServices
    }
    }

    task stripPlayServices << {
    def playServiceRootFolder = new File(rootProject.buildDir, "intermediates/exploded-aar/com.google.android.gms/play-services/")
    playServiceRootFolder.list().each { versionName ->
    def versionFolder = new File(playServiceRootFolder, versionName)
    copy {
    from (file(new File(versionFolder, "classes.jar")))
    into (file(versionFolder))
    rename { fileName ->
    fileName = "classes_orig.jar"
    }
    }
    tasks.create(name: "strip" + versionName, type: Jar) {
    destinationDir = versionFolder
    archiveName = "classes.jar"
    from (zipTree(new File(versionFolder, "classes_orig.jar"))) {
    exclude "com/google/ads/**"
    exclude "com/google/android/gms/analytics/**"
    exclude "com/google/android/gms/games/**"
    exclude "com/google/android/gms/plus/**"
    exclude "com/google/android/gms/drive/**"
    exclude "com/google/android/gms/ads/**"
    }
    }.execute()
    delete {
    delete (file(new File(versionFolder, "classes_orig.jar")))
    }
    }
    }