continent method for framework

This commit is contained in:
REAndroid 2023-04-29 19:18:08 +02:00
parent 17a9e18fd2
commit f1f6300e64
2 changed files with 273 additions and 264 deletions

View File

@ -1,4 +1,4 @@
/* /*
* Copyright (C) 2022 github.com/REAndroid * Copyright (C) 2022 github.com/REAndroid
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
@ -13,31 +13,32 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package com.reandroid.apk; package com.reandroid.apk;
import com.reandroid.archive.APKArchive; import com.reandroid.archive.APKArchive;
import com.reandroid.archive.ByteInputSource; import com.reandroid.archive.ByteInputSource;
import com.reandroid.archive.InputSource; import com.reandroid.archive.InputSource;
import com.reandroid.archive.InputSourceUtil; import com.reandroid.archive.InputSourceUtil;
import com.reandroid.arsc.chunk.PackageBlock; import com.reandroid.archive2.Archive;
import com.reandroid.arsc.chunk.TableBlock; import com.reandroid.arsc.chunk.PackageBlock;
import com.reandroid.arsc.chunk.xml.AndroidManifestBlock; import com.reandroid.arsc.chunk.TableBlock;
import com.reandroid.arsc.chunk.xml.ResXmlAttribute; import com.reandroid.arsc.chunk.xml.AndroidManifestBlock;
import com.reandroid.arsc.chunk.xml.ResXmlElement; import com.reandroid.arsc.chunk.xml.ResXmlAttribute;
import com.reandroid.arsc.util.FrameworkTable; import com.reandroid.arsc.chunk.xml.ResXmlElement;
import com.reandroid.arsc.value.ValueType; import com.reandroid.arsc.util.FrameworkTable;
import com.reandroid.arsc.value.ValueType;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
/* /*
* Produces compressed framework apk by removing irrelevant files and entries, * Produces compressed framework apk by removing irrelevant files and entries,
* basically it keeps only resources.arsc and AndroidManifest.xml * basically it keeps only resources.arsc and AndroidManifest.xml
*/ */
public class FrameworkApk extends ApkModule{ public class FrameworkApk extends ApkModule{
private final Object mLock = new Object(); private final Object mLock = new Object();
private int versionCode; private int versionCode;
private String versionName; private String versionName;
@ -222,12 +223,14 @@
return getName(); return getName();
} }
public static FrameworkApk loadApkFile(File apkFile) throws IOException { public static FrameworkApk loadApkFile(File apkFile) throws IOException {
APKArchive archive=APKArchive.loadZippedApk(apkFile); Archive archive = new Archive(apkFile);
return new FrameworkApk(archive); APKArchive apkArchive = new APKArchive(archive.mapEntrySource());
return new FrameworkApk(apkArchive);
} }
public static FrameworkApk loadApkFile(File apkFile, String moduleName) throws IOException { public static FrameworkApk loadApkFile(File apkFile, String moduleName) throws IOException {
APKArchive archive=APKArchive.loadZippedApk(apkFile); Archive archive = new Archive(apkFile);
return new FrameworkApk(moduleName, archive); APKArchive apkArchive = new APKArchive(archive.mapEntrySource());
return new FrameworkApk(moduleName, apkArchive);
} }
public static boolean isFramework(ApkModule apkModule) { public static boolean isFramework(ApkModule apkModule) {
if(!apkModule.hasAndroidManifestBlock()){ if(!apkModule.hasAndroidManifestBlock()){
@ -267,4 +270,10 @@
archive.addAll(inputSourceMap.values()); archive.addAll(inputSourceMap.values());
return frameworkApk; return frameworkApk;
} }
public static void optimize(File in, File out, APKLogger apkLogger) throws IOException{
FrameworkApk frameworkApk = FrameworkApk.loadApkFile(in);
frameworkApk.setAPKLogger(apkLogger);
frameworkApk.optimize();
frameworkApk.writeApk(out);
} }
}

View File

@ -413,7 +413,7 @@ public class FrameworkTable extends TableBlock {
if(headerBlock.getChunkType()!= ChunkType.TABLE){ if(headerBlock.getChunkType()!= ChunkType.TABLE){
return super.toString(); return super.toString();
} }
if(!isOptimized()){ if(!mOptimized){
return "Unoptimized: "+super.toString(); return "Unoptimized: "+super.toString();
} }
return getFrameworkName()+'-'+getVersionCode(); return getFrameworkName()+'-'+getVersionCode();