More updates to tools/android modules for compatibility with python 3.
RELNOTES: None.
PiperOrigin-RevId: 179577497
diff --git a/tools/android/aar_embedded_jars_extractor.py b/tools/android/aar_embedded_jars_extractor.py
index 393d3f4..2fa85b6 100644
--- a/tools/android/aar_embedded_jars_extractor.py
+++ b/tools/android/aar_embedded_jars_extractor.py
@@ -45,13 +45,14 @@
if not output_dir_orig:
output_dir_orig = output_dir
jar_pattern = re.compile("^(classes|libs/.+)\\.jar$")
- singlejar_param_file.write("--exclude_build_data\n")
+ singlejar_param_file.write(b"--exclude_build_data\n")
for name in aar.namelist():
if jar_pattern.match(name):
- singlejar_param_file.write("--sources\n")
+ singlejar_param_file.write(b"--sources\n")
# output_dir may be a temporary junction, so write the original
# (unshortened) path to the params file
- singlejar_param_file.write(output_dir_orig + "/" + name + "\n")
+ singlejar_param_file.write(
+ (output_dir_orig + "/" + name + "\n").encode("utf-8"))
aar.extract(name, output_dir)
@@ -62,7 +63,7 @@
if not output_dir_orig:
output_dir_orig = output_dir
with zipfile.ZipFile(input_aar, "r") as aar:
- with open(output_singlejar_param_file, "w") as singlejar_param_file:
+ with open(output_singlejar_param_file, "wb") as singlejar_param_file:
ExtractEmbeddedJars(aar, singlejar_param_file, output_dir,
output_dir_orig)
diff --git a/tools/android/aar_embedded_jars_extractor_test.py b/tools/android/aar_embedded_jars_extractor_test.py
index 30f150e..6b63520 100644
--- a/tools/android/aar_embedded_jars_extractor_test.py
+++ b/tools/android/aar_embedded_jars_extractor_test.py
@@ -14,9 +14,9 @@
"""Tests for aar_embedded_jars_extractor."""
+import io
import os
import shutil
-import StringIO
import unittest
import zipfile
@@ -26,6 +26,12 @@
class AarEmbeddedJarsExtractor(unittest.TestCase):
"""Unit tests for aar_embedded_jars_extractor.py."""
+ # Python 2 alias
+ if not hasattr(unittest.TestCase, "assertCountEqual"):
+
+ def assertCountEqual(self, *args):
+ return self.assertItemsEqual(*args)
+
def setUp(self):
os.chdir(os.environ["TEST_TMPDIR"])
@@ -33,47 +39,47 @@
shutil.rmtree("out_dir")
def testNoJars(self):
- aar = zipfile.ZipFile(StringIO.StringIO(), "w")
- param_file = StringIO.StringIO()
+ aar = zipfile.ZipFile(io.BytesIO(), "w")
+ param_file = io.BytesIO()
os.makedirs("out_dir")
aar_embedded_jars_extractor.ExtractEmbeddedJars(aar, param_file, "out_dir")
self.assertEqual([], os.listdir("out_dir"))
param_file.seek(0)
- self.assertEqual("--exclude_build_data\n", param_file.read())
+ self.assertEqual(b"--exclude_build_data\n", param_file.read())
def testClassesJarAndLibsJars(self):
- aar = zipfile.ZipFile(StringIO.StringIO(), "w")
+ aar = zipfile.ZipFile(io.BytesIO(), "w")
aar.writestr("classes.jar", "")
aar.writestr("libs/a.jar", "")
aar.writestr("libs/b.jar", "")
- param_file = StringIO.StringIO()
+ param_file = io.BytesIO()
os.makedirs("out_dir")
aar_embedded_jars_extractor.ExtractEmbeddedJars(aar, param_file, "out_dir")
- self.assertItemsEqual(["classes.jar", "libs"], os.listdir("out_dir"))
- self.assertItemsEqual(["a.jar", "b.jar"], os.listdir("out_dir/libs"))
+ self.assertCountEqual(["classes.jar", "libs"], os.listdir("out_dir"))
+ self.assertCountEqual(["a.jar", "b.jar"], os.listdir("out_dir/libs"))
param_file.seek(0)
self.assertEqual(
- ["--exclude_build_data\n",
- "--sources\n",
- "out_dir/classes.jar\n",
- "--sources\n",
- "out_dir/libs/a.jar\n",
- "--sources\n",
- "out_dir/libs/b.jar\n"],
+ [b"--exclude_build_data\n",
+ b"--sources\n",
+ b"out_dir/classes.jar\n",
+ b"--sources\n",
+ b"out_dir/libs/a.jar\n",
+ b"--sources\n",
+ b"out_dir/libs/b.jar\n"],
param_file.readlines())
def testOnlyClassesJar(self):
- aar = zipfile.ZipFile(StringIO.StringIO(), "w")
+ aar = zipfile.ZipFile(io.BytesIO(), "w")
aar.writestr("classes.jar", "")
- param_file = StringIO.StringIO()
+ param_file = io.BytesIO()
os.makedirs("out_dir")
aar_embedded_jars_extractor.ExtractEmbeddedJars(aar, param_file, "out_dir")
self.assertEqual(["classes.jar"], os.listdir("out_dir"))
param_file.seek(0)
self.assertEqual(
- ["--exclude_build_data\n",
- "--sources\n",
- "out_dir/classes.jar\n"],
+ [b"--exclude_build_data\n",
+ b"--sources\n",
+ b"out_dir/classes.jar\n"],
param_file.readlines())
diff --git a/tools/android/aar_native_libs_zip_creator.py b/tools/android/aar_native_libs_zip_creator.py
index 88b9db3..0348418 100644
--- a/tools/android/aar_native_libs_zip_creator.py
+++ b/tools/android/aar_native_libs_zip_creator.py
@@ -20,6 +20,8 @@
directory structure of /lib/<cpu>/foo.so.
"""
+from __future__ import print_function
+
import os
import re
import sys
@@ -63,8 +65,8 @@
try:
CreateNativeLibsZip(input_aar, cpu, native_libs_zip)
except UnsupportedArchitectureException:
- print(("AAR " + input_aar_path_for_error_msg +
- " missing native libs for requested architecture: " + cpu))
+ print("AAR " + input_aar_path_for_error_msg +
+ " missing native libs for requested architecture: " + cpu)
sys.exit(1)
diff --git a/tools/android/aar_native_libs_zip_creator_test.py b/tools/android/aar_native_libs_zip_creator_test.py
index 0e0210e..3ec71a6 100644
--- a/tools/android/aar_native_libs_zip_creator_test.py
+++ b/tools/android/aar_native_libs_zip_creator_test.py
@@ -14,7 +14,7 @@
"""Tests for aar_native_libs_zip_creator."""
-import StringIO
+import io
import unittest
import zipfile
@@ -25,25 +25,25 @@
"""Unit tests for aar_native_libs_zip_creator.py."""
def testAarWithNoLibs(self):
- aar = zipfile.ZipFile(StringIO.StringIO(), "w")
- outzip = zipfile.ZipFile(StringIO.StringIO(), "w")
+ aar = zipfile.ZipFile(io.BytesIO(), "w")
+ outzip = zipfile.ZipFile(io.BytesIO(), "w")
aar_native_libs_zip_creator.CreateNativeLibsZip(aar, "x86", outzip)
self.assertEquals([], outzip.namelist())
def testAarWithMissingLibs(self):
- aar = zipfile.ZipFile(StringIO.StringIO(), "w")
+ aar = zipfile.ZipFile(io.BytesIO(), "w")
aar.writestr("jni/armeabi/foo.so", "")
- outzip = zipfile.ZipFile(StringIO.StringIO(), "w")
+ outzip = zipfile.ZipFile(io.BytesIO(), "w")
self.assertRaises(
aar_native_libs_zip_creator.UnsupportedArchitectureException,
aar_native_libs_zip_creator.CreateNativeLibsZip,
aar, "x86", outzip)
def testAarWithAllLibs(self):
- aar = zipfile.ZipFile(StringIO.StringIO(), "w")
+ aar = zipfile.ZipFile(io.BytesIO(), "w")
aar.writestr("jni/x86/foo.so", "")
aar.writestr("jni/armeabi/foo.so", "")
- outzip = zipfile.ZipFile(StringIO.StringIO(), "w")
+ outzip = zipfile.ZipFile(io.BytesIO(), "w")
aar_native_libs_zip_creator.CreateNativeLibsZip(aar, "x86", outzip)
self.assertIn("lib/x86/foo.so", outzip.namelist())
self.assertNotIn("lib/armeabi/foo.so", outzip.namelist())
diff --git a/tools/android/aar_resources_extractor.py b/tools/android/aar_resources_extractor.py
index 61f9f4d..5d875fb 100644
--- a/tools/android/aar_resources_extractor.py
+++ b/tools/android/aar_resources_extractor.py
@@ -78,11 +78,11 @@
with junction.TempJunction(os.path.dirname(empty_xml_filename)) as junc:
xmlpath = os.path.join(junc, os.path.basename(empty_xml_filename))
with open(xmlpath, "wb") as empty_xml:
- empty_xml.write("<resources/>")
+ empty_xml.write(b"<resources/>")
else:
os.makedirs(os.path.dirname(empty_xml_filename))
with open(empty_xml_filename, "wb") as empty_xml:
- empty_xml.write("<resources/>")
+ empty_xml.write(b"<resources/>")
def main():
diff --git a/tools/android/aar_resources_extractor_test.py b/tools/android/aar_resources_extractor_test.py
index d5f630b..ba93c32 100644
--- a/tools/android/aar_resources_extractor_test.py
+++ b/tools/android/aar_resources_extractor_test.py
@@ -14,9 +14,9 @@
"""Tests for aar_resources_extractor."""
+import io
import os
import shutil
-import StringIO
import unittest
import zipfile
@@ -30,6 +30,12 @@
class AarResourcesExtractorTest(unittest.TestCase):
"""Unit tests for aar_resources_extractor.py."""
+ # Python 2 alias
+ if not hasattr(unittest.TestCase, "assertCountEqual"):
+
+ def assertCountEqual(self, *args):
+ return self.assertItemsEqual(*args)
+
def setUp(self):
os.chdir(os.environ["TEST_TMPDIR"])
@@ -43,7 +49,7 @@
]
def testNoResources(self):
- aar = zipfile.ZipFile(StringIO.StringIO(), "w")
+ aar = zipfile.ZipFile(io.BytesIO(), "w")
os.makedirs("out_dir")
aar_resources_extractor.ExtractResources(aar, "out_dir")
self.assertEqual([_HostPath("out_dir/res/values/empty.xml")],
@@ -52,7 +58,7 @@
self.assertEqual("<resources/>", empty_xml.read())
def testContainsResources(self):
- aar = zipfile.ZipFile(StringIO.StringIO(), "w")
+ aar = zipfile.ZipFile(io.BytesIO(), "w")
aar.writestr("res/values/values.xml", "some values")
aar.writestr("res/layouts/layout.xml", "some layout")
os.makedirs("out_dir")
@@ -61,7 +67,7 @@
_HostPath("out_dir/res/values/values.xml"),
_HostPath("out_dir/res/layouts/layout.xml")
]
- self.assertItemsEqual(expected_resources, self.DirContents("out_dir"))
+ self.assertCountEqual(expected_resources, self.DirContents("out_dir"))
with open("out_dir/res/values/values.xml", "r") as values_xml:
self.assertEqual("some values", values_xml.read())
with open("out_dir/res/layouts/layout.xml", "r") as layout_xml:
diff --git a/tools/android/build_incremental_dexmanifest.py b/tools/android/build_incremental_dexmanifest.py
index 6c372656..e912d62 100644
--- a/tools/android/build_incremental_dexmanifest.py
+++ b/tools/android/build_incremental_dexmanifest.py
@@ -121,7 +121,7 @@
self.AddDex(input_filename, None, input_filename)
with open(argv[0], "wb") as manifest:
- manifest.write("\n".join(self.manifest_lines))
+ manifest.write(("\n".join(self.manifest_lines)).encode("utf-8"))
def main(argv):
diff --git a/tools/android/incremental_install.py b/tools/android/incremental_install.py
index bad2e29..254db27 100644
--- a/tools/android/incremental_install.py
+++ b/tools/android/incremental_install.py
@@ -221,7 +221,7 @@
"""Push a given string to a given path on the device in parallel."""
local = self._CreateLocalFile()
with open(local, "wb") as f:
- f.write(contents)
+ f.write(contents.encode("utf-8"))
return self.Push(local, remote)
def Pull(self, remote):
@@ -237,7 +237,7 @@
try:
self._Exec(["pull", remote, local])
with open(local, "rb") as f:
- return f.read()
+ return f.read().decode("utf-8")
except (AdbError, IOError):
return None
@@ -339,7 +339,7 @@
def GetAppPackage(stub_datafile):
"""Returns the app package specified in a stub data file."""
with open(stub_datafile, "rb") as f:
- return f.readlines()[1].strip()
+ return f.readlines()[1].decode("utf-8").strip()
def UploadDexes(adb, execroot, app_dir, temp_dir, dexmanifest, full_install):
@@ -605,7 +605,7 @@
f.result()
install_manifest = [
- name + " " + checksum for name, checksum in install_checksums.iteritems()]
+ name + " " + checksum for name, checksum in install_checksums.items()]
adb.PushString("\n".join(install_manifest),
targetpath.join(app_dir, "native",
"native_manifest")).result()
@@ -693,7 +693,7 @@
adb.InstallMultiple(targetpath.join(execroot, apk), app_package)
install_manifest = [
- name + " " + checksum for name, checksum in install_checksums.iteritems()]
+ name + " " + checksum for name, checksum in install_checksums.items()]
adb.PushString("\n".join(install_manifest),
targetpath.join(app_dir, "split_manifest")).result()
@@ -744,7 +744,7 @@
VerifyInstallTimestamp(adb, app_package)
with open(hostpath.join(execroot, dexmanifest), "rb") as f:
- dexmanifest = f.read()
+ dexmanifest = f.read().decode("utf-8")
UploadDexes(adb, execroot, app_dir, temp_dir, dexmanifest, bool(apk))
# TODO(ahumesky): UploadDexes waits for all the dexes to be uploaded, and
# then UploadResources is called. We could instead enqueue everything
@@ -776,16 +776,16 @@
sys.exit("Error: Device unauthorized. Please check the confirmation "
"dialog on your device.")
except MultipleDevicesError as e:
- sys.exit("Error: " + e.message + "\nTry specifying a device serial with "
+ sys.exit("Error: " + str(e) + "\nTry specifying a device serial with "
"\"blaze mobile-install --adb_arg=-s --adb_arg=$ANDROID_SERIAL\"")
except OldSdkException as e:
sys.exit("Error: The device does not support the API level specified in "
"the application's manifest. Check minSdkVersion in "
"AndroidManifest.xml")
except TimestampException as e:
- sys.exit("Error:\n%s" % e.message)
+ sys.exit("Error:\n%s" % str(e))
except AdbError as e:
- sys.exit("Error:\n%s" % e.message)
+ sys.exit("Error:\n%s" % str(e))
finally:
shutil.rmtree(temp_dir, True)
diff --git a/tools/android/incremental_install_test.py b/tools/android/incremental_install_test.py
index 1181a59..5eee83f 100644
--- a/tools/android/incremental_install_test.py
+++ b/tools/android/incremental_install_test.py
@@ -49,7 +49,7 @@
if cmd == "push":
# "/test/adb push local remote"
with open(args[2], "rb") as f:
- content = f.read()
+ content = f.read().decode("utf-8")
self.files[args[3]] = content
elif cmd == "pull":
# "/test/adb pull remote local"
@@ -58,7 +58,7 @@
content = self.files.get(remote)
if content is not None:
with open(local, "wb") as f:
- f.write(content)
+ f.write(content.encode("utf-8"))
else:
returncode = 1
stderr = "remote object '%s' does not exist\n" % remote
@@ -69,7 +69,7 @@
elif cmd == "install-multiple":
if args[3] == "-p":
with open(args[5], "rb") as f:
- content = f.read()
+ content = f.read().decode("utf-8")
self.split_apks.add(content)
else:
self.package_timestamp = self._last_package_timestamp
@@ -133,11 +133,12 @@
# Write the stub datafile which contains the package name of the app.
with open(self._STUB_DATAFILE, "wb") as f:
- f.write("\n".join([self._OLD_APP_PACKGE, self._APP_PACKAGE]))
+ f.write(("\n".join([self._OLD_APP_PACKGE, self._APP_PACKAGE]))
+ .encode("utf-8"))
# Write the local resource apk file.
with open(self._RESOURCE_APK, "wb") as f:
- f.write("resource apk")
+ f.write(b"resource apk")
# Mock out subprocess.Popen to use our mock adb.
self._popen_patch = mock.patch.object(incremental_install, "subprocess")
@@ -157,7 +158,7 @@
def _CreateLocalManifest(self, *lines):
content = "\n".join(lines)
with open(self._DEXMANIFEST, "wb") as f:
- f.write(content)
+ f.write(content.encode("utf-8"))
return content
def _CreateRemoteManifest(self, *lines):
@@ -205,7 +206,7 @@
self._CreateZip()
with open("dex1", "wb") as f:
- f.write("content3")
+ f.write(b"content3")
manifest = self._CreateLocalManifest(
"zip1 zp1 ip1 0",
@@ -224,10 +225,10 @@
def testSplitInstallToPristineDevice(self):
with open("split1", "wb") as f:
- f.write("split_content1")
+ f.write(b"split_content1")
with open("main", "wb") as f:
- f.write("main_Content")
+ f.write(b"main_Content")
self._CallIncrementalInstall(
incremental=False, split_main_apk="main", split_apks=["split1"])
@@ -235,10 +236,10 @@
def testSplitInstallUnchanged(self):
with open("split1", "wb") as f:
- f.write("split_content1")
+ f.write(b"split_content1")
with open("main", "wb") as f:
- f.write("main_Content")
+ f.write(b"main_Content")
self._CallIncrementalInstall(
incremental=False, split_main_apk="main", split_apks=["split1"])
@@ -250,17 +251,17 @@
def testSplitInstallChanges(self):
with open("split1", "wb") as f:
- f.write("split_content1")
+ f.write(b"split_content1")
with open("main", "wb") as f:
- f.write("main_Content")
+ f.write(b"main_Content")
self._CallIncrementalInstall(
incremental=False, split_main_apk="main", split_apks=["split1"])
self.assertEqual(set(["split_content1"]), self._mock_adb.split_apks)
with open("split1", "wb") as f:
- f.write("split_content2")
+ f.write(b"split_content2")
self._mock_adb.split_apks = set()
self._CallIncrementalInstall(
incremental=False, split_main_apk="main", split_apks=["split1"])
@@ -269,7 +270,7 @@
def testMissingNativeManifestWithIncrementalInstall(self):
self._CreateZip()
with open("liba.so", "wb") as f:
- f.write("liba_1")
+ f.write(b"liba_1")
# Upload a library to the device.
native_libs = ["armeabi-v7a:liba.so"]
@@ -285,7 +286,7 @@
def testNonIncrementalInstallOverwritesNativeLibs(self):
self._CreateZip()
with open("liba.so", "wb") as f:
- f.write("liba_1")
+ f.write(b"liba_1")
# Upload a library to the device.
native_libs = ["armeabi-v7a:liba.so"]
@@ -305,7 +306,7 @@
def testNativeAbiCompatibility(self):
self._CreateZip()
with open("liba.so", "wb") as f:
- f.write("liba")
+ f.write(b"liba")
native_libs = ["armeabi:liba.so"]
self._mock_adb.SetAbi("arm64-v8a")
@@ -315,9 +316,9 @@
def testUploadNativeLibs(self):
self._CreateZip()
with open("liba.so", "wb") as f:
- f.write("liba_1")
+ f.write(b"liba_1")
with open("libb.so", "wb") as f:
- f.write("libb_1")
+ f.write(b"libb_1")
native_libs = ["armeabi-v7a:liba.so", "armeabi-v7a:libb.so"]
self._CallIncrementalInstall(incremental=False, native_libs=native_libs)
@@ -326,7 +327,7 @@
# Change a library
with open("libb.so", "wb") as f:
- f.write("libb_2")
+ f.write(b"libb_2")
self._CallIncrementalInstall(incremental=True, native_libs=native_libs)
self.assertEqual("libb_2", self._GetDeviceFile("native/libb.so"))
@@ -520,7 +521,7 @@
self._CreateZip()
with open("dex1", "wb") as f:
- f.write("content3")
+ f.write(b"content3")
self._CreateLocalManifest(
"zip1 zp1 ip1 0",
@@ -536,7 +537,7 @@
self._CreateZip()
with open("dex1", "wb") as f:
- f.write("content3")
+ f.write(b"content3")
self._CreateLocalManifest(
"zip1 zp1 ip1 0",
diff --git a/tools/android/merge_manifests.py b/tools/android/merge_manifests.py
index a12e538..520b032 100644
--- a/tools/android/merge_manifests.py
+++ b/tools/android/merge_manifests.py
@@ -379,7 +379,7 @@
self._MergeTopLevelNamespaces(mergee_dom)
for destination, values in sorted(
- self._NODES_TO_COPY_FROM_MERGEE.iteritems()):
+ self._NODES_TO_COPY_FROM_MERGEE.items()):
for node_to_copy in values:
for node in mergee_dom.getElementsByTagName(node_to_copy):
if self._IsDuplicate(node_to_copy, node):
diff --git a/tools/android/resource_extractor_test.py b/tools/android/resource_extractor_test.py
index de5b6a8..ae7a5a6 100644
--- a/tools/android/resource_extractor_test.py
+++ b/tools/android/resource_extractor_test.py
@@ -14,7 +14,7 @@
"""Tests for resource_extractor."""
-import StringIO
+import io
import unittest
import zipfile
@@ -24,8 +24,14 @@
class ResourceExtractorTest(unittest.TestCase):
"""Unit tests for resource_extractor.py."""
+ # Python 2 alias
+ if not hasattr(unittest.TestCase, "assertCountEqual"):
+
+ def assertCountEqual(self, *args):
+ return self.assertItemsEqual(*args)
+
def testJarWithEverything(self):
- input_jar = zipfile.ZipFile(StringIO.StringIO(), "w")
+ input_jar = zipfile.ZipFile(io.BytesIO(), "w")
for path in (
# Should not be included
@@ -56,17 +62,17 @@
"not_CVS/include",
"META-INF/services/foo"):
input_jar.writestr(path, "")
- output_zip = zipfile.ZipFile(StringIO.StringIO(), "w")
+ output_zip = zipfile.ZipFile(io.BytesIO(), "w")
resource_extractor.ExtractResources(input_jar, output_zip)
- self.assertItemsEqual(("c", "a/b", "bar/a", "a/not_package.html",
+ self.assertCountEqual(("c", "a/b", "bar/a", "a/not_package.html",
"not_CVS/include", "META-INF/services/foo"),
output_zip.namelist())
def testTimestampsAreTheSame(self):
- input_jar = zipfile.ZipFile(StringIO.StringIO(), "w")
+ input_jar = zipfile.ZipFile(io.BytesIO(), "w")
entry_info = zipfile.ZipInfo("a", (1982, 1, 1, 0, 0, 0))
input_jar.writestr(entry_info, "")
- output_zip = zipfile.ZipFile(StringIO.StringIO(), "w")
+ output_zip = zipfile.ZipFile(io.BytesIO(), "w")
resource_extractor.ExtractResources(input_jar, output_zip)
self.assertEqual((1982, 1, 1, 0, 0, 0), output_zip.getinfo("a").date_time)