summaryrefslogtreecommitdiff
path: root/common/androidx-test/update-from-gmaven.py
blob: 49c2cd37d722b60c7748075862b41f826f03f950 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#!/usr/bin/python3

# Helper script for updating androidx.test prebuilts from maven
#
# Usage:
#   a. Initialize android environment eg . build/envsetup.sh; lunch <target>
#   b. Update the version numbers in this file
#   c. ./prebuilts/misc/androidx-test/update-from-gmaven.py
#
# The script will then:
#   1. Remove the previous artifacts
#   2. Download the aars and poms into a file structure mirroring their maven
#      path
#   3. Extract the AndroidManifest from the aars into the manifests folder
#   4. Run pom2bp to generate the Android.bp

import os
import subprocess
import sys

annotationVersion="1.0.1-alpha01"
monitorVersion="1.6.0-alpha05"
runnerVersion="1.5.0-alpha04"
rulesVersion="1.4.1-alpha07"
espressoVersion="3.5.0-alpha07"
coreVersion="1.5.0-alpha02"
extJUnitVersion="1.1.4-alpha07"
extTruthVersion="1.5.0-alpha07"
servicesVersion="1.4.2-alpha04"
jankTestHelperVersion="1.0.1"
uiAutomatorVersion="2.2.0"

mavenToBpPatternMap = {
    "androidx.test:" : "androidx.test.",
    "androidx.test.annotation:annotation" : "androidx.test.annotation",
    "androidx.test.ext:": "androidx.test.ext.",
    "androidx.test.espresso:espresso-":"androidx.test.espresso.",
    "androidx.test.janktesthelper:janktesthelper":"androidx.test.janktesthelper",
    "androidx.test.uiautomator:uiautomator":"androidx.test.uiautomator",
    "androidx.test.services:storage":"androidx.test.services.storage",
    "androidx.tracing:tracing":"androidx.tracing_tracing",
    "androidx.concurrent:concurrent-futures":"androidx.concurrent_concurrent-futures",
    "com.google.guava:listenablefuture":"guava-listenablefuture-prebuilt-jar",
    }

extraLibs = {
    "androidx.test.rules" : "android.test.base",
    "androidx.test.uiautomator" : "android.test.base",
    }

def cmd(args):
   print(args)
   out = subprocess.run(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
   if (out.returncode != 0):
      print(out.stderr.decode("utf-8"))
      sys.exit(out.returncode)
   out_string = out.stdout.decode("utf-8")
   print(out_string)
   return out_string

def chdir(path):
   print("cd %s" % path)
   os.chdir(path)

def getAndroidRoot():
   if os.path.isdir(".repo/projects"):
      return os.getcwd()
   elif 'TOP' in os.environ:
      return os.environ['TOP']
   else:
      print("Error: Run from android source root or set TOP envvar")
      sys.exit(-1)

def downloadArtifact(groupId, artifactId, version):
   """Downloads an aar, sources.jar and pom from google maven"""
   groupPath = groupId.replace('.', '/')
   artifactDirPath = os.path.join(groupPath, artifactId, version)
   artifactPath = os.path.join(artifactDirPath, "%s-%s" % (artifactId, version))
   cmd("mkdir -p " + artifactDirPath)
   # download aar
   cmd("wget -O %s.aar https://dl.google.com/dl/android/maven2/%s.aar" % (artifactPath, artifactPath))

   # extract AndroidManifest.xml from aar, into path expected by pom2bp
   manifestDir = getManifestPath("%s:%s" % (groupId,artifactId))
   cmd("mkdir -p " + manifestDir)
   cmd("unzip -o %s.aar AndroidManifest.xml -d %s" % (artifactPath, manifestDir))

   # download pom
   cmd("wget -O %s.pom https://dl.google.com/dl/android/maven2/%s.pom" % (artifactPath, artifactPath))
 
   # download sources.jar
   cmd("wget -O %s-sources.jar https://dl.google.com/dl/android/maven2/%s-sources.jar" % (artifactPath, artifactPath))


def getManifestPath(mavenArtifactName):
  """Get the path to the aar's manifest as generated by pom2bp."""
  manifestPath = mavenArtifactName
  for searchPattern in mavenToBpPatternMap:
    manifestPath = manifestPath.replace(searchPattern, mavenToBpPatternMap[searchPattern])
  return "manifests/%s" % manifestPath

prebuiltDir = os.path.join(getAndroidRoot(), "prebuilts/misc/common/androidx-test")
chdir(prebuiltDir)

cmd("rm -rf androidx/test")
cmd("rm -rf manifests")

downloadArtifact("androidx.test", "annotation", annotationVersion)
downloadArtifact("androidx.test", "core", coreVersion)
downloadArtifact("androidx.test.espresso", "espresso-core", espressoVersion)
downloadArtifact("androidx.test.espresso", "espresso-contrib", espressoVersion)
downloadArtifact("androidx.test.espresso", "espresso-idling-resource", espressoVersion)
downloadArtifact("androidx.test.espresso", "espresso-intents", espressoVersion)
downloadArtifact("androidx.test.espresso", "espresso-idling-resource", espressoVersion)
downloadArtifact("androidx.test.espresso", "espresso-web", espressoVersion)
downloadArtifact("androidx.test", "monitor", monitorVersion)
downloadArtifact("androidx.test", "rules", rulesVersion)
downloadArtifact("androidx.test", "runner", runnerVersion)
downloadArtifact("androidx.test.ext", "junit", extJUnitVersion)
downloadArtifact("androidx.test.ext", "truth", extTruthVersion)
downloadArtifact("androidx.test.janktesthelper", "janktesthelper", jankTestHelperVersion)
downloadArtifact("androidx.test.uiautomator", "uiautomator", uiAutomatorVersion)
downloadArtifact("androidx.test.services", "storage", servicesVersion)

atxRewriteStr = ""
for name in mavenToBpPatternMap:
  atxRewriteStr += "-rewrite %s=%s " % (name, mavenToBpPatternMap[name])
for name in extraLibs:
  atxRewriteStr += "-extra-libs %s=%s " % (name, extraLibs[name])

cmd("pom2bp " + atxRewriteStr +
    # map external maven dependencies to Android module names
    "-rewrite com.google.truth:truth=truth-prebuilt " +
    "-rewrite net.sf.kxml:kxml2=kxml2-android " +
    "-rewrite androidx.lifecycle:lifecycle-common=androidx.lifecycle_lifecycle-common " +
    "-rewrite androidx.annotation:annotation=androidx.annotation_annotation " +
    "-rewrite org.hamcrest:hamcrest-integration=hamcrest " +
    "-rewrite javax.inject:javax.inject=jsr330 " +
    "-rewrite com.google.android.material:material=com.google.android.material_material " +
    "-rewrite androidx.drawerlayout:drawerlayout=androidx.drawerlayout_drawerlayout " +
    "-rewrite androidx.viewpager:viewpager=androidx.viewpager_viewpager " +
    "-rewrite androidx.recyclerview:recyclerview=androidx.recyclerview_recyclerview " +
    "-rewrite androidx.core:core=androidx.core_core " +
    "-rewrite androidx.legacy:legacy-support-core-utils=androidx.legacy_legacy-support-core-utils " +
    "-sdk-version current " +
    "-static-deps " +
    ". > Android.bp")