# Crash SDKインストール

IMQA CrashをAndroidプロジェクトに追加すると、JavaとKotlinで開発したアプリで発生するアプリケーションの性能問題を様々な視点から確認することができます。

{% hint style="warning" %} <mark style="color:red;">**MPMインストールを実行する場合は、Androidはインストールする必要がありません。**</mark>
{% endhint %}

{% hint style="warning" %}
IMQAプロジェクトページでiOSプロジェクトを作成してプロジェクトキーを受け取ったらインストールを実行してください。
{% endhint %}

## 1. SDKインストール <a href="#sdk" id="sdk"></a>

一般的に「\<project\_dir>/app/build.gradle」にあります。

* Android Studioで「app.gradle」ファイルを開いてください。
* Repositoriesに「mavenCentral()」を追加してください。
* Dependenciesに「imqa-crash-client」を追加してください。

{% hint style="warning" %}
ファイルをアップデート後にGradleファイルを同期させる必要があります。
{% endhint %}

{% code title="app.gradle" %}

```css
// Add jcenter repository
repositories {
    mavenCentral()
}

// Add compile or implementation dependencies
dependencies {
    compile 'io.imqa:imqa-core:2.27.4'
    compile 'io.imqa:imqa-crash-client:2.27.4'

    // Add when using zstd
    implementation 'com.github.luben:zstd-jni:1.5.2-3@aar'
}
```

{% endcode %}

## 2. 基本設定 <a href="#setting" id="setting"></a>

### インターネット設定 <a href="#internet" id="internet"></a>

プロジェクトの「AndroidManifest.xml」に発生したクラッシュ情報をアップロードするため、インターネット権限を追加してください。

{% code title="AndroidManifest.xml" %}

```xml
<uses-permission android:name="android.permission.INTERNET" />
<!-- To view the LogCat contents -->
<uses-permission android:name="android.permission.READ_LOGS"/> 
```

{% endcode %}

### **IMQAController**初期化 <a href="#controller" id="controller"></a>

プロジェクトの「Application」クラスにIMQAControllerを初期化するコードを入れてください。「PROJECT\_KEY」は、IMQAサイトでプロジェクトを作成すると発行を受けることができます。

{% code title="MyApplication.java" %}

```javascript
...
  @Override
  public void onCreate() {
      super.onCreate();
      io.imqa.crash.IMQACrashAgent.InitializeAndStartSession(
          this,
          BuildConfig.FLAVOR,
          "PROJECT_KEY");
  }
...
```

{% endcode %}

{% code title="MyApplication.kt" %}

```kts
...
  override fun onCreate() {
      super.onCreate()
      io.imqa.crash.IMQACrashAgent.InitializeAndStartSession(
          this,
          BuildConfig.FLAVOR,
          "PROJECT_KEY")
  }
...
```

{% endcode %}

### **⚠️ HTTPS (API level > 27)** <a href="#https" id="https"></a>

Android API 28から強化されたネットワークセキュリティポリシーにより、HTTPリクエストが必要となりました。 これを解決するためには、以下のとおりの措置を講じる必要があります。

**• 認証されたHTTPSリクエスト**\
&#x20; IMQAサーバーで認証されたHTTPSのリクエストを行って正常に収集してください。

{% code title="MyApplication.java or MyApplication.kt" %}

```
...
imqaOption.setCrashServerUrl('https://collector.imqa.io');
...
```

{% endcode %}

**• 強制HTTPリクエスト**\
&#x20;このflagを設定すると、すべてのcleartextトラフィックに対して許可処理を実行できます。

{% code title="AndroidManifest.xml" %}

```xml
...
<application
    ...
    android:usesCleartextTraffic="true"
    />
...
```

{% endcode %}

### Zstandard圧縮アルゴリズムを使用

一般的なgzipではないセキュリティ性、圧縮効率が高くなったZstandard圧縮アルゴリズムを使用することができます。これを使用するためには、次の設定が必要です。（\* Zstandard圧縮方式は有料版のみ利用可能です。）

**MPM Mode Optionの設定**\
IMQAの開始コードを挿入するとき、設定においてzstdを使用するかどうかを設定することができます。

{% code title="MyApplication.java or MyApplication.kt" %}

```
...
imqaOption.setCompressZstd(true);
...
```

{% endcode %}

**Zstdライブラリに追加**\
「app.gradle」ファイルで「buildscript」内の「dependencies」ブロックに「zstd-jni」aarライブラリを追加します。

{% code title="app.gradle(app module)" %}

