コードを難読化し、クラッシュをモニターする場合は、ProGuard または DexGuard マッピングファイルをアップロードする必要があります。Splunk AppDynamics は、アプリケーションがクラッシュスナップショット用の人間が判読可能なスタックトレースを生成するために、マッピングファイルを必要とします。 スナップショットの重要性の詳細については、「人間が判読能なクラッシュスナップショットの取得」を参照してください。 

DexGuard は ProGuard 上に構築されているため、コントローラ UI と、マッピングファイルをアップロードするための REST API の一部は、ProGuard ファイルと DexGuard ファイルの両方の ProGuard を参照します。 

このページでは、マッピングファイルを手動でアップロードするための要件、使用可能なメソッド、および手順について説明します。

Gradle および build.gradle ファイルを使用して ProGuard または DexGuard マッピングファイルの自動アップロードを設定することをお勧めします。 

要件

アプリケーションを更新する場合は、新しいバージョンのマッピングファイルをアップロードする必要があります。

マッピングファイルを手動でアップロードするには、以下を指定してマッピングファイルをアプリケーションの正しいバージョンに関連付ける必要があります。

  • アプリケーションの Android パッケージ名

  • AndroidManifest.xml ファイルまたは build.gradle ファイルのいずれかで指定された)そのアプリケーションのバージョンコード

メソッドのアップロード

その後は、コントローラ UI の Upload Missing ProGuard Mappings ダイアログを使用してマッピングファイルをアップロードすることも、特別な REST API を使用することもできます。提供している ProGuard マッピングファイルごとに、アップロードを個別に実行します。また、別の REST API を使用してアップロードを確認することもできます。

説明については、次のセクションを参照してください。

コントローラ UI での ProGuard マッピングのアップロード

  1. 左側のパネルで、[Configuration] をクリックします。
  2. ProGuard Mapping & NDK Symbol Files をクリックします。
    このページには、ProGuard マッピングのアップロードが一覧表示されます。各アップロードには一意の [Build ID] があります。
  3. Add ProGuard File をクリックします。
  4. Upload Missing ProGuard Mapping ダイアログで、次の操作を実行します。
    1. パッケージのバージョンコード(数字)を入力します。これは、このマッピングファイルが生成されたアプリケーションの AndroidManifest.xml ファイルまたは build.gradle ファイルのいずれかで指定された versionCode  プロパティです。
    2. Choose File.
      をクリックします。アップローダは .txt 拡張子を持つファイルを想定します。ファイルに mapping.txt という名前が付けられます。
    3. ファイルブラウザでマッピングファイルを見つけて選択し、Open をクリックします。
    4. Upload をクリックします。

コントローラ UI でのソースマップのアップロード

  1. 左側のパネルで、[Configuration] をクリックします。
  2. [ProGuard Mapping & NDK Symbol Files & Source Maps] をクリックします。
  3. Upload Missing ProGuard Mapping  ダイアログで、次の操作を実行します。
    1. パッケージのバージョンコード(数字)を入力します。これは、このマッピングファイルが生成されたアプリケーションの AndroidManifest.xml ファイルまたは build.gradle ファイルのいずれかで指定された versionCode  プロパティです。
    2. Choose File.
      をクリックします。アップローダは .txt 拡張子を持つファイルを想定します。ファイルに mapping.txt という名前が付けられます。
    3. ファイルブラウザでマッピングファイルを見つけて選択し、Open をクリックします。
    4. Upload をクリックします。

REST API を使用した ProGuard マッピングのアップロード

API では HTTP 基本認証が使用されます。ユーザー名は Splunk AppDynamics EUM アカウント名で、パスワードは EUM ライセンスキーです。

この REST API を無効にし、トークンベースのアップロードを使用するコントローラ API を使用する場合は、Cisco AppDynamics サポートにお問い合わせください。

マッピングファイルの送信

PUT リクエストの本文のテキストファイルとしてマッピングファイルを次の URL に送信します。

