首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误:协议消息端-组标记与预期标记不匹配

错误:协议消息端-组标记与预期标记不匹配
EN

Stack Overflow用户
提问于 2021-07-16 13:01:07
回答 1查看 322关注 0票数 1

我正在尝试将apk转换为aab,用apktool反编译,并使用aapt2和bundletool构建(所有这些都在命令行中,没有gradle)。

解压缩后,aapt2编译和链接看起来很好,但是当我使用bundletool执行bundle时,我得到了这个错误。哪里出了问题?我怎么才能修好呢?

代码语言:javascript
运行
复制
F:\>java -jar "F:\tool\common\bundletool.jar" build-bundle --modules="F:\_workspace\20210714\decompile\base.zip" --output="F:\_workspace\20210714\decompile\base.aab"
[BT:1.7.0] Error: com.google.protobuf.InvalidProtocolBufferException: Protocol message end-group tag did not match expected tag.
java.io.UncheckedIOException: com.google.protobuf.InvalidProtocolBufferException: Protocol message end-group tag did not match expected tag.
        at com.android.tools.build.bundletool.model.BundleModule$Builder.addEntry(BundleModule.java:357)
        at com.android.tools.build.bundletool.model.BundleModule$Builder.addEntries(BundleModule.java:339)
        at com.android.tools.build.bundletool.validation.BundleModulesValidator.toBundleModule(BundleModulesValidator.java:94)
        at com.android.tools.build.bundletool.validation.BundleModulesValidator.lambda$validate$0(BundleModulesValidator.java:79)
        at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
        at java.util.Collections$2.tryAdvance(Collections.java:4719)
        at java.util.Collections$2.forEachRemaining(Collections.java:4727)
        at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
        at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
        at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
        at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:566)
        at com.android.tools.build.bundletool.validation.BundleModulesValidator.validate(BundleModulesValidator.java:80)
        at com.android.tools.build.bundletool.commands.BuildBundleCommand.execute(BuildBundleCommand.java:231)
        at com.android.tools.build.bundletool.BundleToolMain.main(BundleToolMain.java:73)
        at com.android.tools.build.bundletool.BundleToolMain.main(BundleToolMain.java:49)
Caused by: com.google.protobuf.InvalidProtocolBufferException: Protocol message end-group tag did not match expected tag.
        at com.google.protobuf.InvalidProtocolBufferException.invalidEndTag(InvalidProtocolBufferException.java:106)
        at com.google.protobuf.CodedInputStream$StreamDecoder.checkLastTagWas(CodedInputStream.java:2076)
        at com.google.protobuf.AbstractParser.parsePartialFrom(AbstractParser.java:217)
        at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:232)
        at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:237)
        at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:48)
        at com.google.protobuf.GeneratedMessageV3.parseWithIOException(GeneratedMessageV3.java:347)
        at com.android.aapt.Resources$XmlNode.parseFrom(Resources.java:44493)
        at com.android.tools.build.bundletool.model.BundleModule$SpecialModuleEntry$1.addToModule(BundleModule.java:386)
        at com.android.tools.build.bundletool.model.BundleModule$Builder.addEntry(BundleModule.java:355)
        ... 15 more

似乎是在讨论protobuf格式(不确定我是否正确),但我确实在命令中添加了“--原始格式”。

关于我所做的事情的细节:

使用aapt2编译资源:

代码语言:javascript
运行
复制
"F:\tool\common\aapt2.exe" compile --dir "F:\_workspace\20210714\decompile\res" -v -o "F:\_workspace\20210714\decompile\compiled_resources.zip"

然后链接:

代码语言:javascript
运行
复制
"F:\tool\common\aapt2.exe" link --proto-format "F:\_workspace\20210714\decompile\compiled_resources.zip" -v -o "F:\_workspace\20210714\decompile\base.apk" -I "F:\tool\common\android.jar" --manifest "F:\_workspace\20210714\decompile\AndroidManifest.xml"

解压缩base.apk,将其他文件移到适当的位置(我是根据bundletool的文档完成的),而不是再次压缩,命名为base.zip。

然后执行bundle,这在开始时已经提到,并得到了这个错误:

代码语言:javascript
运行
复制
"F:\tool\common\bundletool.jar" build-bundle --modules="F:\_workspace\20210714\decompile\base.zip" --output="F:\_workspace\20210714\decompile\base.aab"

代码和资源是从运行良好的apk中解压缩的,依赖关系应该很好,并且可以成功地将这些代码和资源重新编译为apk。顺便说一句,我使用smali.jar将smali文件转换为用于bundletool的dex。

,我正在使用的工具的版本:

aapt2.exe 7.0.0-beta05-7396180 bundletool.jar 1.7.0 apktool.jar 2.5.0 smali.jar 2.4.0

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-20 09:44:49

所以有一天我自己解决了这个问题。这是因为我放错了疯子的档案。“base.zip/清单/androidManifest.xml”中的文件应该是原始格式,它是由aapt2在链接过程中生成的,您可以在aapt2生成的apk中找到它。

是的,对apk进行反编译并使用bundletool将其转化为aab是可能的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68409456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档