diff --git a/APKToolGUI/APKToolGUI.csproj b/APKToolGUI/APKToolGUI.csproj
index 52ebc7d..dd323ab 100644
--- a/APKToolGUI/APKToolGUI.csproj
+++ b/APKToolGUI/APKToolGUI.csproj
@@ -112,6 +112,9 @@
+
+ ..\packages\ProDotNetZip.1.20.0\lib\netstandard2.0\ProDotNetZip.dll
+
..\packages\ResourceLoader.3.3.1\lib\netstandard2.0\ResourceLoader.dll
@@ -135,6 +138,7 @@
True
+
..\packages\System.Diagnostics.DiagnosticSource.9.0.3\lib\net462\System.Diagnostics.DiagnosticSource.dll
@@ -144,6 +148,7 @@
True
True
+
..\packages\System.Formats.Nrbf.9.0.3\lib\net462\System.Formats.Nrbf.dll
@@ -157,17 +162,7 @@
True
True
-
- ..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll
- True
- True
-
-
- ..\packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll
- True
- True
-
..\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll
True
@@ -192,6 +187,7 @@
..\packages\System.Memory.4.6.1\lib\net462\System.Memory.dll
+
..\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll
True
@@ -241,6 +237,9 @@
True
+
+ ..\packages\System.Security.AccessControl.6.0.1\lib\net461\System.Security.AccessControl.dll
+
..\packages\System.Security.Cryptography.Algorithms.4.3.1\lib\net463\System.Security.Cryptography.Algorithms.dll
True
@@ -261,11 +260,22 @@
True
True
+
+ ..\packages\System.Security.Permissions.9.0.3\lib\net462\System.Security.Permissions.dll
+
+
+ ..\packages\System.Security.Principal.Windows.5.0.0\lib\net461\System.Security.Principal.Windows.dll
+
+
+
+ ..\packages\System.Text.Encoding.CodePages.9.0.3\lib\net462\System.Text.Encoding.CodePages.dll
+
..\packages\System.Text.RegularExpressions.4.3.1\lib\net463\System.Text.RegularExpressions.dll
True
True
+
diff --git a/APKToolGUI/Forms/FormMain.cs b/APKToolGUI/Forms/FormMain.cs
index 6405cd8..4367970 100644
--- a/APKToolGUI/Forms/FormMain.cs
+++ b/APKToolGUI/Forms/FormMain.cs
@@ -10,18 +10,12 @@ using APKToolGUI.Properties;
using APKToolGUI.ApkTool;
using APKToolGUI.Utils;
using System.Threading.Tasks;
-using System.Collections.Generic;
using APKToolGUI.Handlers;
using Microsoft.WindowsAPICodePack.Taskbar;
using System.Media;
using System.Linq;
-using System.Windows.Interop;
-using System.Security.Cryptography;
-using static System.Windows.Forms.VisualStyles.VisualStyleElement;
using APKToolGUI.Controls;
-using Dark.Net;
-using APKEasyTool;
-using System.IO.Compression;
+using Ionic.Zip;
namespace APKToolGUI
{
@@ -196,35 +190,35 @@ namespace APKToolGUI
{
Directory.CreateDirectory(splitPath);
- using (ZipArchive archive = ZipFile.OpenRead(file))
+ using (ZipFile zipDest = ZipFile.Read(file))
{
bool mainApkFound = false;
- foreach (ZipArchiveEntry entry in archive.Entries)
+ foreach (ZipEntry entry in zipDest.Entries)
{
- if (!mainApkFound && !entry.FullName.Contains("config.") && entry.FullName.EndsWith(".apk"))
+ if (!mainApkFound && !entry.FileName.Contains("config.") && entry.FileName.EndsWith(".apk"))
{
- Debug.WriteLine("Found main APK: " + entry.FullName);
- string extractPath = Path.Combine(splitPath, entry.FullName);
+ Debug.WriteLine("Found main APK: " + entry.FileName);
+ string extractPath = Path.Combine(splitPath, entry.FileName);
Directory.CreateDirectory(Path.GetDirectoryName(extractPath));
- entry.ExtractToFile(extractPath, true);
+ entry.Extract(splitPath, ExtractExistingFileAction.OverwriteSilently);
file = extractPath;
mainApkFound = true;
}
- if (entry.FullName.Contains("lib/armeabi-v7a"))
+ if (entry.FileName.Contains("lib/armeabi-v7a"))
{
arch += "armeabi-v7a, ";
}
- if (entry.FullName.Contains("lib/arm64-v8a"))
+ if (entry.FileName.Contains("lib/arm64-v8a"))
{
arch += "arm64-v8a, ";
}
- if (entry.FullName.Contains("lib/x86"))
+ if (entry.FileName.Contains("lib/x86"))
{
arch += "x86, ";
}
- if (entry.FullName.Contains("lib/x86_64"))
+ if (entry.FileName.Contains("lib/x86_64"))
{
arch += "x86_64, ";
}
@@ -890,9 +884,9 @@ namespace APKToolGUI
if (Directory.Exists(Path.Combine(inputFolder, "original", "META-INF")))
{
string unsignedApkPath = Path.Combine(Path.GetDirectoryName(outputCompiledApkFile), Path.GetFileName(outputUnsignedApk));
- ZipUtils.AddDirectory(outputFile, Path.Combine(inputFolder, "original", "META-INF"), "META-INF");
+ ZipUtils.UpdateDirectory(outputFile, Path.Combine(inputFolder, "original", "META-INF"), "META-INF");
if (File.Exists(Path.Combine(inputFolder, "original", "stamp-cert-sha256")))
- ZipUtils.AddFile(outputFile, Path.Combine(inputFolder, "original", "stamp-cert-sha256"));
+ ZipUtils.UpdateFile(outputFile, Path.Combine(inputFolder, "original", "stamp-cert-sha256"));
ToLog(ApktoolEventType.Infomation, String.Format(Language.CopyFileTo, outputFile, unsignedApkPath));
File.Copy(outputFile, unsignedApkPath, true);
}
@@ -1627,7 +1621,6 @@ namespace APKToolGUI
#endregion
#region Fix flickering
-
public static void SetDoubleBuffered(System.Windows.Forms.Control c)
{
if (System.Windows.Forms.SystemInformation.TerminalServerSession)
diff --git a/APKToolGUI/TaskBar/TaskBarJumpList.cs b/APKToolGUI/TaskBar/TaskBarJumpList.cs
index 009f5de..9d02d3f 100644
--- a/APKToolGUI/TaskBar/TaskBarJumpList.cs
+++ b/APKToolGUI/TaskBar/TaskBarJumpList.cs
@@ -8,7 +8,7 @@ using System.Reflection;
using Microsoft.WindowsAPICodePack.Shell;
using APKToolGUI.Languages;
-namespace APKEasyTool
+namespace APKToolGUI
{
public class TaskBarJumpList
{
diff --git a/APKToolGUI/Utils/ZipUtils.cs b/APKToolGUI/Utils/ZipUtils.cs
index 69b13d3..8cf287a 100644
--- a/APKToolGUI/Utils/ZipUtils.cs
+++ b/APKToolGUI/Utils/ZipUtils.cs
@@ -1,165 +1,160 @@
-using System;
+using Ionic.Zip;
+using System;
+using System.Collections.Generic;
using System.IO;
-using System.IO.Compression;
using System.Linq;
using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Documents;
namespace APKToolGUI.Utils
{
public class ZipUtils
{
+ public static void ExtractAllStream(string path, string embeddedZip)
+ {
+ Assembly _assembly = Assembly.GetExecutingAssembly();
+ Stream _zipFileStream = _assembly.GetManifestResourceStream(embeddedZip);
+ using (ZipFile zipFile = ZipFile.Read(_zipFileStream))
+ {
+ zipFile.ExtractAll(path);
+ }
+ }
+
public static string GetFileName(string path, string fileNameContains, string folderContains = "")
{
- using (ZipArchive archive = ZipFile.OpenRead(path))
+ using (ZipFile zipDest = ZipFile.Read(path))
{
- var entry = archive.Entries
- .FirstOrDefault(e => e.FullName.Contains(fileNameContains) &&
- (string.IsNullOrEmpty(folderContains) || e.FullName.Contains(folderContains)));
- return entry != null ? Path.GetFileName(entry.FullName) : string.Empty;
+ foreach (ZipEntry entry in zipDest.Entries)
+ {
+ if (entry.FileName.Contains(fileNameContains) && entry.FileName.Contains(folderContains))
+ return Path.GetFileName(entry.FileName);
+ }
}
+ return "";
}
public static string GetFileNameWithoutExtension(string path, string fileNameContains, string folderContains = "")
{
- using (ZipArchive archive = ZipFile.OpenRead(path))
+ using (ZipFile zipDest = ZipFile.Read(path))
{
- var entry = archive.Entries
- .FirstOrDefault(e => e.FullName.Contains(fileNameContains) &&
- (string.IsNullOrEmpty(folderContains) || e.FullName.Contains(folderContains)));
- return entry != null ? Path.GetFileNameWithoutExtension(entry.FullName) : string.Empty;
+ foreach (ZipEntry entry in zipDest.Entries)
+ {
+ if (entry.FileName.Contains(fileNameContains) && entry.FileName.Contains(folderContains))
+ return Path.GetFileNameWithoutExtension(entry.FileName);
+ }
}
+ return "";
}
-
public static bool Exists(string path, string fileNameContains, string folderContains = "")
{
- using (ZipArchive archive = ZipFile.OpenRead(path))
+ using (ZipFile zipDest = ZipFile.Read(path))
{
- return archive.Entries.Any(e => e.FullName.Contains(fileNameContains) &&
- (string.IsNullOrEmpty(folderContains) || e.FullName.Contains(folderContains)));
+ foreach (ZipEntry entry in zipDest.Entries)
+ {
+ if (entry.FileName.Contains(fileNameContains) && String.IsNullOrEmpty(folderContains))
+ return true;
+ else if (entry.FileName.Contains(fileNameContains) && entry.FileName.Contains(folderContains))
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public static void AddFile(string zipFile, string fileName, string directoryPathInArchive = "")
+ {
+ using (ZipFile zip = ZipFile.Read(zipFile))
+ {
+ if (!String.IsNullOrEmpty(directoryPathInArchive))
+ zip.AddFile(fileName, directoryPathInArchive);
+ else
+ zip.AddFile(fileName);
+ zip.Save();
}
}
- public static void AddFile(string zipPath, string filePath, string targetFolderInZip = "")
+ public static void UpdateFile(string zipFile, string fileName, string directoryPathInArchive = "")
{
- using (FileStream zipToOpen = new FileStream(zipPath, FileMode.Open))
+ using (ZipFile zip = ZipFile.Read(zipFile))
{
- using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
- {
- // Combine the target folder with the file name to create the entry path
- string fileName = Path.GetFileName(filePath);
- string entryPath = string.IsNullOrEmpty(targetFolderInZip)
- ? fileName
- : Path.Combine(targetFolderInZip, fileName).Replace("\\", "/");
-
- // Remove the entry if it already exists
- var existingEntry = archive.GetEntry(entryPath);
- existingEntry?.Delete();
-
- // Add the file to the archive
- archive.CreateEntryFromFile(filePath, entryPath, CompressionLevel.Optimal);
-
- Console.WriteLine($"Added '{filePath}' to ZIP archive at '{entryPath}'.");
- }
+ if (!String.IsNullOrEmpty(directoryPathInArchive))
+ zip.UpdateFile(fileName, directoryPathInArchive);
+ else
+ zip.UpdateFile(fileName);
+ zip.Save();
}
}
public static void RemoveFile(string zipFile, string fileName)
{
- using (FileStream fs = new FileStream(zipFile, FileMode.OpenOrCreate))
- using (ZipArchive archive = new ZipArchive(fs, ZipArchiveMode.Update))
+ using (ZipFile zip = ZipFile.Read(zipFile))
{
- var entry = archive.Entries.FirstOrDefault(e => e.FullName.Contains(fileName));
- entry?.Delete();
+ bool chkresult2 = zip.Any(entry => entry.FileName.Contains(fileName));
+ if (chkresult2)
+ {
+ zip.RemoveEntry(fileName);
+ zip.Save();
+ }
}
}
public static void ExtractFile(string path, string fileName, string destination)
{
- using (ZipArchive archive = ZipFile.OpenRead(path))
+ using (ZipFile zip = ZipFile.Read(path))
{
- var entry = archive.Entries.FirstOrDefault(e => e.FullName.Contains(fileName));
- entry?.ExtractToFile(Path.Combine(destination, Path.GetFileName(entry.FullName)), true);
+ bool chkresult2 = zip.Any(entry => entry.FileName.Contains(fileName));
+ if (chkresult2)
+ {
+ zip.FlattenFoldersOnExtract = true;
+ ZipEntry e = zip[fileName];
+ e.Extract(destination, ExtractExistingFileAction.OverwriteSilently);
+ }
}
}
public static void ExtractAll(string path, string destination, bool flattenFoldersOnExtract = false)
{
- using (ZipArchive archive = ZipFile.OpenRead(path))
+ using (ZipFile zip = ZipFile.Read(path))
{
- foreach (var entry in archive.Entries)
- {
- string fullPath = flattenFoldersOnExtract
- ? Path.Combine(destination, Path.GetFileName(entry.FullName))
- : Path.Combine(destination, entry.FullName);
- string directoryPath = Path.GetDirectoryName(fullPath);
- if (!string.IsNullOrEmpty(directoryPath)) Directory.CreateDirectory(directoryPath);
- entry.ExtractToFile(fullPath, true);
- }
+ zip.FlattenFoldersOnExtract = flattenFoldersOnExtract;
+ zip.ExtractAll(destination, ExtractExistingFileAction.OverwriteSilently);
}
}
- public static void AddDirectory(string zipPath, string directoryPath, string directoryPathInArchive = "")
+ public static void AddDirectory(string path, string fileName, string directoryPathInArchive = "")
{
- if (!File.Exists(zipPath))
- {
- Console.WriteLine("ZIP file does not exist.");
- return;
- }
-
- using (FileStream zipToOpen = new FileStream(zipPath, FileMode.Open))
- {
- using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
- {
- foreach (string filePath in Directory.GetFiles(directoryPath, "*", SearchOption.AllDirectories))
- {
- // Calculate the relative path and prepend the target folder inside the ZIP
- string relativePath = GetRelativePath(directoryPath, filePath);
- string entryPath = Path.Combine(directoryPathInArchive, relativePath).Replace("\\", "/");
-
- // Remove the entry if it already exists
- var existingEntry = archive.GetEntry(entryPath);
- existingEntry?.Delete();
-
- // Add the file to the archive
- archive.CreateEntryFromFile(filePath, entryPath, CompressionLevel.Optimal);
- }
- }
- }
+ ZipFile zip = new ZipFile();
+ if (!String.IsNullOrEmpty(directoryPathInArchive))
+ zip.AddDirectory(fileName, directoryPathInArchive);
+ else
+ zip.AddDirectory(fileName);
+ zip.Save(path);
}
- static string GetRelativePath(string basePath, string fullPath)
+ public static void UpdateDirectory(string path, string dirName, string directoryPathInArchive = "")
{
- // Ensure both paths are absolute
- basePath = Path.GetFullPath(basePath);
- fullPath = Path.GetFullPath(fullPath);
-
- if (!fullPath.StartsWith(basePath, StringComparison.OrdinalIgnoreCase))
+ using (ZipFile zip = ZipFile.Read(path))
{
- throw new ArgumentException("The fullPath is not within the basePath.");
+ if (!String.IsNullOrEmpty(directoryPathInArchive))
+ zip.UpdateDirectory(dirName, directoryPathInArchive);
+ else
+ zip.UpdateDirectory(dirName);
+ zip.Save();
}
-
- return fullPath.Substring(basePath.Length).TrimStart(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar);
}
public static void ExtractDirectory(string path, string folderName, string destination, bool flattenFoldersOnExtract = false)
{
- using (ZipArchive archive = ZipFile.OpenRead(path))
+ using (ZipFile zip = ZipFile.Read(path))
{
- foreach (ZipArchiveEntry entry in archive.Entries.Where(e => e.FullName.Contains(folderName)))
+ zip.FlattenFoldersOnExtract = flattenFoldersOnExtract;
+ foreach (ZipEntry e in zip.Where(x => x.FileName.Contains(folderName)))
{
- string extractPath = flattenFoldersOnExtract
- ? Path.Combine(destination, Path.GetFileName(entry.FullName))
- : Path.Combine(destination, entry.FullName);
-
- string directoryPath = Path.GetDirectoryName(extractPath);
- if (!string.IsNullOrEmpty(directoryPath))
- {
- Directory.CreateDirectory(directoryPath);
- }
-
- entry.ExtractToFile(extractPath, true);
+ e.Extract(destination, ExtractExistingFileAction.OverwriteSilently);
}
}
}
+
}
-}
+}
\ No newline at end of file
diff --git a/APKToolGUI/app.config b/APKToolGUI/app.config
index 43d8b3d..f97bd66 100644
--- a/APKToolGUI/app.config
+++ b/APKToolGUI/app.config
@@ -330,6 +330,14 @@
+
+
+
+
+
+
+
+
diff --git a/APKToolGUI/packages.config b/APKToolGUI/packages.config
index ead8d97..8e67af0 100644
--- a/APKToolGUI/packages.config
+++ b/APKToolGUI/packages.config
@@ -12,6 +12,7 @@
+
@@ -28,8 +29,6 @@
-
-
@@ -53,11 +52,15 @@
+
+
+
+