https://api.eum-appdynamics.com/v2/account/<MyAccountName>/<androidPackageName>/<versionCode>/proguard-mapping
https://fra-api.eum-appdynamics.com/v2/account/<MyAccountName>/<androidPackageName>/<versionCode>/proguard-mapping
BASH
https://syd-api.eum-appdynamics.com/v2/account/<MyAccountName>/<androidPackageName>/<versionCode>/proguard-mapping
BASH


EUM サーバの場所の詳細については、「Cisco AppDynamics SaaS Domains and IP Ranges」を参照してください。 

次のパラメータが必要です。

  • MyAccountName:URL エンコードされたバージョンのアカウント名。
  • androidPackagename:このマッピングファイルが生成された Android パッケージの名前。
  • versionCode:このマッピングファイルが生成されたアプリケーションの AndroidManifest.xml ファイルまたは build.gradle ファイルのいずれかで指定された「versionCode」プロパティの文字列表現。 

リクエスト本文にマッピングファイルが含まれます。Content-Type ヘッダー、-H Content-Type:text/plain, 、アカウント名、およびライセンスキー/パスワードをコールに追加する必要があります。 

REST API を使用したリクエストと応答の例

これは、REST API を使用した要求と応答の例です。 

アップロードのリクエスト

次の例では、curl を使用して ProGuard マッピングファイルを送信します。同様のコマンドを使用すると、DexGuard マッピングファイルを送信できます。アカウント名は「Example account」であり、ライセンスキー/パスワードは「Example-License-Key-4e8ec2ae6cfe」です。アカウント名が URL エンコードされると、アカウント名のスペースはプラス記号に置き換えられます。Android アプリケーションのパッケージ名は「com.example.networklogger」です。マッピングファイルは、versionCode のバージョンに対応しています。

curl -v -H Content-Type:text/plain --upload-file mapping.txt --user Example+account:Example-License-Key-4e8ec2ae6cfe https://api.eum-appdynamics.com/v2/account/Example+account/com.example.networklogger/1/proguard-mapping
BASH
curl -v -H Content-Type:text/plain --upload-file mapping.txt --user Example+account:Example-License-Key-4e8ec2ae6cfe https://fra-api.eum-appdynamics.com/v2/account/Example+account/com.example.networklogger/1/proguard-mapping
BASH
curl -v -H Content-Type:text/plain --upload-file mapping.txt --user Example+account:Example-License-Key-4e8ec2ae6cfe https://syd-api.eum-appdynamics.com/v2/account/Example+account/com.example.networklogger/1/proguard-mapping
BASH
応答のアップロード 

例のリクエストの成功した出力は次のようになります。

