Когда я переворачиваю apk, я получаю файл .pb, но не файл .proto, есть ли способ декомпилировать этот файл в файл .proto или я могу просто сгенерировать код Java из этого файла .pb?
Есть ли способ декомпилировать двоичный файл google protobuf (файл .pb) в файл .proto
comment
Файл .pb — это данные? Или это скомпилированный набор дескрипторов? Если это данные: вам придется перепроектировать их — есть инструменты, которые помогут, так что это не обязательно сложно. Если это скомпилированный набор дескрипторов: намного проще. У Protoc есть инструмент для просмотра необработанных полезных нагрузок, как и мои онлайн-инструменты здесь protogen.marcgravell.com/decode
- person Marc Gravell   schedule 29.07.2019
comment
Это скомпилированный набор дескрипторов. вы имеете в виду --decode_raw ? Есть ли способ получить файл .proto напрямую?
- person Kevin   schedule 29.07.2019
comment
вопрос: для чего вам нужен .proto для? это для редактирования? если это для генерации кода, протокол IIRC примет скомпилированный набор дескрипторов в качестве входных данных (или вы можете напрямую вызывать плагины — плагины работают так, что скомпилированный набор дескрипторов передается на стандартный ввод)
- person Marc Gravell   schedule 29.07.2019
comment
Для создания кода Java. Какой плагин? protoc может не сгенерировать этот файл
- person Kevin   schedule 30.07.2019
Ответы (1)
Если (согласно комментариям) файл, который у вас есть, представляет собой скомпилированный набор дескрипторов, то вы можете использовать protoc
для создания из него любого языка (который он обычно поддерживает); просто используйте опцию --descriptor_set_in=FILES
в командной строке, чтобы указать ваш файл в качестве входных данных (вместо FILES
), и используйте --java_out=OUT_DIR
(или что-то еще), чтобы указать язык вывода и местоположение.
person
Marc Gravell
schedule
30.07.2019
Как это работает на самом деле? Когда я использую команду protoc --description_set_in=./myfile.pb --java_out=. Я получил ошибку «Отсутствует входной файл». Когда я добавляю пустой файл в конец (независимо от того, существует он или нет). Я получил ошибку Нет такого файла или каталога.
- person Kevin; 30.07.2019
@Кевин
descriptor_set_in
, а не description_set_in
- person Marc Gravell; 30.07.2019
Извини. Это опечатка. Я использую descriptor_set_in
- person Kevin; 30.07.2019
@Kevin ой, мой плохой - вам все еще нужно указать файл - он проверяет наборы дескрипторов перед проверкой файла. Итак: попробуйте
protoc --descriptor_set_in=your.pb --java_out=somedir your.proto
— я только что проверил это локально, и все работает нормально (на диске нет your.proto
); единственный трюк: знать имя файла в наборе дескрипторов. Я, вероятно, могу извлечь это, если вы не можете понять это
- person Marc Gravell; 30.07.2019
Хм,
Unknown flag: --descriptor_set_in
, версия 3.14.0
- person Andrii Karaivanskyi; 05.02.2021