1*847dbab7SAndroid Build Coastguard Worker#!/usr/bin/python3 2*847dbab7SAndroid Build Coastguard Worker 3*847dbab7SAndroid Build Coastguard Worker# Helper script for updating androidx.test prebuilts from maven 4*847dbab7SAndroid Build Coastguard Worker# 5*847dbab7SAndroid Build Coastguard Worker# Usage: 6*847dbab7SAndroid Build Coastguard Worker# a. Initialize android environment eg . build/envsetup.sh; lunch <target> 7*847dbab7SAndroid Build Coastguard Worker# b. Update the version numbers in this file 8*847dbab7SAndroid Build Coastguard Worker# c. ./prebuilts/misc/androidx-test/update-from-gmaven.py 9*847dbab7SAndroid Build Coastguard Worker# 10*847dbab7SAndroid Build Coastguard Worker# The script will then: 11*847dbab7SAndroid Build Coastguard Worker# 1. Remove the previous artifacts 12*847dbab7SAndroid Build Coastguard Worker# 2. Download the aars and poms into a file structure mirroring their maven 13*847dbab7SAndroid Build Coastguard Worker# path 14*847dbab7SAndroid Build Coastguard Worker# 3. Extract the AndroidManifest from the aars into the manifests folder 15*847dbab7SAndroid Build Coastguard Worker# 4. Run pom2bp to generate the Android.bp 16*847dbab7SAndroid Build Coastguard Worker 17*847dbab7SAndroid Build Coastguard Workerimport os 18*847dbab7SAndroid Build Coastguard Workerimport subprocess 19*847dbab7SAndroid Build Coastguard Workerimport sys 20*847dbab7SAndroid Build Coastguard Worker 21*847dbab7SAndroid Build Coastguard WorkermonitorVersion="1.7.0" 22*847dbab7SAndroid Build Coastguard WorkerrunnerVersion="1.6.0" 23*847dbab7SAndroid Build Coastguard WorkerrulesVersion="1.6.0" 24*847dbab7SAndroid Build Coastguard WorkerespressoVersion="3.6.0" 25*847dbab7SAndroid Build Coastguard WorkercoreVersion="1.6.0" 26*847dbab7SAndroid Build Coastguard WorkerextJUnitVersion="1.2.0" 27*847dbab7SAndroid Build Coastguard WorkerextTruthVersion="1.6.0" 28*847dbab7SAndroid Build Coastguard WorkerorchestratorVersion="1.5.0" 29*847dbab7SAndroid Build Coastguard WorkerservicesVersion="1.5.0" 30*847dbab7SAndroid Build Coastguard WorkerjankTestHelperVersion="1.0.1" 31*847dbab7SAndroid Build Coastguard Worker 32*847dbab7SAndroid Build Coastguard WorkermavenToBpPatternMap = { 33*847dbab7SAndroid Build Coastguard Worker "androidx.test:" : "androidx.test.", 34*847dbab7SAndroid Build Coastguard Worker "androidx.test.ext:": "androidx.test.ext.", 35*847dbab7SAndroid Build Coastguard Worker "androidx.test.espresso:espresso-":"androidx.test.espresso.", 36*847dbab7SAndroid Build Coastguard Worker "androidx.test.janktesthelper:janktesthelper":"androidx.test.janktesthelper", 37*847dbab7SAndroid Build Coastguard Worker "androidx.test.services:storage":"androidx.test.services.storage", 38*847dbab7SAndroid Build Coastguard Worker "androidx.test.services:test-services":"androidx.test.services.test-services", 39*847dbab7SAndroid Build Coastguard Worker "androidx.tracing:tracing":"androidx.tracing_tracing", 40*847dbab7SAndroid Build Coastguard Worker "androidx.concurrent:concurrent-futures":"androidx.concurrent_concurrent-futures", 41*847dbab7SAndroid Build Coastguard Worker "com.google.guava:listenablefuture":"guava-listenablefuture-prebuilt-jar", 42*847dbab7SAndroid Build Coastguard Worker } 43*847dbab7SAndroid Build Coastguard Worker 44*847dbab7SAndroid Build Coastguard WorkerextraLibs = { 45*847dbab7SAndroid Build Coastguard Worker "androidx.test.rules" : "android.test.base", 46*847dbab7SAndroid Build Coastguard Worker } 47*847dbab7SAndroid Build Coastguard Worker 48*847dbab7SAndroid Build Coastguard WorkerprependLicenseTemplate = """ 49*847dbab7SAndroid Build Coastguard Workerpackage {{ 50*847dbab7SAndroid Build Coastguard Worker default_applicable_licenses: ["Android-Apache-2.0"], 51*847dbab7SAndroid Build Coastguard Worker}} 52*847dbab7SAndroid Build Coastguard Worker 53*847dbab7SAndroid Build Coastguard Workerfilegroup {{ 54*847dbab7SAndroid Build Coastguard Worker name: "test-services.apk", 55*847dbab7SAndroid Build Coastguard Worker srcs: 56*847dbab7SAndroid Build Coastguard Worker ["androidx/test/services/test-services/{servicesVersion}/test-services-{servicesVersion}.apk",], 57*847dbab7SAndroid Build Coastguard Worker path: "androidx/test/services/test-services/{servicesVersion}", 58*847dbab7SAndroid Build Coastguard Worker visibility: [ 59*847dbab7SAndroid Build Coastguard Worker "//tools/tradefederation/core:__pkg__", 60*847dbab7SAndroid Build Coastguard Worker ], 61*847dbab7SAndroid Build Coastguard Worker}} 62*847dbab7SAndroid Build Coastguard Worker""" 63*847dbab7SAndroid Build Coastguard Worker 64*847dbab7SAndroid Build Coastguard Workerdef cmd(args): 65*847dbab7SAndroid Build Coastguard Worker print(args) 66*847dbab7SAndroid Build Coastguard Worker out = subprocess.run(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) 67*847dbab7SAndroid Build Coastguard Worker if (out.returncode != 0): 68*847dbab7SAndroid Build Coastguard Worker print(out.stderr.decode("utf-8")) 69*847dbab7SAndroid Build Coastguard Worker sys.exit(out.returncode) 70*847dbab7SAndroid Build Coastguard Worker out_string = out.stdout.decode("utf-8") 71*847dbab7SAndroid Build Coastguard Worker print(out_string) 72*847dbab7SAndroid Build Coastguard Worker return out_string 73*847dbab7SAndroid Build Coastguard Worker 74*847dbab7SAndroid Build Coastguard Workerdef chdir(path): 75*847dbab7SAndroid Build Coastguard Worker print("cd %s" % path) 76*847dbab7SAndroid Build Coastguard Worker os.chdir(path) 77*847dbab7SAndroid Build Coastguard Worker 78*847dbab7SAndroid Build Coastguard Workerdef getAndroidRoot(): 79*847dbab7SAndroid Build Coastguard Worker if os.path.isdir(".repo/projects"): 80*847dbab7SAndroid Build Coastguard Worker return os.getcwd() 81*847dbab7SAndroid Build Coastguard Worker elif 'TOP' in os.environ: 82*847dbab7SAndroid Build Coastguard Worker return os.environ['TOP'] 83*847dbab7SAndroid Build Coastguard Worker else: 84*847dbab7SAndroid Build Coastguard Worker print("Error: Run from android source root or set TOP envvar") 85*847dbab7SAndroid Build Coastguard Worker sys.exit(-1) 86*847dbab7SAndroid Build Coastguard Worker 87*847dbab7SAndroid Build Coastguard Workerdef downloadArtifact(groupId, artifactId, version): 88*847dbab7SAndroid Build Coastguard Worker """Downloads an aar, sources.jar and pom from google maven""" 89*847dbab7SAndroid Build Coastguard Worker groupPath = groupId.replace('.', '/') 90*847dbab7SAndroid Build Coastguard Worker artifactDirPath = os.path.join(groupPath, artifactId, version) 91*847dbab7SAndroid Build Coastguard Worker artifactPath = os.path.join(artifactDirPath, "%s-%s" % (artifactId, version)) 92*847dbab7SAndroid Build Coastguard Worker cmd("mkdir -p " + artifactDirPath) 93*847dbab7SAndroid Build Coastguard Worker # download aar 94*847dbab7SAndroid Build Coastguard Worker cmd("wget -O %s.aar https://dl.google.com/dl/android/maven2/%s.aar" % (artifactPath, artifactPath)) 95*847dbab7SAndroid Build Coastguard Worker 96*847dbab7SAndroid Build Coastguard Worker # extract AndroidManifest.xml from aar, into path expected by pom2bp 97*847dbab7SAndroid Build Coastguard Worker manifestDir = getManifestPath("%s:%s" % (groupId,artifactId)) 98*847dbab7SAndroid Build Coastguard Worker cmd("mkdir -p " + manifestDir) 99*847dbab7SAndroid Build Coastguard Worker cmd("unzip -o %s.aar AndroidManifest.xml -d %s" % (artifactPath, manifestDir)) 100*847dbab7SAndroid Build Coastguard Worker 101*847dbab7SAndroid Build Coastguard Worker # download pom 102*847dbab7SAndroid Build Coastguard Worker cmd("wget -O %s.pom https://dl.google.com/dl/android/maven2/%s.pom" % (artifactPath, artifactPath)) 103*847dbab7SAndroid Build Coastguard Worker 104*847dbab7SAndroid Build Coastguard Worker # download sources.jar 105*847dbab7SAndroid Build Coastguard Worker cmd("wget -O %s-sources.jar https://dl.google.com/dl/android/maven2/%s-sources.jar" % (artifactPath, artifactPath)) 106*847dbab7SAndroid Build Coastguard Worker 107*847dbab7SAndroid Build Coastguard Workerdef downloadApk(groupId, artifactId, version): 108*847dbab7SAndroid Build Coastguard Worker """Downloads an apk from google maven""" 109*847dbab7SAndroid Build Coastguard Worker groupPath = groupId.replace('.', '/') 110*847dbab7SAndroid Build Coastguard Worker artifactDirPath = os.path.join(groupPath, artifactId, version) 111*847dbab7SAndroid Build Coastguard Worker artifactPath = os.path.join(artifactDirPath, "%s-%s" % (artifactId, version)) 112*847dbab7SAndroid Build Coastguard Worker cmd("mkdir -p " + artifactDirPath) 113*847dbab7SAndroid Build Coastguard Worker # download apk 114*847dbab7SAndroid Build Coastguard Worker cmd("wget -O %s.apk https://dl.google.com/dl/android/maven2/%s.apk" % (artifactPath, artifactPath)) 115*847dbab7SAndroid Build Coastguard Worker # download pom 116*847dbab7SAndroid Build Coastguard Worker cmd("wget -O %s.pom https://dl.google.com/dl/android/maven2/%s.pom" % (artifactPath, artifactPath)) 117*847dbab7SAndroid Build Coastguard Worker 118*847dbab7SAndroid Build Coastguard Workerdef getManifestPath(mavenArtifactName): 119*847dbab7SAndroid Build Coastguard Worker """Get the path to the aar's manifest as generated by pom2bp.""" 120*847dbab7SAndroid Build Coastguard Worker manifestPath = mavenArtifactName 121*847dbab7SAndroid Build Coastguard Worker for searchPattern in mavenToBpPatternMap: 122*847dbab7SAndroid Build Coastguard Worker manifestPath = manifestPath.replace(searchPattern, mavenToBpPatternMap[searchPattern]) 123*847dbab7SAndroid Build Coastguard Worker return "manifests/%s" % manifestPath 124*847dbab7SAndroid Build Coastguard Worker 125*847dbab7SAndroid Build Coastguard Workerdef updatePrependLicense(): 126*847dbab7SAndroid Build Coastguard Worker with open("prepend-license.txt", "w") as f: 127*847dbab7SAndroid Build Coastguard Worker f.write(prependLicenseTemplate.format(servicesVersion = servicesVersion)) 128*847dbab7SAndroid Build Coastguard Worker 129*847dbab7SAndroid Build Coastguard Worker 130*847dbab7SAndroid Build Coastguard WorkerprebuiltDir = os.path.join(getAndroidRoot(), "prebuilts/misc/common/androidx-test") 131*847dbab7SAndroid Build Coastguard Workerchdir(prebuiltDir) 132*847dbab7SAndroid Build Coastguard Worker 133*847dbab7SAndroid Build Coastguard Workercmd("rm -rf androidx/test") 134*847dbab7SAndroid Build Coastguard Workercmd("rm -rf manifests") 135*847dbab7SAndroid Build Coastguard Worker 136*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test", "core", coreVersion) 137*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test.espresso", "espresso-accessibility", espressoVersion) 138*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test.espresso", "espresso-core", espressoVersion) 139*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test.espresso", "espresso-contrib", espressoVersion) 140*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test.espresso", "espresso-idling-resource", espressoVersion) 141*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test.espresso", "espresso-intents", espressoVersion) 142*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test.espresso", "espresso-idling-resource", espressoVersion) 143*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test.espresso", "espresso-web", espressoVersion) 144*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test", "monitor", monitorVersion) 145*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test", "rules", rulesVersion) 146*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test", "runner", runnerVersion) 147*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test.ext", "junit", extJUnitVersion) 148*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test.ext", "truth", extTruthVersion) 149*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test.janktesthelper", "janktesthelper", jankTestHelperVersion) 150*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test.services", "storage", servicesVersion) 151*847dbab7SAndroid Build Coastguard WorkerdownloadApk("androidx.test.services", "test-services", servicesVersion) 152*847dbab7SAndroid Build Coastguard WorkerdownloadApk("androidx.test", "orchestrator", orchestratorVersion) 153*847dbab7SAndroid Build Coastguard Worker 154*847dbab7SAndroid Build Coastguard Worker 155*847dbab7SAndroid Build Coastguard WorkeratxRewriteStr = "" 156*847dbab7SAndroid Build Coastguard Workerfor name in mavenToBpPatternMap: 157*847dbab7SAndroid Build Coastguard Worker atxRewriteStr += "-rewrite %s=%s " % (name, mavenToBpPatternMap[name]) 158*847dbab7SAndroid Build Coastguard Workerfor name in extraLibs: 159*847dbab7SAndroid Build Coastguard Worker atxRewriteStr += "-extra-libs %s=%s " % (name, extraLibs[name]) 160*847dbab7SAndroid Build Coastguard Worker 161*847dbab7SAndroid Build Coastguard WorkerupdatePrependLicense() 162*847dbab7SAndroid Build Coastguard Worker 163*847dbab7SAndroid Build Coastguard Workercmd("pom2bp " + atxRewriteStr + 164*847dbab7SAndroid Build Coastguard Worker # map external maven dependencies to Android module names 165*847dbab7SAndroid Build Coastguard Worker "-rewrite com.google.truth:truth=truth " + 166*847dbab7SAndroid Build Coastguard Worker "-rewrite net.sf.kxml:kxml2=kxml2-android " + 167*847dbab7SAndroid Build Coastguard Worker "-rewrite androidx.lifecycle:lifecycle-common=androidx.lifecycle_lifecycle-common " + 168*847dbab7SAndroid Build Coastguard Worker "-rewrite androidx.annotation:annotation=androidx.annotation_annotation " + 169*847dbab7SAndroid Build Coastguard Worker "-rewrite org.hamcrest:hamcrest-integration=hamcrest " + 170*847dbab7SAndroid Build Coastguard Worker "-rewrite org.hamcrest:hamcrest-core=hamcrest " + 171*847dbab7SAndroid Build Coastguard Worker "-rewrite javax.inject:javax.inject=jsr330 " + 172*847dbab7SAndroid Build Coastguard Worker "-rewrite com.google.android.material:material=com.google.android.material_material " + 173*847dbab7SAndroid Build Coastguard Worker "-rewrite androidx.drawerlayout:drawerlayout=androidx.drawerlayout_drawerlayout " + 174*847dbab7SAndroid Build Coastguard Worker "-rewrite androidx.viewpager:viewpager=androidx.viewpager_viewpager " + 175*847dbab7SAndroid Build Coastguard Worker "-rewrite androidx.recyclerview:recyclerview=androidx.recyclerview_recyclerview " + 176*847dbab7SAndroid Build Coastguard Worker "-rewrite androidx.core:core=androidx.core_core " + 177*847dbab7SAndroid Build Coastguard Worker "-rewrite androidx.legacy:legacy-support-core-utils=androidx.legacy_legacy-support-core-utils " + 178*847dbab7SAndroid Build Coastguard Worker "-rewrite androidx.appcompat:appcompat=androidx.appcompat_appcompat " + 179*847dbab7SAndroid Build Coastguard Worker "-sdk-version current " + 180*847dbab7SAndroid Build Coastguard Worker "-static-deps " + 181*847dbab7SAndroid Build Coastguard Worker "-prepend prepend-license.txt " + 182*847dbab7SAndroid Build Coastguard Worker ". > Android.bp") 183*847dbab7SAndroid Build Coastguard Worker 184