* About to connect() to api.eum-appdynamics.com port 443 (#0)
*   Trying ::1...
* connected
* Connected to api.eum-appdynamics.com  (::1) port 443 (#0)
* Server auth using Basic with user 'Example+account'
> PUT /v2/account/Example+account/com.example.networklogger/1/proguard-mapping HTTP/1.1
> Authorization: Basic SW50ZXJuYWwrdGVzdCthY2NvdW50OlRlc3RBY2N0LTFlMzktNDVkMy05MzAzLTRlOGVjMmFlNmNmZQ==
> User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8y zlib/1.2.5
> Host: api.eum-appdynamics.com
> Accept: */*
> Content-Length: 4
> Expect: 100-continue
>
< HTTP/1.1 100 Continue
* We are completely uploaded and fine
< HTTP/1.1 200 OK
< Content-Length: 0
< Server: Jetty(8.1.4.v20120524)
<
* Connection #0 to host api.eum-appdynamics.com left intact
* Closing connection #0
BASH
* About to connect() to fra-api.eum-appdynamics.com port 443 (#0)
*   Trying ::1...
* connected
* Connected to fra-api.eum-appdynamics.com  (::1) port 443 (#0)
* Server auth using Basic with user 'Example+account'
> PUT /v2/account/Example+account/com.example.networklogger/1/proguard-mapping HTTP/1.1
> Authorization: Basic SW50ZXJuYWwrdGVzdCthY2NvdW50OlRlc3RBY2N0LTFlMzktNDVkMy05MzAzLTRlOGVjMmFlNmNmZQ==
> User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8y zlib/1.2.5
> Host: fra-api.eum-appdynamics.com
> Accept: */*
> Content-Length: 4
> Expect: 100-continue
>
< HTTP/1.1 100 Continue
* We are completely uploaded and fine
< HTTP/1.1 200 OK
< Content-Length: 0
< Server: Jetty(8.1.4.v20120524)
<
* Connection #0 to host fra-api.eum-appdynamics.com left intact
* Closing connection #0
BASH
* About to connect() to syd-api.eum-appdynamics.com port 443 (#0)
*   Trying ::1...
* connected
* Connected to syd.eum-appdynamics.com  (::1) port 443 (#0)
* Server auth using Basic with user 'Example+account'
> PUT /v2/account/Example+account/com.example.networklogger/1/proguard-mapping HTTP/1.1
> Authorization: Basic SW50ZXJuYWwrdGVzdCthY2NvdW50OlRlc3RBY2N0LTFlMzktNDVkMy05MzAzLTRlOGVjMmFlNmNmZQ==
> User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8y zlib/1.2.5
> Host: syd-api.eum-appdynamics.com
> Accept: */*
> Content-Length: 4
> Expect: 100-continue
>
< HTTP/1.1 100 Continue
* We are completely uploaded and fine
< HTTP/1.1 200 OK
< Content-Length: 0
< Server: Jetty(8.1.4.v20120524)
<
* Connection #0 to host syd-api.eum-appdynamics.com left intact
* Closing connection #0
BASH




REST API を使用してアップロードされたマッピングファイルの確認
 

マッピングファイルが 2 つの REST API を使用して正常にアップロードされたことを確認できます。

  1. 最後にアップロードした 50 個のマッピングファイルの GUID のリストを取得します
  2. 特定のマッピングファイルがアップロードされているかどうかを確認します

各アップロードには一意の [Build ID] があります。コントローラ UI でアップロードを表示することもできます。「ProGuard ファイルのアップロード」を参照してください。


最後にアップロードされた 50 個のマッピングファイルのリスト

proguardQuery メソッドを使用すると、最後にアカウントにアップロードされた最大 50 個のマッピングファイル(ProGuard または DexGuard)の GUID のリストを、アップロードされた時刻とともに取得することができます。その応答は、アップロード時刻が最新のものから、JSON 形式で表示されます。

  1. API を使用したアップロード」の説明に従って認証を設定します。

  2. 次のようにフォームの GET リクエストを作成します。

    curl --user [Account Name]:[License key] https://[Base-URL]/v2/account/[act-mame]/application/[App-Key]/mobile-mapping-file-info\?platform\=Android\&name\=[Package-Name]
    BASH

     

    curl --user AppDynamics-Account:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX https://api.example.com/v2/account/AppDynamics-Account/application/XX-XXX-XXX-XXX/mobile-mapping-file-info\?platform\=Android\&name\=com.example.myapplication
    CODE


    - EUM_Cloud
    は、SaaS ベースの EUM クラウド URL を指します。完全なリストについては、「Cisco AppDynamics SaaS Domains and IP Ranges」を参照してください。 

    - EUM_Server_Host は、オンプレミス EUM サーバを指す URL を指します。

    - EUM_Account_Name は、EUM アカウント名です。

    - GUID_To_Check は、対象の ProGuard ファイルの GUID です。

Sample Request  
curl --user Example+account:Example-License-Key-4e8ec2ae6cfe  https://api.eum-appdynamics.com:443/v2/account/<EUM_Account_Name>/crash-symbol-file-query/proguard
BASH
curl --user Example+account:Example-License-Key-4e8ec2ae6cfe  https://fra-api.eum-appdynamics.com:443/v2/account/<EUM_Account_Name>/crash-symbol-file-query/proguard
BASH
curl --user Example+account:Example-License-Key-4e8ec2ae6cfe  https://syd-api.eum-appdynamics.com:443/v2/account/<EUM_Account_Name>/crash-symbol-file-query/proguard
BASH

Sample Response
{"proguardFiles": [
{"packageName":"my_package_name1", "version":"1", "uploadTime":"mm/dd/yyyy 16:09:23","GUID":"my_build_id1"}, 
{"packageName":"my_package_name2", "version":"1", "uploadTime":"mm/dd/yyyy 16:09:23","GUID":"my_build_id2"}
]}
JSON


GUID による特定のマッピングファイルの確認 

checkForProguardFile メソッドを使用すると、GUID によって特定の ProGuard ファイルまたは DexGuard ファイルがアップロードされているかどうかを確認できます。アップロード時刻が応答で返されます。

    1. REST API を使用したアップロード」の説明に従って認証を設定します。
    2. 次のようにフォームの GET リクエストを作成します。

      curl --user Example+account:Example-License-Key-4e8ec2ae6cfe https://<EUM_Cloud/EUM_Server_Host:port>/v2/account/<EUM_Account_Name>/crash-symbol-file-query/proguard/guid/<GUID_To_Check>
      BASH

      - EUM_Cloud は、SaaS ベースの EUM クラウド URL を指します。完全なリストについては、「Cisco AppDynamics SaaS Domains and IP Ranges」を参照してください。 

      - EUM_Server_Host は、オンプレミス EUM サーバを指す URL を指します。

      - EUM_Account_Name は、EUM アカウント名です。

      - GUID_To_Check は、対象の ProGuard ファイルの GUID です。

      Sample Request 
      curl --user Example+account:Example-License-Key-4e8ec2ae6cfe  https://api.eum-appdynamics.com:443/v2/account/<EUM_Account_Name>/crash-symbol-file-query/proguard/guid/my_build_id1
      BASH
      curl --user Example+account:Example-License-Key-4e8ec2ae6cfe  https://fra-api.eum-appdynamics.com:443/v2/account/<EUM_Account_Name>/crash-symbol-file-query/proguard/guid/my_build_id1
      BASH
      curl --user Example+account:Example-License-Key-4e8ec2ae6cfe  https://syd-api.eum-appdynamics.com:443/v2/account/<EUM_Account_Name>/crash-symbol-file-query/proguard/guid/my_build_id1
      BASH

      Sample Response 
      {"packageName":"mypackagename","version":"1","uploadTime":"mm/dd/yyyy 16:09:23","GUID":"my_build_id1"}
      JSON

トークンを使用した REST API での ProGuard マッピングのアップロード

トークンベースのアップロードを使用するには、次のプロパティが有効になっていることを確認します。

MAPPING_FILE_UPLOAD_API_DISABLED: True
CODE


コントローラ API は、ProGuard マッピングをアップロードするためのトークンベースの認証をサポートしています。このアップロード方法では、生成されたトークンとアプリケーション ID がログイン情報とともに必要です。

ProGuard マッピングファイルをアップロードするには、次の手順を実行します。

  1. ファイルをアップロードするためのトークンを生成します。
    curl -L -X GET -u <username>@<accountName>:<password> '<controller base url>/controller/restui/mobileRUMConfig/fileUploadToken'
    CODE
  2. アプリケーション ID を取得します。
    curl -L -X GET -u <username>@<accountName>:<password> '<controller base url>/controller/restui/mobileRUMConfig/getApplicationId/<App key>'
    CODE
  3. ProGuard マッピングファイルをアップロードします。
    curl -L -X POST -u <username>@<accountName>:<password> '<controller base url>/controller/restui/mobileRUMConfig/uploadProGuardFile/<applicationID>?token=<token>' -F 'fileData=@"<proguard file path>"' -F 'androidPackageName="<android Package Name>"' -F 'versionCode="<code version>"'
    CODE

REST API を使用したソースマップのアップロード

API では HTTP 基本認証が使用されます。ユーザー名は Splunk AppDynamics EUM アカウント名で、パスワードは EUM ライセンスキーです。

この REST API を無効にし、トークンベースのアップロードを使用するコントローラ API を使用する場合は、Cisco AppDynamics サポートにお問い合わせください。

ソースマッピングファイルの送信

PUT リクエストの本文のテキストファイルとしてマッピングファイルを次の URL に送信します。


https://api.eum-appdynamics.com/v2/account/<MyAccountName>/<androidPackageName>/<versionCode>/jssource-mapping
BASH
https://fra-api.eum-appdynamics.com/v2/account/<MyAccountName>/<androidPackageName>/<versionCode>/jssource-mapping
BASH
https://syd-api.eum-appdynamics.com/v2/account/<MyAccountName>/<androidPackageName>/<versionCode>/jssource-mapping
BASH


EUM サーバの場所の詳細については、「SaaS ドメインと IP 範囲」を参照してください。 

次のパラメータが必要です。

  • MyAccountName:URL エンコードされたバージョンのアカウント名。
  • androidPackagename:このマッピングファイルが生成された Android パッケージの名前。
  • versionCode:このマッピングファイルが生成されたアプリケーションの AndroidManifest.xml ファイルまたは build.gradle ファイルのいずれかで指定された「versionCode」プロパティの文字列表現。 

リクエスト本文にマッピングファイルが含まれます。Content-Type ヘッダー、-H Content-Type:text/plain, 、アカウント名、およびライセンスキー/パスワードをコールに追加する必要があります。 

REST API を使用したリクエストと応答の例

これは、REST API を使用した要求と応答の例です。 

アップロードのリクエスト

次の例では、curl を使用してソースマップファイルを送信します。同様のコマンドを使用すると、DexGuard マッピングファイルを送信できます。アカウント名は "Example account" であり、ライセンスキー/パスワードは "Example-License-Key-4e8ec2ae6cfe" です。アカウント名が URL エンコードされると、アカウント名のスペースはプラス記号に置き換えられます。Android アプリケーションのパッケージ名は "com.appdynamics.android.ReactNativeEveryFeature" です。マッピングファイルは、versionCode のバージョンに対応しています。

curl -v -H Content-Type:text/plain --upload-file "index.android.bundle.txt" --user Example+account:Example-License-Key-4e8ec2ae6cfe https://shadow-eum-api.appdynamics.com/v2/Example+account/SH-AAB-AAE-WNX/com.appdynamics.android.ReactNativeEveryFeature/1/Android/jssource-mapping
BASH

API では HTTP 基本認証が使用されます。ユーザー名は Splunk AppDynamics EUM アカウント名で、パスワードは EUM ライセンスキーです。

アップロードのリクエスト

次の例では、curl を使用してソースマッピングファイルを送信します。同様のコマンドを使用すると、DexGuard マッピングファイルを送信できます。アカウント名は "Example account" であり、ライセンスキー/パスワードは "Example-License-Key-4e8ec2ae6cfe" です。アカウント名が URL エンコードされると、アカウント名のスペースはプラス記号に置き換えられます。Android アプリケーションのパッケージ名は「com.example.networklogger」です。マッピングファイルは、versionCode のバージョンに対応しています。

応答のアップロード 

例のリクエストの成功した出力は次のようになります。

* About to connect() to api.eum-appdynamics.com port 443 (#0)
*   Trying ::1...
* connected
* Connected to api.eum-appdynamics.com  (::1) port 443 (#0)
* Server auth using Basic with user 'Example+account'
> PUT /v2/account/Example+account/com.example.networklogger/1/jssource-mapping HTTP/1.1
> Authorization: Basic SW50ZXJuYWwrdGVzdCthY2NvdW50OlRlc3RBY2N0LTFlMzktNDVkMy05MzAzLTRlOGVjMmFlNmNmZQ==
> User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8y zlib/1.2.5
> Host: api.eum-appdynamics.com
> Accept: */*
> Content-Length: 4
> Expect: 100-continue
>
< HTTP/1.1 100 Continue
* We are completely uploaded and fine
< HTTP/1.1 200 OK
< Content-Length: 0
< Server: Jetty(8.1.4.v20120524)
<
* Connection #0 to host api.eum-appdynamics.com left intact
* Closing connection #0
BASH
* About to connect() to fra-api.eum-appdynamics.com port 443 (#0)
*   Trying ::1...
* connected
* Connected to fra-api.eum-appdynamics.com  (::1) port 443 (#0)
* Server auth using Basic with user 'Example+account'
> PUT /v2/account/Example+account/com.example.networklogger/1/jssource-mapping HTTP/1.1
> Authorization: Basic SW50ZXJuYWwrdGVzdCthY2NvdW50OlRlc3RBY2N0LTFlMzktNDVkMy05MzAzLTRlOGVjMmFlNmNmZQ==
> User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8y zlib/1.2.5
> Host: fra-api.eum-appdynamics.com
> Accept: */*
> Content-Length: 4
> Expect: 100-continue
>
< HTTP/1.1 100 Continue
* We are completely uploaded and fine
< HTTP/1.1 200 OK
< Content-Length: 0
< Server: Jetty(8.1.4.v20120524)
<
* Connection #0 to host fra-api.eum-appdynamics.com left intact
* Closing connection #0
BASH
* About to connect() to syd-api.eum-appdynamics.com port 443 (#0)
*   Trying ::1...
* connected
* Connected to syd.eum-appdynamics.com  (::1) port 443 (#0)
* Server auth using Basic with user 'Example+account'
> PUT /v2/account/Example+account/com.example.networklogger/1/jssource-mapping HTTP/1.1
> Authorization: Basic SW50ZXJuYWwrdGVzdCthY2NvdW50OlRlc3RBY2N0LTFlMzktNDVkMy05MzAzLTRlOGVjMmFlNmNmZQ==
> User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8y zlib/1.2.5
> Host: syd-api.eum-appdynamics.com
> Accept: */*
> Content-Length: 4
> Expect: 100-continue
>
< HTTP/1.1 100 Continue
* We are completely uploaded and fine
< HTTP/1.1 200 OK
< Content-Length: 0
< Server: Jetty(8.1.4.v20120524)
<
* Connection #0 to host syd-api.eum-appdynamics.com left intact
* Closing connection #0
BASH


トークンを使用した REST API でのソースマップのアップロード

トークンベースのアップロードを使用するには、次のプロパティが有効になっていることを確認します。

MAPPING_FILE_UPLOAD_API_DISABLED: True
CODE


ソースマップファイルをアップロードするには、次の手順を実行します。

  1. ファイルをアップロードするためのトークンを生成します。
    curl -L -X GET -u <username>@<accountName>:<password> '<controller base url>/controller/restui/mobileRUMConfig/fileUploadToken'
    CODE
  2. アプリケーション ID を取得します。
    curl -L -X GET -u <username>@<accountName>:<password> '<controller base url>/controller/restui/mobileRUMConfig/getApplicationId/<App key>'
    CODE
  3. ソースマップファイルをアップロードします。
    curl -L -X POST -u <username>@<accountName>:<password> '<controller base url>/controller/restui/mobileRUMConfig/uploadSourceMappingFile/<applicationID>?token=<token>' -F 'fileData=@"<source map file PATH"' -F 'mobileAppName="<app name>"' -F 'versionCode="<code version>"' -F 'platform="<Platform>"'>
    CODE