【发布时间】:2023-03-30 10:36:01
【问题描述】:
我正在尝试将 apk 转换为 aab,使用 apktool 反编译,并使用 aapt2 和 bundletool 构建(全部在命令行中,无需 gradle)。
反编译后,aapt2 编译和链接看起来不错,但是当我用 bundletool 执行 build-bundle 时,我得到了这个错误。什么地方出了错?我该如何解决?
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 格式(不确定我是否正确),但我确实在命令中添加了“--proto-format”。
我所做的详细信息:
使用 aapt2 编译资源:
"F:\tool\common\aapt2.exe" compile --dir "F:\_workspace\20210714\decompile\res" -v -o "F:\_workspace\20210714\decompile\compiled_resources.zip"
然后链接:
"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。
然后做build-bundle,前面已经提到过,报错:
"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文件转成dex供bundletool使用的。
我使用的工具版本:
aapt2.exe7.0.0-beta05-7396180
bundletool.jar1.7.0
apktool.jar 2.5.0
smali.jar 2.4.0
【问题讨论】:
标签: android aapt2 bundletool android-app-bundle