[英]How to include debug symbols for a pre-built native library inside an Android App Bundle?
将应用程序上传到使用本机库的 Play 商店时,还需要上传本机调试符号以获取有用的崩溃/ANR 信息。
如果您上传时没有符号,您会收到以下警告:“此 App Bundle 包含本机代码,并且您尚未上传调试符号。我们建议您上传符号文件,以使您的崩溃和 ANR 更易于分析和调试。”
过去在将应用程序上传为.apk
文件时,需要手动上传此类调试信息。 现在使用.aab
如果本机库是通过 android studio 构建的,则可以设置android.defaultConfig.ndk.debugSymbolLevel = 'FULL'
,此时当您构建.aab
时,它将自动包含调试信息,您上传此单文件,一切都已完成/工作。
然而,在 android studio 中构建库并不总是可能/理想/必要的。 有时有一些原因需要在外部预先构建库并仅由 android studio 使用,而不是由它构建; Android Studio 通过此处描述的目录结构支持这一点https://developer.android.com/studio/projects/gradle-external-native-builds#jniLibs简而言之,您只需将库复制到正确的src/main/jniLibs/{ABI}
路径,它被拾取并成为捆绑包的一部分。
.aab
,其中包含 Play 商店可以理解的调试信息,因此您无需手动上传。.aab
中包含它们的调试信息。 即使在逻辑上应该可以做到这一点。 我已经搜索了我认为的所有地方,但找不到任何人甚至真的在谈论这个,您如何/在哪里放置相应的调试信息,以便也可以将其作为.aab
的一部分包含在内? 是否有单独的路径,它们是否只需要特定的文件扩展名,是否需要告诉 gradle 以某种方式处理它们? 这真的不可能吗?
我尝试过的事情:
.so.dbg
的文件,并将它们放在 .so 文件旁边 - 它们不包含在.aab
中.aab
后手动压缩和上传符号 - 这似乎有效但不一样将它们放在.aab
中一样方便经过更多挖掘后,我发现负责此任务的任务是“ExtractNativeDebugMetadataTask”,可以通过它来定制/更改一些工作以在此处执行自定义操作。
然而,这最终是不必要的,因为在深入研究时我发现它实际上已经有效。 至少到目前为止最新的 gradle 版本(不确定过去)。 它只是由于某些 NDK 路径混淆而失败,这不会导致包构建的构建/创建失败,但只会记录一条容易错过的信息消息。
最终,完成这项工作所需要做的就是:
-g
-g3
或类似工具构建您的外部.so
文件jniLibs
目录结构中android{ ndk { debugSymbolLevel 'FULL' } ndkPath "$projectDir/path/to/NDK" }
生成的.aab
将在正确的位置包含剥离的.so
文件和拆分调试的.so.dbg
文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.