186fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohetbuildscript { 286fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet repositories { 386fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet maven { url '../../prebuilts/gradle-plugin' } 486fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet maven { url '../../prebuilts/tools/common/m2/repository' } 586fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet maven { url '../../prebuilts/tools/common/m2/internal' } 686fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet } 786fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet dependencies { 8490bf528b45f551b10d7a487f9b81cf732880bbbChris Banes classpath 'com.android.tools.build:gradle:1.3.1' 986fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet } 1086fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet} 1186fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet 12490bf528b45f551b10d7a487f9b81cf732880bbbChris Banesext.supportVersion = '23.0.0' 13490bf528b45f551b10d7a487f9b81cf732880bbbChris Banesext.extraVersion = 17 14020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohetext.supportRepoOut = '' 15f9190ca73c94b1e20ed5e09eff112fa666d74af6Chris Banesext.buildToolsVersion = '22.1.0' 16fa38527bf49f779eeb63a87862f80e83f5f51705Xavier Ducrohetext.buildNumber = Integer.toString(ext.extraVersion) 1786fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet 18020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet/* 19020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet * With the build server you are given two env variables. 20020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet * The OUT_DIR is a temporary directory you can use to put things during the build. 21020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet * The DIST_DIR is where you want to save things from the build. 22020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet * 23020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet * The build server will copy the contents of DIST_DIR to somewhere and make it available. 24020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet */ 25020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohetif (System.env.DIST_DIR != null && System.env.OUT_DIR != null) { 264e04b7ac030f13f9ea24ca45aba3fae4f1eda9b0Xavier Ducrohet buildDir = new File(System.env.OUT_DIR + '/gradle/frameworks/support/build').getCanonicalFile() 274e04b7ac030f13f9ea24ca45aba3fae4f1eda9b0Xavier Ducrohet project.ext.distDir = new File(System.env.DIST_DIR).getCanonicalFile() 28fa38527bf49f779eeb63a87862f80e83f5f51705Xavier Ducrohet 29fa38527bf49f779eeb63a87862f80e83f5f51705Xavier Ducrohet // the build server does not pass the build number so we infer it from the last folder of the dist path. 30fa38527bf49f779eeb63a87862f80e83f5f51705Xavier Ducrohet ext.buildNumber = project.ext.distDir.getName() 31020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet} else { 32020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet buildDir = file('../../out/host/gradle/frameworks/support/build') 33020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet project.ext.distDir = file('../../out/dist') 34020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet} 35020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet 36020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohetext.supportRepoOut = new File(buildDir, 'support_repo') 3786fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet 389220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet// Main task called by the build server. 399220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohettask(createArchive) << { 409220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet} 419220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet 42020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet 439220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet// upload anchor for subprojects to upload their artifacts 449220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet// to the local repo. 459220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohettask(mainUpload) << { 46020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet} 4786fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet 489220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet// repository creation task 499220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohettask createRepository(type: Zip, dependsOn: mainUpload) { 50020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet from project.ext.supportRepoOut 51020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet destinationDir project.ext.distDir 529dc4480c79369fe099cae44094b54cbe25d9da52Xavier Ducrohet into 'm2repository' 53fa38527bf49f779eeb63a87862f80e83f5f51705Xavier Ducrohet baseName = String.format("sdk-repo-linux-m2repository-%s", project.ext.buildNumber) 54020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet} 559220b5b4086df4d28bcc114f7188a801b086d9deXavier DucrohetcreateArchive.dependsOn createRepository 5686fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet 579220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet// prepare repository with older versions 5864fe2322c9c36f54e20c9f6279a70f35854e8152Xavier Ducrohettask unzipRepo(type: Copy) { 5986fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet from "$rootDir/../../prebuilts/maven_repo/android" 60855a92237ee9a2006eab3b79fb0e716f33605f55Xavier Ducrohet into project.ext.supportRepoOut 6186fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet} 6286fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet 6364fe2322c9c36f54e20c9f6279a70f35854e8152Xavier DucrohetunzipRepo.doFirst { 64020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet project.ext.supportRepoOut.deleteDir() 65020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet project.ext.supportRepoOut.mkdirs() 66020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet} 67020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet 6864fe2322c9c36f54e20c9f6279a70f35854e8152Xavier Ducrohet// anchor for prepare repo. This is post unzip + sourceProp. 6964fe2322c9c36f54e20c9f6279a70f35854e8152Xavier Ducrohettask(prepareRepo) << { 7064fe2322c9c36f54e20c9f6279a70f35854e8152Xavier Ducrohet} 7164fe2322c9c36f54e20c9f6279a70f35854e8152Xavier Ducrohet 729220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohetimport com.google.common.io.Files 739220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohetimport com.google.common.base.Charsets 749220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet 759220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohettask(createXml) << { 769220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet def repoArchive = createRepository.archivePath 779220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet def repoArchiveName = createRepository.archiveName 789220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet def size = repoArchive.length() 799220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet def sha1 = getSha1(repoArchive) 809220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet 819220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet def xml = 829220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet"<sdk:sdk-addon xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:sdk=\"http://schemas.android.com/sdk/android/addon/6\">\n\ 839220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet <sdk:extra>\n\ 849220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet <sdk:revision>\n\ 859220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet <sdk:major>${project.ext.extraVersion}</sdk:major>\n\ 869220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet </sdk:revision>\n\ 879220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet <sdk:vendor-display>Android</sdk:vendor-display>\n\ 889220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet <sdk:vendor-id>android</sdk:vendor-id>\n\ 899220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet <sdk:name-display>Local Maven repository for Support Libraries</sdk:name-display>\n\ 909220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet <sdk:path>m2repository</sdk:path>\n\ 919220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet <sdk:archives>\n\ 92c16b62d666044c26e8bd4f70452dfd6c8c49a26fXavier Ducrohet <sdk:archive>\n\ 939220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet <sdk:size>${size}</sdk:size>\n\ 949220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet <sdk:checksum type=\"sha1\">${sha1}</sdk:checksum>\n\ 959220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet <sdk:url>${repoArchiveName}</sdk:url>\n\ 969220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet </sdk:archive>\n\ 979220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet </sdk:archives>\n\ 989220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet </sdk:extra>\n\ 999220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet</sdk:sdk-addon>" 1009220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet 1019220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet Files.write(xml, new File(project.ext.distDir, 'repo-extras.xml'), Charsets.UTF_8) 1029220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet} 1039220b5b4086df4d28bcc114f7188a801b086d9deXavier DucrohetcreateArchive.dependsOn createXml 1049220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet 10564fe2322c9c36f54e20c9f6279a70f35854e8152Xavier Ducrohettask(createSourceProp) << { 10664fe2322c9c36f54e20c9f6279a70f35854e8152Xavier Ducrohet def sourceProp = 10764fe2322c9c36f54e20c9f6279a70f35854e8152Xavier Ducrohet"Extra.VendorDisplay=Android\n\ 10864fe2322c9c36f54e20c9f6279a70f35854e8152Xavier DucrohetExtra.Path=m2repository\n\ 10964fe2322c9c36f54e20c9f6279a70f35854e8152Xavier DucrohetArchive.Arch=ANY\n\ 11064fe2322c9c36f54e20c9f6279a70f35854e8152Xavier DucrohetExtra.NameDisplay=Android Support Repository\n\ 11164fe2322c9c36f54e20c9f6279a70f35854e8152Xavier DucrohetArchive.Os=ANY\n\ 11264fe2322c9c36f54e20c9f6279a70f35854e8152Xavier DucrohetPkg.Revision=${project.ext.extraVersion}.0.0\n\ 11364fe2322c9c36f54e20c9f6279a70f35854e8152Xavier DucrohetExtra.VendorId=android" 11464fe2322c9c36f54e20c9f6279a70f35854e8152Xavier Ducrohet 11564fe2322c9c36f54e20c9f6279a70f35854e8152Xavier Ducrohet Files.write(sourceProp, new File(project.ext.supportRepoOut, 'source.properties'), Charsets.UTF_8) 11664fe2322c9c36f54e20c9f6279a70f35854e8152Xavier Ducrohet} 11764fe2322c9c36f54e20c9f6279a70f35854e8152Xavier DucrohetcreateSourceProp.dependsOn unzipRepo 11864fe2322c9c36f54e20c9f6279a70f35854e8152Xavier DucrohetprepareRepo.dependsOn createSourceProp 11964fe2322c9c36f54e20c9f6279a70f35854e8152Xavier Ducrohet 1209220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet 1219220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohetimport com.google.common.hash.HashCode 1229220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohetimport com.google.common.hash.HashFunction 1239220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohetimport com.google.common.hash.Hashing 12496f1e91a591cea8e671136391fa2eb71c7c6ac40Chris Banesimport java.nio.charset.Charset 1259220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet 1269220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohetdef getSha1(File inputFile) { 1279220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet HashFunction hashFunction = Hashing.sha1() 12896f1e91a591cea8e671136391fa2eb71c7c6ac40Chris Banes HashCode hashCode = hashFunction.hashString(inputFile.getAbsolutePath(), Charset.forName("UTF-8")) 1299220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet return hashCode.toString() 1309220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet} 1319220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet 13286fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohetsubprojects { 13386fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet // Change buildDir first so that all plugins pick up the new value. 134616b95d231e53cde9c6db0fd98908339a35ca322Xavier Ducrohet project.buildDir = project.file("$project.parent.buildDir/../$project.name/build") 13586fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet 13686fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet apply plugin: 'maven' 13786fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet 138855a92237ee9a2006eab3b79fb0e716f33605f55Xavier Ducrohet version = rootProject.ext.supportVersion 13986fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet group = 'com.android.support' 14086fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet 141be7a54a6e02c9230a08e63f1c964907d129b6a10Yigit Boyar repositories { 142be7a54a6e02c9230a08e63f1c964907d129b6a10Yigit Boyar maven { url "${project.parent.projectDir}/../../prebuilts/tools/common/m2/repository" } 143be7a54a6e02c9230a08e63f1c964907d129b6a10Yigit Boyar maven { url "${project.parent.projectDir}/../../prebuilts/tools/common/m2/internal" } 144be7a54a6e02c9230a08e63f1c964907d129b6a10Yigit Boyar maven { url "${project.parent.projectDir}/../../prebuilts/maven_repo/android" } 145be7a54a6e02c9230a08e63f1c964907d129b6a10Yigit Boyar } 146be7a54a6e02c9230a08e63f1c964907d129b6a10Yigit Boyar 14786fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet task release(type: Upload) { 14886fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet configuration = configurations.archives 14986fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet repositories { 15086fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet mavenDeployer { 151855a92237ee9a2006eab3b79fb0e716f33605f55Xavier Ducrohet repository(url: uri("$rootProject.ext.supportRepoOut")) 15286fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet } 15386fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet } 15486fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet } 155020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet 156e4cf5a90e0b6c66a075504ffe04f7eafb34c525dXavier Ducrohet def deployer = release.repositories.mavenDeployer 157e4cf5a90e0b6c66a075504ffe04f7eafb34c525dXavier Ducrohet deployer.pom*.whenConfigured { pom -> 158e4cf5a90e0b6c66a075504ffe04f7eafb34c525dXavier Ducrohet pom.dependencies.findAll {dep -> dep.groupId == 'com.android.support' && dep.artifactId != 'support-annotations' }*.type = 'aar' 159e4cf5a90e0b6c66a075504ffe04f7eafb34c525dXavier Ducrohet } 160e4cf5a90e0b6c66a075504ffe04f7eafb34c525dXavier Ducrohet 1619220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet // before the upload, make sure the repo is ready. 162020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet release.dependsOn rootProject.tasks.prepareRepo 1639220b5b4086df4d28bcc114f7188a801b086d9deXavier Ducrohet // make the mainupload depend on this one. 164020e4328a1e91d9136a498fa10f2cc6553ade5d3Xavier Ducrohet mainUpload.dependsOn release 16584faec58c451a6e317eb8c1621493fc530e5dbccJeff Davidson 16684faec58c451a6e317eb8c1621493fc530e5dbccJeff Davidson project.plugins.whenPluginAdded { plugin -> 16784faec58c451a6e317eb8c1621493fc530e5dbccJeff Davidson if ("com.android.build.gradle.LibraryPlugin".equals(plugin.class.name)) { 16884faec58c451a6e317eb8c1621493fc530e5dbccJeff Davidson project.android.buildToolsVersion = rootProject.buildToolsVersion 16984faec58c451a6e317eb8c1621493fc530e5dbccJeff Davidson } 17084faec58c451a6e317eb8c1621493fc530e5dbccJeff Davidson } 17186fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet} 17286fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet 17386fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier DucrohetFileCollection getAndroidPrebuilt(String apiLevel) { 17486fb8efa9f2eb814c3ccb58e80bbf171b9514760Xavier Ducrohet files("$rootDir/../../prebuilts/sdk/$apiLevel/android.jar") 17547c59fbbcf7ddf4c2594fc9f2424b3c775211ca0Tor Norbye} 176