Вы должны войти, чтобы создавать сообщения и темы.

Работа с архивами

Всем приветы)

Моменты следующий..

Есть приложение для андроид (apk файл)
нужно архиватором заменить в нём файл.
отключил проверку целостности и подписи апк на смартфоне.

и если заменить нужный файл внутри апк с помощью архиватора 7-zip то приложение устанавливается на смартфон.

а если я это делаю в автоматическом режиме с помощью C# ZipArchive то готовое приложение не устанавливается.

есть ещё какие-то хорошие способы замены файлов внутри архивов с помощью C# ?

Привет, Никита 🖐
Как вариант, использовать консольную версию 7-Zip в Твоём проекте.

Лайкнул Никита
Никита

Добрый день.
Я бы посмотрел в сторону сторонней Ionic.zip.
Есть еще одна из популярных библиотек, более легковесная, название забыл.  На GitHub можете посмотреть. Ну или позже за компом буду, найду.

А можете выложить, как пример, оригинальный apk и перепакованный ZipArchive, что бы найти отличия?

Лайкнул Никита
Никита
Цитата: Adler от 07.06.2021, 19:00

Добрый день.
Я бы посмотрел в сторону сторонней Ionic.zip.
Есть еще одна из популярных библиотек, более легковесная, название забыл.  На GitHub можете посмотреть. Ну или позже за компом буду, найду.

А можете выложить, как пример, оригинальный apk и перепакованный ZipArchive, что бы найти отличия?

Обязательно выложу, но уже ближе к ночи, сейчас не у компа)

Я думаю лучше вернее не оригинальный, а именно рабочий с использованием 7-Zip и нерабочий с моего проекта))

Цитата: Сергей от 07.06.2021, 18:53

Привет, Никита 🖐
Как вариант, использовать консольную версию 7-Zip в Твоём проекте.

А там такое есть, прошу прощения?))) тоже посмотрю)) спасибо

Когда-то надо было тоже из архива файл удалять и был нюанс, что он архив пересохраняет меняя какой-то параметр сжатия. Давно было, нюансов не помню, как и того, чем я это делал, встроенной библиотекой или сторонней. Надо бы на архивы "в живую" глянуть.

Имхо, 7-Zip конечно можно к C# прикрутить (SevenZipSharp), но это избыточное решение, если нужно только zip перепаковывать, особенно, учитывая, что с ним можно работать исключительно "родными" средствами .Net.

В отличии от того же lzma2 в 7z, для которого нет реализации на c#, то весь zip описан вдоль и поперек.

Цитата: Adler от 07.06.2021, 19:25

Когда-то надо было тоже из архива файл удалять и был нюанс, что он архив пересохраняет меняя какой-то параметр сжатия.

Как раз первым делом на сжатие и подумал, но пробовал и по дефолту оставлять и с принудительно отключенным сжатием

Цитата: Сергей от 07.06.2021, 18:53

Привет, Никита 🖐
Как вариант, использовать консольную версию 7-Zip в Твоём проекте.

Вот сейчас попробовал..

написано было что параметр u обновляет файлы в архиве, если имеются с таким же именем..

Но он почему-то просто закинул в корень архива, как новый файл, даже не поискав и не удалив старый файл в подпапках

такой командой обновлял архив "7z u httpAPK.zip CERT.SF"

Цитата: Adler от 07.06.2021, 19:25

Когда-то надо было тоже из архива файл удалять и был нюанс, что он архив пересохраняет меняя какой-то параметр сжатия. Давно было, нюансов не помню, как и того, чем я это делал, встроенной библиотекой или сторонней. Надо бы на архивы "в живую" глянуть.

Имхо, 7-Zip конечно можно к C# прикрутить (SevenZipSharp), но это избыточное решение, если нужно только zip перепаковывать, особенно, учитывая, что с ним можно работать исключительно "родными" средствами .Net.

В отличии от того же lzma2 в 7z, для которого нет реализации на c#, то весь zip описан вдоль и поперек.

Прилагаю ссылочку на архив.. Заменен файл AndroidManifest.xml в корне.. 

Цитата: Adler от 07.06.2021, 19:25

Когда-то надо было тоже из архива файл удалять и был нюанс, что он архив пересохраняет меняя какой-то параметр сжатия. Давно было, нюансов не помню, как и того, чем я это делал, встроенной библиотекой или сторонней. Надо бы на архивы "в живую" глянуть.

Имхо, 7-Zip конечно можно к C# прикрутить (SevenZipSharp), но это избыточное решение, если нужно только zip перепаковывать, особенно, учитывая, что с ним можно работать исключительно "родными" средствами .Net.

В отличии от того же lzma2 в 7z, для которого нет реализации на c#, то весь zip описан вдоль и поперек.

А вот ссылка на архив с файлами где обычная замена через 7zip и через C#

Из заметных отличий, это то, что в заголовке архива 7zip, как и у оригинального, параметр СкопированоVersion needed to extract archive указан как 0x14, а у перепакованного C# 0x0A и перепаковка 7zip не меняет размер архива, т.к. та же степень сжатия, а у C# меньше.

P.S. Насчет замены файлов не понял, т.к. по всех 4 архивах содержимое всех файлов абсолютно одинаковое.

AndroidManifest.xml




P.S. Есть еще вот такая библиотека для работы с zip - zipstorer

Цитата: Adler от 08.06.2021, 10:26

Из заметных отличий, это то, что в заголовке архива 7zip, как и у оригинального, параметр СкопированоVersion needed to extract archive указан как 0x14, а у перепакованного C# 0x0A и перепаковка 7zip не меняет размер архива, т.к. та же степень сжатия, а у C# меньше.

P.S. Насчет замены файлов не понял, т.к. по всех 4 архивах содержимое всех файлов абсолютно одинаковое.

AndroidManifest.xml


Перепроверил. Да, случайно оба раза скинул комбинацию из архивов 7-zip и C# без оригинального файла.
Попробую Zipstorer сегодня ещё) спасибо

Цитата: Никита от 08.06.2021, 10:38

Есть какие-то предложения, как добиться идентичного с 7-zip результата с помощью C#?

Попробовать другие, сторонние библиотеки, SharpZipLib, Ionic.Zip или ту же ZipStorer