blob: 434a58ab1ac4c5a744a14a3615ad90e88813bb27 [file] [log] [blame]
#!/usr/bin/python3
# Helper script for updating androidx.media3 prebuilts from maven
#
# Usage:
# a. Initialize android environment: $ . ./build/envsetup.sh; lunch <target>
# b. Build pom2bp (needed by this script): $ m pom2bp
# * If this fails with 'fatal error: thread exhaustion'
# (and then an *enormous* thread dump), retry the command.
# b. Update the version numbers in this file (and ensure any new modules are added below)
# c. Run the script from the Android source root:
# $ ./prebuilts/misc/common/androidx-media3/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
#
# The visibility restrictions in Android.bp must be manually restored.
#
# Manual verification steps:
# 1. Build the 'leaf' imported modules (i.e. the set that ends up depending
# on *everything* transitively), e.g.
# $ m androidx.media3.media3-exoplayer-dash androidx.media3.media3-exoplayer androidx.media3.media3-session androidx.media3.media3-test-utils androidx.media3.media3-transformer androidx.media3.media3-ui
import os
import subprocess
import sys
media3Version="1.3.0"
mavenToBpPatternMap = {
"androidx.media3:" : "androidx.media3.",
}
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 downloadApk(groupId, artifactId, version):
"""Downloads an apk 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 apk
cmd("wget -O %s.apk https://dl.google.com/dl/android/maven2/%s.apk" % (artifactPath, artifactPath))
# download pom
cmd("wget -O %s.pom https://dl.google.com/dl/android/maven2/%s.pom" % (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-media3")
chdir(prebuiltDir)
cmd("rm -rf androidx/media3")
cmd("rm -rf manifests")
downloadArtifact("androidx.media3", "media3-common", media3Version)
downloadArtifact("androidx.media3", "media3-container", media3Version)
downloadArtifact("androidx.media3", "media3-database", media3Version)
downloadArtifact("androidx.media3", "media3-datasource", media3Version)
downloadArtifact("androidx.media3", "media3-decoder", media3Version)
downloadArtifact("androidx.media3", "media3-effect", media3Version)
downloadArtifact("androidx.media3", "media3-exoplayer", media3Version)
downloadArtifact("androidx.media3", "media3-exoplayer-dash", media3Version)
downloadArtifact("androidx.media3", "media3-extractor", media3Version)
downloadArtifact("androidx.media3", "media3-muxer", media3Version)
downloadArtifact("androidx.media3", "media3-session", media3Version)
downloadArtifact("androidx.media3", "media3-test-utils", media3Version)
downloadArtifact("androidx.media3", "media3-transformer", media3Version)
downloadArtifact("androidx.media3", "media3-ui", media3Version)
atxRewriteStr = ""
for name in mavenToBpPatternMap:
atxRewriteStr += "-rewrite %s=%s " % (name, mavenToBpPatternMap[name])
cmd("pom2bp " + atxRewriteStr +
# map external maven dependencies to Android module names
"-rewrite androidx.annotation:annotation=androidx.annotation_annotation " +
"-rewrite androidx.annotation:annotation-experimental=androidx.annotation_annotation-experimental " +
"-rewrite androidx.collection:collection=androidx.collection_collection " +
"-rewrite androidx.core:core=androidx.core_core " +
"-rewrite androidx.media:media=androidx.media_media " +
"-rewrite androidx.recyclerview:recyclerview=androidx.recyclerview_recyclerview " +
"-rewrite com.google.guava:guava=guava " +
"-sdk-version current " +
"-static-deps " +
"-prepend prepend-license.txt " +
". > Android.bp")