利用源映射文件分析 Android 应用程序崩溃情况

您可以在 Instana 上查看安卓应用程序崩溃的详细信息。 详细信息包括移动应用程序所有活动线程的堆栈跟踪。 这些堆栈跟踪包含内存地址和原始函数名称。 您可以使用 Instana 将堆栈跟踪转化为有意义的信息。

如果您的 Android 应用程序的代码被混淆,就很难理解堆栈跟踪。 如果使用 ProGuard, DexGuard, 或 R8 编译器对代码进行优化和混淆,Instana 可以对堆栈跟踪进行去混淆处理。 Instana 通过使用项目的 mapping.txt 文件对堆栈跟踪进行去伪处理。 映射文件将原始类、方法和字段映射为混淆名称,使堆栈跟踪可读。

要翻译堆栈跟踪,请将 mapping.txt 文件上传到 Instana。 您可以通过网络 REST API 调用上传映射文件。 映射文件上传后,Instana UI 会显示有关崩溃的更多详细信息。 要查看详细信息,请单击“崩溃”选项卡上的 “崩溃的线程”。 更多信息,请参阅崩溃

上传制图文件

您可以上传最大 100 MB 的压缩映射文件。

要上传超过 100 MB 的压缩映射文件,请联系 Instana 支持团队。

确保在上传映射文件前满足以下前提条件:

  • 创建的 API 令牌具有为移动应用程序监控启用的配置权限。 更多信息,请参阅 API 标记
  • 源地图为自托管定制版( Kubernetes 或 Red Hat OpenShift Container Platform )存储。 有关详细信息,请参阅配置外部存储

要将映射文件上传到 Instana,请完成以下步骤:

  1. 在 Instana UI 上创建配置,上传映射文件:

    1. 转到网站和移动应用程序 > 移动应用程序

    2. 点击移动应用程序。 显示移动应用程序仪表板。

    3. 单击配置 > 堆栈跟踪转换

      显示映射文件上传配置视图的截图
      图 1。 映射文件上传配置视图

    4. 单击添加配置。 新符号文件上传配置对话框将显示。

    5. 描述字段中,输入上传的描述。

    6. 单击创建。 编辑符号文件上传配置对话框将显示。 使用对话框中显示的 Web REST API 上传映射文件。 参见步骤 3。

    7. 单击保存。 配置已保存。

  2. 将映射文件压缩成 .tgz 文件:

       tar czf <archive name>.tgz <mapping_file>
    

    命令示例见以下代码段:

       tar czf your_app.mapping.tgz your_app.mapping.txt
    
  3. 如果压缩文件大小超过 10 MB,则将 .tgz 文件分割成多个 blob(每个 9 MB):

       split -b 9m <archive name>.tgz <file>.tgz_blob_
    

    命令示例见以下代码段:

       split -b 9m your_mapping_file.tgz your_mapping_file.tgz_blob_
    
  4. 使用 Instana 网络 REST API 上传文件。 请完成下列其中一个步骤:

    • 如果上传包含多个 blob,则运行:

          curl -L -X PUT \
               'https://$UNIT-$TENANT.instana.io/api/mobile-app-monitoring/config/$MOBILE_APP_ID/sourcemap-upload/$UPLOAD_CONFIG_ID/form' \
               -H 'authorization: apiToken $API_TOKEN' \
               -F 'fileId="$IDENTIFIER_OF_APP_BUNDLE-$APP_VERSION, for example com.example.myapp-1.0.3"' \
               -F 'fileType="R8PG_MAP"' \
               -F 'blobIndex=1' \
               -F 'sourceMap=@"$LOCAL_SYMBOLFILE_LOCATION"'
      

      blob 索引从 1 开始,而不是 0。

    • 如果上传只包含一个文件,则运行:

          curl -L -X PUT \
               'https://$UNIT-$TENANT.instana.io/api/mobile-app-monitoring/config/$MOBILE_APP_ID/sourcemap-upload/$UPLOAD_CONFIG_ID/form' \
               -H 'authorization: apiToken $API_TOKEN' \
               -F 'fileId="$IDENTIFIER_OF_APP_BUNDLE-$APP_VERSION, for example com.example.myapp-1.0.3"' \
               -F 'fileType="R8PG_MAP"' \
               -F 'sourceMap=@"$LOCAL_SYMBOLFILE_LOCATION"'
      

      如果压缩文件的大小超过 10 MB,则会显示错误信息 request entity too large 。 参见步骤 3。

  5. 提交上传:

          curl -L -X PUT \
               'https://$UNIT-$TENANT.instana.io/api/mobile-app-monitoring/config/$MOBILE_APP_ID/sourcemap-upload/$UPLOAD_CONFIG_ID/commit' \
               -H 'authorization: apiToken $API_TOKEN' \
               -F 'fileId="$IDENTIFIER_OF_APP_BUNDLE-$APP_VERSION, for example com.example.myapp-1.0.3"' \
               -F 'fileType="R8PG_MAP"'
    

从 Instana 中删除映射文件

要从 Instana 中删除映射文件,请完成以下步骤之一:

  • 转到网站和移动应用程序 > 移动应用程序 > 配置 > 堆栈跟踪翻译 ,然后单击配置旁边的删除图标。

  • 调用网络 REST API。 命令示例如下:

       curl -L -X PUT \
          'https://$UNIT-$TENANT.instana.io/api/mobile-app-monitoring/config/$MOBILE_APP_ID/sourcemap-upload/$UPLOAD_CONFIG_ID/clear' \
            -H 'authorization: apiToken $API_TOKEN'