You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			109 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Groovy
		
	
		
		
			
		
	
	
			109 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Groovy
		
	
| 
								 
											11 years ago
										 
									 | 
							
								// adapted from https://gist.github.com/CedricGatay/4e21ce855bd2562f9257
							 | 
						||
| 
								 | 
							
								// which was adapted from https://gist.github.com/dmarcato/d7c91b94214acd936e42
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def toCamelCase(String string) {
							 | 
						||
| 
								 | 
							
								    String result = ""
							 | 
						||
| 
								 | 
							
								    string.findAll("[^\\W]+") { String word ->
							 | 
						||
| 
								 | 
							
								        result += word.capitalize()
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return result
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								afterEvaluate { project ->
							 | 
						||
| 
								 | 
							
								    Configuration runtimeConfiguration = project.configurations.getByName('compile')
							 | 
						||
| 
								 | 
							
								    println runtimeConfiguration
							 | 
						||
| 
								 | 
							
								    ResolutionResult resolution = runtimeConfiguration.incoming.resolutionResult
							 | 
						||
| 
								 | 
							
								    // Forces resolve of configuration
							 | 
						||
| 
								 | 
							
								    ModuleVersionIdentifier module = resolution.getAllComponents().find {
							 | 
						||
| 
								 | 
							
								        it.moduleVersion.name.equals("play-services")
							 | 
						||
| 
								 | 
							
								    }.moduleVersion
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def playServicesLibName = toCamelCase("${module.group} ${module.name} ${module.version}")
							 | 
						||
| 
								 | 
							
								    String prepareTaskName = "prepare${playServicesLibName}Library"
							 | 
						||
| 
								 | 
							
								    File playServiceRootFolder = project.tasks.find { it.name.equals(prepareTaskName) }.explodedDir
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def tmpDir = new File(project.buildDir, 'intermediates/tmp')
							 | 
						||
| 
								 | 
							
								    tmpDir.mkdirs()
							 | 
						||
| 
								 | 
							
								    def libFile = new File(tmpDir, "${playServicesLibName}.marker")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def strippedClassFileName = "${playServicesLibName}.jar"
							 | 
						||
| 
								 | 
							
								    def classesStrippedJar = new File(tmpDir, strippedClassFileName)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def packageToExclude = [
							 | 
						||
| 
								 | 
							
								    "com/google/ads/**",
							 | 
						||
| 
								 | 
							
								    //"com/google/android/gms/actions/**",
							 | 
						||
| 
								 | 
							
								    "com/google/android/gms/ads/**",
							 | 
						||
| 
								 | 
							
								    "com/google/android/gms/analytics/**",
							 | 
						||
| 
								 | 
							
								    //"com/google/android/gms/appindexing/**",
							 | 
						||
| 
								 | 
							
								    //"com/google/android/gms/appstate/**",
							 | 
						||
| 
								 | 
							
								    //"com/google/android/gms/auth/**",
							 | 
						||
| 
								 | 
							
								    //"com/google/android/gms/cast/**",
							 | 
						||
| 
								 | 
							
								    "com/google/android/gms/drive/**",
							 | 
						||
| 
								 | 
							
								    "com/google/android/gms/fitness/**",
							 | 
						||
| 
								 | 
							
								    "com/google/android/gms/games/**",
							 | 
						||
| 
								 | 
							
								    //"com/google/android/gms/gcm/**",
							 | 
						||
| 
								 | 
							
								    //"com/google/android/gms/identity/**",
							 | 
						||
| 
								 | 
							
								    "com/google/android/gms/location/**",
							 | 
						||
| 
								 | 
							
								    "com/google/android/gms/maps/**",
							 | 
						||
| 
								 | 
							
								    "com/google/android/gms/panorama/**",
							 | 
						||
| 
								 | 
							
								    "com/google/android/gms/plus/**",
							 | 
						||
| 
								 | 
							
								    //"com/google/android/gms/security/**",
							 | 
						||
| 
								 | 
							
								    //"com/google/android/gms/tagmanager/**",
							 | 
						||
| 
								 | 
							
								    "com/google/android/gms/wallet/**",
							 | 
						||
| 
								 | 
							
								    "com/google/android/gms/wearable/**"
							 | 
						||
| 
								 | 
							
								    ]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    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 {
							 | 
						||
| 
								 | 
							
								            def packageExcludesAsString = packageToExclude.join(",")
							 | 
						||
| 
								 | 
							
								            if (libFile.exists()
							 | 
						||
| 
								 | 
							
								                    && libFile.text == packageExcludesAsString
							 | 
						||
| 
								 | 
							
								                    && classesStrippedJar.exists()){
							 | 
						||
| 
								 | 
							
								                println "Play services already stripped"
							 | 
						||
| 
								 | 
							
								                copy {
							 | 
						||
| 
								 | 
							
								                    from(file(classesStrippedJar))
							 | 
						||
| 
								 | 
							
								                    into(file(playServiceRootFolder))
							 | 
						||
| 
								 | 
							
								                    rename { fileName ->
							 | 
						||
| 
								 | 
							
								                        fileName = "classes.jar"
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }else {
							 | 
						||
| 
								 | 
							
								                copy {
							 | 
						||
| 
								 | 
							
								                    from(file(new File(playServiceRootFolder, "classes.jar")))
							 | 
						||
| 
								 | 
							
								                    into(file(playServiceRootFolder))
							 | 
						||
| 
								 | 
							
								                    rename { fileName ->
							 | 
						||
| 
								 | 
							
								                        fileName = "classes_orig.jar"
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                tasks.create(name: "stripPlayServices" + module.version, type: Jar) {
							 | 
						||
| 
								 | 
							
								                    destinationDir = playServiceRootFolder
							 | 
						||
| 
								 | 
							
								                    archiveName = "classes.jar"
							 | 
						||
| 
								 | 
							
								                    from(zipTree(new File(playServiceRootFolder, "classes_orig.jar"))) {
							 | 
						||
| 
								 | 
							
								                        exclude packageToExclude
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								                }.execute()
							 | 
						||
| 
								 | 
							
								                delete file(new File(playServiceRootFolder, "classes_orig.jar"))
							 | 
						||
| 
								 | 
							
								                copy {
							 | 
						||
| 
								 | 
							
								                    from(file(new File(playServiceRootFolder, "classes.jar")))
							 | 
						||
| 
								 | 
							
								                    into(file(tmpDir))
							 | 
						||
| 
								 | 
							
								                    rename { fileName ->
							 | 
						||
| 
								 | 
							
								                        fileName = strippedClassFileName
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                libFile.text = packageExcludesAsString
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    project.tasks.findAll {
							 | 
						||
| 
								 | 
							
								        it.name.startsWith('prepare') && it.name.endsWith('Dependencies')
							 | 
						||
| 
								 | 
							
								    }.each { Task task ->
							 | 
						||
| 
								 | 
							
								        task.dependsOn stripPlayServices
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |