首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在部署之前修改(aab)内容

在部署之前修改(aab)内容
EN

Stack Overflow用户
提问于 2020-04-27 15:49:27
回答 2查看 6.7K关注 0票数 7

我们有一个构建和发布管道(Azure ),将我们的Android应用程序部署到各种appcenter.ms环境中。在发布过程中,我们解压缩apk,用特定于环境的配置修改内容,然后重新打包apk。

现在我们正试图用Android应用程序包(AAB)来实现这一点,我们不能再使用apktool了。我们如何在AAB上实现与APK相同的功能?

这是我们工作的apk脚本版本的片段。

代码语言:javascript
复制
## NOTE STUFF IS TRUNCATED!!! THIS IS NOT A COMPLETE SCRIPT!!! DO NOT COPY

brew list apktool &>/dev/null || HOMEBREW_NO_AUTO_UPDATE=1 brew install apktool
brew list xmlstarlet &>/dev/null || HOMEBREW_NO_AUTO_UPDATE=1 brew install xmlstarlet

# ... truncated ...

echo "Decompiling $zipPath"
apktool d $zipPath -o "apk"

cd apk

# ... truncated / modify androidmanifest.xml ...

unalignedPath="$apkPath.unaligned"
unsignedPath="$apkPath.unsigned"

cd ..

echo "Repackage apk to $unsignedPath"
apktool b apk -o $unsignedPath

echo "Sign"
jarsigner -keystore $keystorePath -storepass $keystorePass -keypass $keystorePass -verbose -sigalg MD5withRSA -digestalg SHA1 -signedjar $unalignedPath $unsignedPath $keyAlias
jarsigner -verify -verbose -certs $unalignedPath

echo "Zipalign"
$ANDROID_HOME/build-tools/27.0.3/zipalign -f -v 4 $unalignedPath $apkPath

当我们简单地将文件扩展名从apk更改为aab并运行相同的apktool时,我们的文件夹结构就有点混乱了。

而且,资源和清单已经转换为protobuf,我不认为我可以反向工程它们。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-27 17:20:27

要编辑AAB的清单,您需要从AAB中提取文件base/manifest/AndroidManifest.xml

代码语言:javascript
复制
unzip -p app.aab base/manifest/AndroidManifest.xml > AndroidManifest.pb

在这个阶段,尽管进行了扩展,清单还是采用了协议缓冲区格式(这就是为什么我在上面给它扩展.pb )。因此,您需要找到一个协议缓冲区解析器/编辑器来进行所需的更改。

要解析proto,您将需要协议缓冲区的定义,您可以在这个JAR中找到该定义:XmlNode Resources.proto中的https://maven.google.com/com/android/tools/build/aapt2-proto/3.6.3-6040484/aapt2-proto-3.6.3-6040484.jar 查看message

在对解析的proto进行更改之后,重新序列化proto并在相同的位置重新注入它,在AAB中使用相同的名称(它只是一个zip文件)。

最后,你不需要拉链-对齐AAB,所以删除这个步骤。

也许在将来,一个工具会允许你自动转换,就像apktool所做的一样。同时,你可以用这种方式手动完成。希望这能有所帮助。

由Lionscribe编辑

简单的一步一步的说明。

  1. 按照上面的指示,从AAB文件中提取AndroidManifest.xml文件。对于这种用法,将名称保留为"AndroidManifest.xml“。
  2. https://developers.google.com/protocol-buffers/docs/downloads下载原始二进制文件并将二进制文件解压缩到路径或工作文件夹中。
  3. 下载上面引用的jar文件,用任何压缩程序打开jar,并将文件"Resources.proto“和"Configuration.proto”从jar根文件夹复制到您的工作文件夹中。
  4. 运行命令protoc --decode=aapt.pb.XmlNode Resources.proto < AndroidManifest.xml > output.txt来解码该文件。
  5. 根据您的需要编辑"output.txt“。
  6. 运行protoc --encode=aapt.pb.XmlNode Resources.proto < output.txt > AndroidManifest_new.xml对新版本进行编码。
票数 7
EN

Stack Overflow用户

发布于 2021-07-11 08:14:05

我最近想出了一种修改应用程序包内容的方法。我用APK和AAB来修饰AAB的含量。

Step1:使用apk工具从apk中提取AndroidManifest.xml文件。

Step2:修改此提取的清单文件。在此步骤中,您还可以修改其他资源,如图标、字符串资源。

Step3:现在我们需要将这些修改后的资源转换成protobuf格式。请按照下面的链接进行相同的操作。

https://developer.android.com/studio/build/building-cmdline#bundletool-build https://musteresel.github.io/posts/2019/07/build-android-app-bundle-on-command-line.html

Step4:解压缩应用程序包的内容并替换现有资源(如清单等)用这些修改过的资源。

--no-dir-entries Step5:最后的窍门是在压缩提取的app文件夹内容时使用Step5标志,该文件夹包含修改后的资源。转到解压的app包文件夹并执行以下命令。

"zip -r --no-dir-条目./修改后的_aab.zip *“

Step6:,最后,使用以下简单命令将.zip重命名为.aab : mv modified_aab.zip modified_aab.aab

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

https://stackoverflow.com/questions/61462822

复制
相关文章

相似问题

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