Merge all jars in AAR in aar_import, not just classes.jar

See https://github.com/bazelbuild/bazel/issues/1935

--
MOS_MIGRATED_REVID=137202533
diff --git a/tools/android/aar_embedded_jars_extractor.py b/tools/android/aar_embedded_jars_extractor.py
index 099ebac..22326ef 100644
--- a/tools/android/aar_embedded_jars_extractor.py
+++ b/tools/android/aar_embedded_jars_extractor.py
@@ -12,13 +12,14 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-"""A tool for extracting jar files from an AAR and failing gracefully.
+"""A tool for extracting all jar files from an AAR.
 
-If the jar file is present within the archive, it is extracted into the output
-directory. If not, an empty jar is created in the output directory.
+An AAR may contain JARs at /classes.jar and /libs/*.jar. This tool extracts all
+of the jars and creates a param file for singlejar to merge them into one jar.
 """
 
 import os
+import re
 import sys
 import zipfile
 
@@ -26,27 +27,30 @@
 
 FLAGS = gflags.FLAGS
 
-gflags.DEFINE_string("input_archive", None, "Input archive")
-gflags.MarkFlagAsRequired("input_archive")
-gflags.DEFINE_string("filename", None, "Filename of JAR to extract")
-gflags.MarkFlagAsRequired("filename")
-gflags.DEFINE_string("output_dir", None, "Output directory")
+gflags.DEFINE_string("input_aar", None, "Input AAR")
+gflags.MarkFlagAsRequired("input_aar")
+gflags.DEFINE_string(
+    "output_singlejar_param_file", None, "Output parameter file for singlejar")
+gflags.MarkFlagAsRequired("output_singlejar_param_file")
+gflags.DEFINE_string("output_dir", None, "Output directory to extract jars in")
 gflags.MarkFlagAsRequired("output_dir")
 
 
-def ExtractEmbeddedJar(input_archive, filename, output_dir):
-  with zipfile.ZipFile(input_archive, "r") as archive:
-    if filename in archive.namelist():
-      archive.extract(filename, output_dir)
-    else:
-      with zipfile.ZipFile(os.path.join(output_dir, filename), "w") as jar:
-        # All jar files must contain META-INF/MANIFEST.MF.
-        jar.writestr("META-INF/MANIFEST.MF", ("Manifest-Version: 1.0\n"
-                                              "Created-By: Bazel\n"))
+def ExtractEmbeddedJars(aar, singlejar_param_file, output_dir):
+  os.makedirs(output_dir)
+  jar_pattern = re.compile("^(classes|libs/.+)\\.jar$")
+  singlejar_param_file.write("--exclude_build_data\n")
+  for name in aar.namelist():
+    if jar_pattern.match(name):
+      singlejar_param_file.write("--sources\n")
+      singlejar_param_file.write(output_dir + "/" + name + "\n")
+      aar.extract(name, output_dir)
 
 
 def main():
-  ExtractEmbeddedJar(FLAGS.input_archive, FLAGS.filename, FLAGS.output_dir)
+  with zipfile.ZipFile(FLAGS.input_aar, "r") as aar:
+    with open(FLAGS.output_singlejar_param_file, "w") as singlejar_param_file:
+      ExtractEmbeddedJars(aar, singlejar_param_file, FLAGS.output_dir)
 
 if __name__ == "__main__":
   FLAGS(sys.argv)