Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(561)

Unified Diff: build/android/play_services/preprocess.py

Issue 1469913002: Cleanup gms update/preprocess scripts, roll android_tools (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « build/android/play_services/config.json ('k') | build/android/play_services/update.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/android/play_services/preprocess.py
diff --git a/build/android/preprocess_google_play_services.py b/build/android/play_services/preprocess.py
similarity index 52%
rename from build/android/preprocess_google_play_services.py
rename to build/android/play_services/preprocess.py
index eb106a1628bf9f7c10543379a922c3a9b03d2876..e109898fd2104255600625447933991f7e18be5c 100755
--- a/build/android/preprocess_google_play_services.py
+++ b/build/android/play_services/preprocess.py
@@ -29,20 +29,6 @@ look like:
+-- CLIENT_2
+-- etc.
-The json config (see the -c argument) file should provide the following fields:
-
-- lib_version: String. Used when building from the maven repository. It should
- be the package's version (e.g. "7.3.0"). Unused with extracted repositories.
-
-- clients: String array. List of clients to pick. For example, when building
- from the maven repository, it's the artifactId (e.g. "play-services-base") of
- each client. With an extracted repository, it's the name of the
- subdirectories.
-
-- locale_whitelist: String array. Locales that should be allowed in the final
- resources. They are specified the same way they are appended to the `values`
- directory in android resources (e.g. "us-GB", "it", "fil").
-
The output is a directory with the following structure:
OUT_DIR
@@ -65,66 +51,69 @@ Requires the `jar` utility in the path.
import argparse
import glob
import itertools
-import json
import os
-import re
import shutil
import stat
import sys
+import tempfile
+import zipfile
from datetime import datetime
-from devil.utils import cmd_helper
-from pylib import constants
-sys.path.append(
- os.path.join(constants.DIR_SOURCE_ROOT, 'build', 'android', 'gyp'))
-from util import build_utils # pylint: disable=import-error
+sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir))
+from devil.utils import cmd_helper
+from play_services import utils
+from pylib.utils import argparse_utils
M2_PKG_PATH = os.path.join('com', 'google', 'android', 'gms')
-OUTPUT_FORMAT_VERSION = 1
-VERSION_FILE_NAME = 'version_info.json'
-VERSION_NUMBER_PATTERN = re.compile(
- r'<integer name="google_play_services_version">(\d+)<\/integer>')
+
def main():
- parser = argparse.ArgumentParser(description=("Prepares the Google Play "
- "services split client libraries before usage by Chrome's build system. "
- "See the script's documentation for more a detailed help."))
- parser.add_argument('-r',
- '--repository',
- help='The Google Play services repository location',
- required=True,
- metavar='FILE')
- parser.add_argument('-o',
- '--out-dir',
- help='The output directory',
- required=True,
- metavar='FILE')
- parser.add_argument('-c',
- '--config-file',
- help='Config file path',
- required=True,
- metavar='FILE')
+ parser = argparse.ArgumentParser(description=(
+ "Prepares the Google Play services split client libraries before usage "
+ "by Chrome's build system. See the script's documentation for more a "
+ "detailed help."))
+ argparse_utils.CustomHelpAction.EnableFor(parser)
+ required_args = parser.add_argument_group('required named arguments')
+ required_args.add_argument('-r',
+ '--repository',
+ help=('the Google Play services repository '
+ 'location'),
+ required=True,
+ metavar='FILE')
+ required_args.add_argument('-o',
+ '--out-dir',
+ help='the output directory',
+ required=True,
+ metavar='FILE')
+ required_args.add_argument('-c',
+ '--config-file',
+ help='the config file path',
+ required=True,
+ metavar='FILE')
parser.add_argument('-x',
'--is-extracted-repo',
action='store_true',
- default=False,
- help='The provided repository is not made of AAR files.')
+ help='the provided repository is not made of AAR files')
+ parser.add_argument('--config-help',
+ action='custom_help',
+ custom_help_text=utils.ConfigParser.__doc__,
+ help='show the configuration file format help')
args = parser.parse_args()
- ProcessGooglePlayServices(args.repository,
- args.out_dir,
- args.config_file,
- args.is_extracted_repo)
+ return ProcessGooglePlayServices(args.repository,
+ args.out_dir,
+ args.config_file,
+ args.is_extracted_repo)
def ProcessGooglePlayServices(repo, out_dir, config_path, is_extracted_repo):
- with open(config_path, 'r') as json_file:
- config = json.load(json_file)
+ config = utils.ConfigParser(config_path)
- with build_utils.TempDir() as tmp_root:
+ tmp_root = tempfile.mkdtemp()
+ try:
tmp_paths = _SetupTempDir(tmp_root)
if is_extracted_repo:
@@ -134,20 +123,19 @@ def ProcessGooglePlayServices(repo, out_dir, config_path, is_extracted_repo):
_GenerateCombinedJar(tmp_paths)
_ProcessResources(config, tmp_paths)
+ _BuildOutput(config, tmp_paths, out_dir)
+ finally:
+ shutil.rmtree(tmp_root)
- if is_extracted_repo:
- printable_repo = repo
- else:
- printable_repo = 'm2repository - ' + config['lib_version']
- _BuildOutput(config, tmp_paths, out_dir, printable_repo)
+ return 0
def _SetupTempDir(tmp_root):
tmp_paths = {
- 'root': tmp_root,
- 'imported_clients': os.path.join(tmp_root, 'imported_clients'),
- 'extracted_jars': os.path.join(tmp_root, 'jar'),
- 'combined_jar': os.path.join(tmp_root, 'google-play-services.jar'),
+ 'root': tmp_root,
+ 'imported_clients': os.path.join(tmp_root, 'imported_clients'),
+ 'extracted_jars': os.path.join(tmp_root, 'jar'),
+ 'combined_jar': os.path.join(tmp_root, 'google-play-services.jar'),
}
os.mkdir(tmp_paths['imported_clients'])
os.mkdir(tmp_paths['extracted_jars'])
@@ -157,10 +145,10 @@ def _SetupTempDir(tmp_root):
def _SetupOutputDir(out_dir):
out_paths = {
- 'root': out_dir,
- 'res': os.path.join(out_dir, 'res'),
- 'jar': os.path.join(out_dir, 'google-play-services.jar'),
- 'stub': os.path.join(out_dir, 'stub'),
+ 'root': out_dir,
+ 'res': os.path.join(out_dir, 'res'),
+ 'jar': os.path.join(out_dir, 'google-play-services.jar'),
+ 'stub': os.path.join(out_dir, 'stub'),
}
shutil.rmtree(out_paths['jar'], ignore_errors=True)
@@ -178,28 +166,26 @@ def _MakeWritable(dir_path):
def _ImportFromAars(config, tmp_paths, repo):
- for client in config['clients']:
- aar_name = '%s-%s.aar' % (client, config['lib_version'])
+ for client in config.clients:
+ aar_name = '%s-%s.aar' % (client, config.sdk_version)
aar_path = os.path.join(repo, M2_PKG_PATH, client,
- config['lib_version'], aar_name)
+ config.sdk_version, aar_name)
aar_out_path = os.path.join(tmp_paths['imported_clients'], client)
- build_utils.ExtractAll(aar_path, aar_out_path)
+ _ExtractAll(aar_path, aar_out_path)
client_jar_path = os.path.join(aar_out_path, 'classes.jar')
- build_utils.ExtractAll(client_jar_path, tmp_paths['extracted_jars'],
- no_clobber=False)
+ _ExtractAll(client_jar_path, tmp_paths['extracted_jars'])
def _ImportFromExtractedRepo(config, tmp_paths, repo):
# Import the clients
try:
- for client in config['clients']:
+ for client in config.clients:
client_out_dir = os.path.join(tmp_paths['imported_clients'], client)
shutil.copytree(os.path.join(repo, client), client_out_dir)
client_jar_path = os.path.join(client_out_dir, 'classes.jar')
- build_utils.ExtractAll(client_jar_path, tmp_paths['extracted_jars'],
- no_clobber=False)
+ _ExtractAll(client_jar_path, tmp_paths['extracted_jars'])
finally:
_MakeWritable(tmp_paths['imported_clients'])
@@ -212,7 +198,7 @@ def _GenerateCombinedJar(tmp_paths):
def _ProcessResources(config, tmp_paths):
LOCALIZED_VALUES_BASE_NAME = 'values-'
- locale_whitelist = set(config['locale_whitelist'])
+ locale_whitelist = set(config.locale_whitelist)
glob_pattern = os.path.join(tmp_paths['imported_clients'], '*', 'res', '*')
for res_dir in glob.glob(glob_pattern):
@@ -228,45 +214,17 @@ def _ProcessResources(config, tmp_paths):
shutil.rmtree(res_dir)
-def _GetVersionNumber(config, tmp_paths):
- version_file_path = os.path.join(tmp_paths['imported_clients'],
- config['base_client'],
- 'res',
- 'values',
- 'version.xml')
-
- with open(version_file_path, 'r') as version_file:
- version_file_content = version_file.read()
-
- match = VERSION_NUMBER_PATTERN.search(version_file_content)
- if not match:
- raise AttributeError('A value for google_play_services_version was not '
- 'found in ' + version_file_path)
-
- return match.group(1)
-
-
-def _BuildOutput(config, tmp_paths, out_dir, printable_repo):
+def _BuildOutput(config, tmp_paths, out_dir):
generation_date = datetime.utcnow()
- play_services_full_version = _GetVersionNumber(config, tmp_paths)
-
- # Create a version text file to allow quickly checking the version
- gen_info = {
- '@Description@': 'Preprocessed Google Play services clients for chrome',
- 'Generator script': os.path.basename(__file__),
- 'Repository source': printable_repo,
- 'Library version': play_services_full_version,
- 'Directory format version': OUTPUT_FORMAT_VERSION,
- 'Generation Date (UTC)': str(generation_date)
- }
- tmp_version_file_path = os.path.join(tmp_paths['root'], VERSION_FILE_NAME)
- with open(tmp_version_file_path, 'w') as version_file:
- json.dump(gen_info, version_file, indent=2, sort_keys=True)
+ version_xml_path = os.path.join(tmp_paths['imported_clients'],
+ config.version_xml_path)
+ play_services_full_version = utils.GetVersionNumberFromLibraryResources(
+ version_xml_path)
out_paths = _SetupOutputDir(out_dir)
# Copy the resources to the output dir
- for client in config['clients']:
+ for client in config.clients:
res_in_tmp_dir = os.path.join(tmp_paths['imported_clients'], client, 'res')
if os.path.isdir(res_in_tmp_dir) and os.listdir(res_in_tmp_dir):
res_in_final_dir = os.path.join(out_paths['res'], client)
@@ -291,9 +249,12 @@ def _BuildOutput(config, tmp_paths, out_dir, printable_repo):
content_str = 'google_play_services_version: %s\nutc_date: %s\n'
stamp.write(content_str % (play_services_full_version, generation_date))
- shutil.copyfile(tmp_version_file_path,
- os.path.join(out_paths['root'], VERSION_FILE_NAME))
+ config.UpdateVersionNumber(play_services_full_version)
+
+def _ExtractAll(zip_path, out_path):
+ with zipfile.ZipFile(zip_path, 'r') as zip_file:
+ zip_file.extractall(out_path)
if __name__ == '__main__':
sys.exit(main())
« no previous file with comments | « build/android/play_services/config.json ('k') | build/android/play_services/update.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698