From d4761a19b884d69c684c34ec0e5b74aaba2cfe95 Mon Sep 17 00:00:00 2001 From: Alex Klyubin Date: Tue, 14 Jun 2016 14:18:21 -0700 Subject: [PATCH] Faster and cleaner way to obtain UTF-8 encoded form. Instead of specifying character encoding by name, the faster, cleaner, and safer way is to use StandardCharsets.UTF_8. Bug: 27461702 Change-Id: I897284d3ceeb44a21cc74de09a9b25f6aec8c205 --- .../apksigner/core/internal/jar/ManifestParser.java | 8 ++------ .../apksigner/core/internal/jar/ManifestWriter.java | 3 ++- .../core/internal/zip/CentralDirectoryRecord.java | 8 ++------ .../apksigner/core/internal/zip/LocalFileHeader.java | 3 ++- tools/signapk/src/com/android/signapk/SignApk.java | 3 ++- 5 files changed, 10 insertions(+), 15 deletions(-) diff --git a/tools/apksigner/core/src/com/android/apksigner/core/internal/jar/ManifestParser.java b/tools/apksigner/core/src/com/android/apksigner/core/internal/jar/ManifestParser.java index 67b27a0397..793300c90f 100644 --- a/tools/apksigner/core/src/com/android/apksigner/core/internal/jar/ManifestParser.java +++ b/tools/apksigner/core/src/com/android/apksigner/core/internal/jar/ManifestParser.java @@ -16,7 +16,7 @@ package com.android.apksigner.core.internal.jar; -import java.io.UnsupportedEncodingException; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -220,11 +220,7 @@ public class ManifestParser { if (lineLengthBytes == 0) { return ""; } - try { - return new String(mManifest, startOffset, lineLengthBytes, "UTF-8"); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException("UTF-8 character encoding not supported", e); - } + return new String(mManifest, startOffset, lineLengthBytes, StandardCharsets.UTF_8); } diff --git a/tools/apksigner/core/src/com/android/apksigner/core/internal/jar/ManifestWriter.java b/tools/apksigner/core/src/com/android/apksigner/core/internal/jar/ManifestWriter.java index 2b84d6504b..13b1aaf9ed 100644 --- a/tools/apksigner/core/src/com/android/apksigner/core/internal/jar/ManifestWriter.java +++ b/tools/apksigner/core/src/com/android/apksigner/core/internal/jar/ManifestWriter.java @@ -18,6 +18,7 @@ package com.android.apksigner.core.internal.jar; import java.io.IOException; import java.io.OutputStream; +import java.nio.charset.StandardCharsets; import java.util.Map; import java.util.Set; import java.util.SortedMap; @@ -81,7 +82,7 @@ public abstract class ManifestWriter { } private static void writeLine(OutputStream out, String line) throws IOException { - byte[] lineBytes = line.getBytes("UTF-8"); + byte[] lineBytes = line.getBytes(StandardCharsets.UTF_8); int offset = 0; int remaining = lineBytes.length; boolean firstLine = true; diff --git a/tools/apksigner/core/src/com/android/apksigner/core/internal/zip/CentralDirectoryRecord.java b/tools/apksigner/core/src/com/android/apksigner/core/internal/zip/CentralDirectoryRecord.java index 4d178b8b56..6a5b94c4ef 100644 --- a/tools/apksigner/core/src/com/android/apksigner/core/internal/zip/CentralDirectoryRecord.java +++ b/tools/apksigner/core/src/com/android/apksigner/core/internal/zip/CentralDirectoryRecord.java @@ -18,9 +18,9 @@ package com.android.apksigner.core.internal.zip; import com.android.apksigner.core.zip.ZipFormatException; -import java.io.UnsupportedEncodingException; import java.nio.BufferUnderflowException; import java.nio.ByteBuffer; +import java.nio.charset.StandardCharsets; import java.util.Comparator; /** @@ -168,11 +168,7 @@ public class CentralDirectoryRecord { record.position(originalPosition); } } - try { - return new String(nameBytes, nameBytesOffset, nameLengthBytes, "UTF-8"); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException("UTF-8 character encoding not supported", e); - } + return new String(nameBytes, nameBytesOffset, nameLengthBytes, StandardCharsets.UTF_8); } private static class ByLocalFileHeaderOffsetComparator diff --git a/tools/apksigner/core/src/com/android/apksigner/core/internal/zip/LocalFileHeader.java b/tools/apksigner/core/src/com/android/apksigner/core/internal/zip/LocalFileHeader.java index 96cc981906..99a606b4ae 100644 --- a/tools/apksigner/core/src/com/android/apksigner/core/internal/zip/LocalFileHeader.java +++ b/tools/apksigner/core/src/com/android/apksigner/core/internal/zip/LocalFileHeader.java @@ -20,6 +20,7 @@ import java.io.Closeable; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.ByteOrder; +import java.nio.charset.StandardCharsets; import java.util.zip.DataFormatException; import java.util.zip.Inflater; @@ -93,7 +94,7 @@ public class LocalFileHeader { // exhibited when reading an APK for the purposes of verifying its signatures. String entryName = cdRecord.getName(); - byte[] cdNameBytes = entryName.getBytes("UTF-8"); + byte[] cdNameBytes = entryName.getBytes(StandardCharsets.UTF_8); int headerSizeWithName = HEADER_SIZE_BYTES + cdNameBytes.length; long localFileHeaderOffsetInArchive = cdRecord.getLocalFileHeaderOffset(); long headerEndInArchive = localFileHeaderOffsetInArchive + headerSizeWithName; diff --git a/tools/signapk/src/com/android/signapk/SignApk.java b/tools/signapk/src/com/android/signapk/SignApk.java index 5ba0666baf..f1f340d34a 100644 --- a/tools/signapk/src/com/android/signapk/SignApk.java +++ b/tools/signapk/src/com/android/signapk/SignApk.java @@ -57,6 +57,7 @@ import java.io.OutputStream; import java.lang.reflect.Constructor; import java.nio.ByteBuffer; import java.nio.ByteOrder; +import java.nio.charset.StandardCharsets; import java.security.GeneralSecurityException; import java.security.Key; import java.security.KeyFactory; @@ -717,7 +718,7 @@ class SignApk { // archive comment, so that tools that display the comment // (hopefully) show something sensible. // TODO: anything more useful we can put in this message? - byte[] message = "signed by SignApk".getBytes("UTF-8"); + byte[] message = "signed by SignApk".getBytes(StandardCharsets.UTF_8); temp.write(message); temp.write(0);