如何在Android App Bundle中包含预构建原生库的调试符号?
背景信息
向Play Store上传使用原生库的应用时,必须同步上传原生调试符号,才能获取可用的崩溃/ANR分析信息。
如果未上传符号文件,会收到如下警告:
此App Bundle包含原生代码,但您尚未上传调试符号。建议您上传符号文件,以便更轻松地分析和调试崩溃与ANR问题。
过去上传.apk格式应用时,需要手动上传这类调试信息。现在使用.aab格式时,如果原生库是通过Android Studio构建的,只需设置android.defaultConfig.ndk.debugSymbolLevel = 'FULL',构建出的.aab就会自动包含调试信息,上传单个文件即可完成全部流程。
预构建库场景
并非所有场景都适合或需要在Android Studio内构建原生库,很多时候库是外部预构建的,仅被Android Studio引用而不参与构建。Android Studio通过指定目录结构支持该用法,只需将库存放到正确的src/main/jniLibs/{ABI}路径下,就会被自动识别并打包到App Bundle中。
现存问题
- Android Studio可构建包含Play Store可识别调试信息的
.aab,无需手动上传符号文件; - Android Studio支持按指定路径结构引入预构建原生库;
- 但目前没有公开文档说明如何同时实现上述两点:引入预构建原生库的同时,将其调试信息打包进
.aab,从逻辑上该能力理应存在。
查阅大量资料后仍未找到相关操作说明:预构建库对应的调试信息需要存放在哪个路径才能被打包进.aab?是否存在专用存放路径?是否需要特定文件扩展名?是否需要通过Gradle做额外配置?还是该能力目前根本不支持?
已尝试的方案及结果如下:
- 不拆分调试信息,直接将调试信息保留在
.so文件中:该方案下Play Store不会剥离调试信息,会向用户推送体积庞大的调试版构建产物; - 将调试信息拆分为
.so.dbg后缀的文件,和.so文件放在同一路径下:这类文件不会被打包进.aab; - 按照官方指引在上传
.aab后手动压缩并上传符号文件:该方案可行,但便捷性远不如直接将符号打包进.aab; - 构建由Android Studio编译原生库的示例应用做对照,验证该场景下确实会自动打包调试信息,并确认了调试文件的扩展名,示例
.aab内容见截图:
内容的提问来源于stack exchange,提问作者Malcolm MacLeod
相关产品推荐
相关产品推荐

