mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Revert "Support for binary decompression of dynamic patches. (#7777)" (flutter/engine#7853)
This reverts commit c50fe4fb9a7691b223b17132200e676e7d4cbb60.
This commit is contained in:
parent
e5f6463ded
commit
86dac86486
@ -42,7 +42,7 @@ fi
|
||||
|
||||
echo "Checking license count in licenses_flutter..."
|
||||
actualLicenseCount=`tail -n 1 flutter/ci/licenses_golden/licenses_flutter | tr -dc '0-9'`
|
||||
expectedLicenseCount=3 # When changing this number: Update the error message below as well describing all expected license types.
|
||||
expectedLicenseCount=2 # When changing this number: Update the error message below as well describing all expected license types.
|
||||
|
||||
if [ "$actualLicenseCount" -ne "$expectedLicenseCount" ]
|
||||
then
|
||||
|
||||
@ -695,40 +695,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
====================================================================================================
|
||||
|
||||
====================================================================================================
|
||||
LIBRARY: engine
|
||||
ORIGIN: ../../../flutter/shell/platform/android/io/flutter/util/BSDiff.java + ../../../flutter/LICENSE
|
||||
TYPE: LicenseType.bsd
|
||||
FILE: ../../../flutter/shell/platform/android/io/flutter/util/BSDiff.java
|
||||
----------------------------------------------------------------------------------------------------
|
||||
Copyright 2003-2005 Colin Percival. All rights reserved.
|
||||
Copyright 2013 The Flutter Authors. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the following
|
||||
disclaimer in the documentation and/or other materials provided
|
||||
with the distribution.
|
||||
* Neither the name of Google Inc. nor the names of its
|
||||
contributors may be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
====================================================================================================
|
||||
|
||||
====================================================================================================
|
||||
LIBRARY: txt
|
||||
ORIGIN: ../../../flutter/third_party/txt/LICENSE
|
||||
@ -1015,4 +981,4 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
====================================================================================================
|
||||
Total license count: 3
|
||||
Total license count: 2
|
||||
|
||||
@ -149,7 +149,6 @@ java_library("flutter_shell_java") {
|
||||
"io/flutter/plugin/platform/PlatformViewsController.java",
|
||||
"io/flutter/plugin/platform/SingleViewPresentation.java",
|
||||
"io/flutter/plugin/platform/VirtualDisplayController.java",
|
||||
"io/flutter/util/BSDiff.java",
|
||||
"io/flutter/util/PathUtils.java",
|
||||
"io/flutter/util/Preconditions.java",
|
||||
"io/flutter/util/Predicate.java",
|
||||
|
||||
@ -1,92 +0,0 @@
|
||||
// Copyright 2003-2005 Colin Percival. All rights reserved.
|
||||
// Copyright 2013 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
package io.flutter.util;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.zip.GZIPInputStream;
|
||||
|
||||
/**
|
||||
* This is a Java port of algorithm from Flutter framework bsdiff.dart.
|
||||
* Note that this port uses 32-bit ints, which limits data size to 2GB.
|
||||
**/
|
||||
public abstract class BSDiff {
|
||||
public static byte[] bspatch(byte[] olddata, byte[] diffdata) throws IOException {
|
||||
InputStream in = new ByteArrayInputStream(diffdata, 0, diffdata.length);
|
||||
DataInputStream header = new DataInputStream(in);
|
||||
|
||||
byte[] magic = new byte[8];
|
||||
header.read(magic);
|
||||
if (!new String(magic).equals("BZDIFF40")) {
|
||||
throw new IOException("Invalid magic");
|
||||
}
|
||||
|
||||
int ctrllen = (int) header.readLong();
|
||||
int datalen = (int) header.readLong();
|
||||
int newsize = (int) header.readLong();
|
||||
header.close();
|
||||
|
||||
in = new ByteArrayInputStream(diffdata, 0, diffdata.length);
|
||||
in.skip(32);
|
||||
DataInputStream cpf = new DataInputStream(new GZIPInputStream(in));
|
||||
|
||||
in = new ByteArrayInputStream(diffdata, 0, diffdata.length);
|
||||
in.skip(32 + ctrllen);
|
||||
InputStream dpf = new GZIPInputStream(in);
|
||||
|
||||
in = new ByteArrayInputStream(diffdata, 0, diffdata.length);
|
||||
in.skip(32 + ctrllen + datalen);
|
||||
InputStream epf = new GZIPInputStream(in);
|
||||
|
||||
byte[] newdata = new byte[newsize];
|
||||
|
||||
int oldpos = 0;
|
||||
int newpos = 0;
|
||||
|
||||
while (newpos < newsize) {
|
||||
int[] ctrl = new int[3];
|
||||
for (int i = 0; i <= 2; i++) {
|
||||
ctrl[i] = (int) cpf.readLong();
|
||||
}
|
||||
if (newpos + ctrl[0] > newsize) {
|
||||
throw new IOException("Invalid ctrl[0]");
|
||||
}
|
||||
|
||||
read(dpf, newdata, newpos, ctrl[0]);
|
||||
|
||||
for (int i = 0; i < ctrl[0]; i++) {
|
||||
if ((oldpos + i >= 0) && (oldpos + i < olddata.length)) {
|
||||
newdata[newpos + i] += olddata[oldpos + i];
|
||||
}
|
||||
}
|
||||
|
||||
newpos += ctrl[0];
|
||||
oldpos += ctrl[0];
|
||||
|
||||
if (newpos + ctrl[1] > newsize) {
|
||||
throw new IOException("Invalid ctrl[0]");
|
||||
}
|
||||
|
||||
read(epf, newdata, newpos, ctrl[1]);
|
||||
|
||||
newpos += ctrl[1];
|
||||
oldpos += ctrl[2];
|
||||
}
|
||||
|
||||
cpf.close();
|
||||
dpf.close();
|
||||
epf.close();
|
||||
|
||||
return newdata;
|
||||
}
|
||||
|
||||
private static void read(InputStream in, byte[] buf, int off, int len) throws IOException {
|
||||
for (int i, n = 0; n < len; n += i) {
|
||||
if ((i = in.read(buf, off + n, len - n)) < 0) {
|
||||
throw new IOException("Unexpected EOF");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -11,7 +11,6 @@ import android.content.res.AssetManager;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Build;
|
||||
import android.util.Log;
|
||||
import io.flutter.util.BSDiff;
|
||||
import io.flutter.util.PathUtils;
|
||||
import org.json.JSONObject;
|
||||
|
||||
@ -20,7 +19,6 @@ import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.concurrent.CancellationException;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.zip.GZIPInputStream;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipFile;
|
||||
|
||||
@ -31,6 +29,8 @@ class ResourceExtractor {
|
||||
private static final String TAG = "ResourceExtractor";
|
||||
private static final String TIMESTAMP_PREFIX = "res_timestamp-";
|
||||
|
||||
private static final int BUFFER_SIZE = 16 * 1024;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
static long getVersionCode(PackageInfo packageInfo) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||
@ -177,6 +177,7 @@ class ResourceExtractor {
|
||||
private boolean extractAPK(File dataDir) {
|
||||
final AssetManager manager = mContext.getResources().getAssets();
|
||||
|
||||
byte[] buffer = null;
|
||||
for (String asset : mResources) {
|
||||
try {
|
||||
final File output = new File(dataDir, asset);
|
||||
@ -189,10 +190,18 @@ class ResourceExtractor {
|
||||
|
||||
try (InputStream is = manager.open(asset);
|
||||
OutputStream os = new FileOutputStream(output)) {
|
||||
copy(is, os);
|
||||
}
|
||||
if (buffer == null) {
|
||||
buffer = new byte[BUFFER_SIZE];
|
||||
}
|
||||
|
||||
Log.i(TAG, "Extracted baseline resource " + asset);
|
||||
int count = 0;
|
||||
while ((count = is.read(buffer, 0, BUFFER_SIZE)) != -1) {
|
||||
os.write(buffer, 0, count);
|
||||
}
|
||||
|
||||
os.flush();
|
||||
Log.i(TAG, "Extracted baseline resource " + asset);
|
||||
}
|
||||
|
||||
} catch (FileNotFoundException fnfe) {
|
||||
continue;
|
||||
@ -210,8 +219,6 @@ class ResourceExtractor {
|
||||
/// Returns true if successfully unpacked update resources or if there is no update,
|
||||
/// otherwise deletes all resources and returns false.
|
||||
private boolean extractUpdate(File dataDir) {
|
||||
final AssetManager manager = mContext.getResources().getAssets();
|
||||
|
||||
ResourceUpdater resourceUpdater = FlutterMain.getResourceUpdater();
|
||||
if (resourceUpdater == null) {
|
||||
return true;
|
||||
@ -238,15 +245,11 @@ class ResourceExtractor {
|
||||
return false;
|
||||
}
|
||||
|
||||
byte[] buffer = null;
|
||||
for (String asset : mResources) {
|
||||
boolean useDiff = false;
|
||||
ZipEntry entry = zipFile.getEntry(asset);
|
||||
if (entry == null) {
|
||||
useDiff = true;
|
||||
entry = zipFile.getEntry(asset + ".bzdiff40");
|
||||
if (entry == null) {
|
||||
continue;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
final File output = new File(dataDir, asset);
|
||||
@ -257,29 +260,18 @@ class ResourceExtractor {
|
||||
output.getParentFile().mkdirs();
|
||||
}
|
||||
|
||||
try {
|
||||
if (useDiff) {
|
||||
ByteArrayOutputStream diff = new ByteArrayOutputStream();
|
||||
try (InputStream is = zipFile.getInputStream(entry)) {
|
||||
copy(is, diff);
|
||||
}
|
||||
|
||||
ByteArrayOutputStream orig = new ByteArrayOutputStream();
|
||||
try (InputStream is = manager.open(asset)) {
|
||||
copy(is, orig);
|
||||
}
|
||||
|
||||
try (OutputStream os = new FileOutputStream(output)) {
|
||||
os.write(BSDiff.bspatch(orig.toByteArray(), diff.toByteArray()));
|
||||
}
|
||||
|
||||
} else {
|
||||
try (InputStream is = zipFile.getInputStream(entry);
|
||||
OutputStream os = new FileOutputStream(output)) {
|
||||
copy(is, os);
|
||||
}
|
||||
try (InputStream is = zipFile.getInputStream(entry);
|
||||
OutputStream os = new FileOutputStream(output)) {
|
||||
if (buffer == null) {
|
||||
buffer = new byte[BUFFER_SIZE];
|
||||
}
|
||||
|
||||
int count = 0;
|
||||
while ((count = is.read(buffer, 0, BUFFER_SIZE)) != -1) {
|
||||
os.write(buffer, 0, count);
|
||||
}
|
||||
|
||||
os.flush();
|
||||
Log.i(TAG, "Extracted override resource " + asset);
|
||||
|
||||
} catch (FileNotFoundException fnfe) {
|
||||
@ -347,11 +339,4 @@ class ResourceExtractor {
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static void copy(InputStream in, OutputStream out) throws IOException {
|
||||
byte[] buf = new byte[16 * 1024];
|
||||
for (int i; (i = in.read(buf)) >= 0; ) {
|
||||
out.write(buf, 0, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user