Reland "Use local cache for each opensource app and ensure it is added to cloud"

This reverts commit 928fdf29c46f452fc097e4f44ae7bb4087dfffe1.

There are some dependencies not located in the gradle cache that needs to be
downloaded.

Bug: 141081520
Change-Id: I75bb8c3c3de4c03f5a55a5c59497cee3cbf9a82f
diff --git a/third_party/opensource_apps.tar.gz.sha1 b/third_party/opensource_apps.tar.gz.sha1
index a6f2eb2..83018a3 100644
--- a/third_party/opensource_apps.tar.gz.sha1
+++ b/third_party/opensource_apps.tar.gz.sha1
@@ -1 +1 @@
-792d03aef34debed948aa021de6f77e3dd07b267
\ No newline at end of file
+3d286653a8af8fd9d6eacbe9f5c7330fff40c93a
\ No newline at end of file
diff --git a/tools/run_on_as_app.py b/tools/run_on_as_app.py
index 7708328..e4ab909 100755
--- a/tools/run_on_as_app.py
+++ b/tools/run_on_as_app.py
@@ -26,6 +26,8 @@
 SHRINKERS = ['r8', 'r8-full', 'r8-nolib', 'r8-nolib-full', 'pg']
 WORKING_DIR = os.path.join(utils.BUILD, 'opensource_apps')
 
+GRADLE_USER_HOME = '.gradle_user_home'
+
 if ('R8_BENCHMARK_DIR' in os.environ
     and os.path.isdir(os.environ['R8_BENCHMARK_DIR'])):
   WORKING_DIR = os.environ['R8_BENCHMARK_DIR']
@@ -48,7 +50,7 @@
       'archives_base_name': module,
       'build_dir': 'build',
       'compile_sdk': None,
-      'dir': '.',
+      'dir': None,
       'flavor': None,
       'has_instrumentation_tests': False,
       'main_dex_rules': None,
@@ -590,7 +592,9 @@
 
   result['status'] = 'success'
 
-  app_checkout_dir = os.path.join(repo_checkout_dir, app.dir)
+  app_checkout_dir = (os.path.join(repo_checkout_dir, app.dir)
+                      if app.dir else repo_checkout_dir)
+
   result_per_shrinker = BuildAppWithSelectedShrinkers(
       app, repo, options, app_checkout_dir, temp_dir)
   for shrinker, shrinker_result in result_per_shrinker.iteritems():
@@ -686,13 +690,14 @@
   if not options.disable_assertions:
     env_vars['JAVA_OPTS'] = '-ea:com.android.tools.r8...'
 
-  releaseTarget = app.releaseTarget
-  if not releaseTarget:
-    releaseTarget = app.module.replace('/', ':') + ':' + 'assemble' + (
+  release_target = app.releaseTarget
+  if not release_target:
+    release_target = app.module.replace('/', ':') + ':' + 'assemble' + (
         app.flavor.capitalize() if app.flavor else '') + 'Release'
 
   # Build using gradle.
-  args = [releaseTarget,
+  args = [release_target,
+          '-g=' + os.path.join(checkout_dir, GRADLE_USER_HOME),
           '-Pandroid.enableR8=' + str(IsR8(shrinker)).lower(),
           '-Pandroid.enableR8.fullMode=' + str(IsR8FullMode(shrinker)).lower()]
 
@@ -1135,10 +1140,6 @@
                     help='Run without building ToT first (only when using ToT)',
                     default=False,
                     action='store_true')
-  result.add_option('--quiet',
-                    help='Disable verbose logging',
-                    default=False,
-                    action='store_true')
   result.add_option('--no-logging', '--no_logging',
                     help='Disable logging except for errors',
                     default=False,
@@ -1148,6 +1149,10 @@
                     help='Print the sizes of individual dex segments as ' +
                          '\'<BENCHMARKNAME>-<APP>-<segment>(CodeSize): '
                          '<bytes>\'')
+  result.add_option('--quiet',
+                    help='Disable verbose logging',
+                    default=False,
+                    action='store_true')
   result.add_option('--r8-compilation-steps', '--r8_compilation_steps',
                     help='Number of times R8 should be run on each app',
                     default=2,
diff --git a/tools/run_on_as_app_x20_packager.py b/tools/run_on_as_app_x20_packager.py
index 80d5ca2..2d8a83b 100755
--- a/tools/run_on_as_app_x20_packager.py
+++ b/tools/run_on_as_app_x20_packager.py
@@ -33,6 +33,17 @@
     shutil.rmtree(utils.OPENSOURCE_APPS_FOLDER)
   for repo in run_on_as_app.APP_REPOSITORIES:
     repo_dir = os.path.join(working_dir, repo.name)
+    # Ensure there is a local gradle user home in the folder
+    for app in repo.apps:
+      app_checkout_dir = (os.path.join(repo_dir, app.dir)
+                          if app.dir else repo_dir)
+      gradle_user_home = os.path.join(
+          app_checkout_dir, run_on_as_app.GRADLE_USER_HOME)
+      if not os.path.exists(gradle_user_home):
+        print 'Could not find the local gradle cache at %s. You should run ' \
+              'run_on_as_app for app %s at least once.' \
+              % (gradle_user_home, repo.name)
+        sys.exit(1)
     dst = os.path.join(utils.OPENSOURCE_APPS_FOLDER, repo.name)
     shutil.copytree(repo_dir, dst)