```
...
    dependencies {
    // Add dependencies.
       ...
       implementation 'com.github.luben:zstd-jni:1.5.2-3@aar'
       ...
    } 
} 
```

{% endcode %}

## **3.** ProGuard設定 <a href="#proguard" id="proguard"></a>

ProGuardは、使用しないリソースを削除してクラスやメソッドの名前を短く短縮するなど、APKを最大限小さくするためのツールです。ProGuardまたはDexGuardを使用する場合は、以下の内容を参考にしてください。マッピングファイルをアップロードすると、原本クラス・メソッド名をクラッシュレポートに表示することができます。

### 事前準備 <a href="#preparation" id="preparation"></a>

開発中のプロジェクトでProguardを使用する場合、ソースコードが難読化され解析が困難になります。このとき、作成されるmapping.txtファイルを利用すると、難読化されたコードを解析することができるようになります。

Proguardルール(proguard-rules.pro)に以下の内容を追加してください。

{% code title="proguard-rules.pro" %}

```processing
  -keepattributes SourceFile,LineNumberTable
  -printmapping map.txt

  # IMQA Proguard
  -keep class io.imqa.** { *; }
  -dontwarn io.imqa.**

  # okhttp3 Proguard
  -dontwarn okhttp3.**
  -dontwarn okio.**p
```

{% endcode %}

app/build/outputs/mapping/debug(またはrelease)/mapping.txtの位置にファイルが作成されます。(buildTypeとflavorによってファイルの位置は多少異なることがあります。)\
このように作成されたファイルを、<http://crash.imqa.io>にアクセスしてアップロードしてください。

{% hint style="danger" %}
Androidの場合、「mapping.txt」、「map.txt」などの「txt」ファイルをアップロードします。
{% endhint %}

### アップロード手順 <a href="#upload" id="upload"></a>

1\. プロジェクトメニューから設定へ移動します。

<figure><img src="https://lh7-us.googleusercontent.com/gu6L1SJiDWyYrdcW4bKLdqi0Z4N6UCis17lhNoaXd21D3PUMoruigJxzSTokdrAsXzU4BpxP9R_qQJBuvzi4o9Cb19OdJ8NSVCUom21zgAsD2JyEbSFcb-GfcjfCQlVxlKFuMO_EM_aYMVQRgtt8tQ" alt=""><figcaption></figcaption></figure>

2\. \[ファイル選択]ボタンを押してアップロードウィンドウを開いてください。

<figure><img src="https://lh7-us.googleusercontent.com/GG8hCZww4p3LklmV9AV0NWRcDaPlVrZfPwWYSJuBGPuGVcFfSQOSdqnUni1_GotUXzFbyBvh_EmKCqBIjwaQNtgIiFTy5522nt_j9-oqXFMJQZhzrbr5AwB9zT7CvEnriOkCwe6tqxENStUf5qQlLw" alt=""><figcaption></figcaption></figure>

3\. Gradleに明示されたApp versionに適した\[ファイル選択]ボタンを押してmapping.txtファイルをアップロードしてください。

<figure><img src="https://lh7-us.googleusercontent.com/CR3K90eMDvFjf80qkjGqnpZ3QV5gQQuPsfRuYX85ekr7D59ctGb_f0S6dy9SGHHQPycmoplsRepISbbT52ac76vOhjXAsJw388ByFhlhbLMzm0itbPoBSjjnwJhPLZgS8F0kEKj7Ni6gs7gUI2bvOw" alt=""><figcaption></figcaption></figure>

4\. \[登録]ボタンを押すと、以後アップロードされるクラッシュ情報は解析されて表示されます。

{% hint style="warning" %}
アプリの最新バージョンがリリースされた場合、該当するバージョンで発生したクラッシュ情報を確認するためには同じアプリバージョンのマッピングファイルを追加登録してください。
{% endhint %}

## 4. インストール型顧客の必須設定事項

IMQAインストール型をご利用される顧客会社の場合、必ず収集サーバーを設定してください。

{% code title="MyApplication.java" %}

```java
@Override
public void onCreate() {
    super.onCreate();
    io.imqa.core.IMQAOption imqaOption = new io.imqa.core.IMQAOption();

    /*
     * Default value : 'https://collector.imqa.io'
     * String : Server information
     */
    imqaOption.setCrashServerUrl('https://(ipaddress)');

    io.imqa.crash.IMQACrashAgent.InitializeAndStartSession(
        this, // Application Context
        BuildConfig.FLAVOR, // Project Flavor Setting
        "PROJECT_KEY",  // Issued project key
        imqaOption // Add an object when the option is set
    );
}
```

{% endcode %}
