# Android

<br>

:::info[バージョン管理システム移行に伴うお知らせ]
現在、本プロジェクトのライブラリは、バージョン管理システムへの移行作業中のため、詳細や今後のスケジュールにつきましては、別途アナウンスいたします。
:::

## **概要**

Android SDKは、マイナンバーカードを利用した電子証明書の取得、署名の作成、利用者の最新基本4情報（氏名・住所・生年月日・性別）に関する同意申請など、公的個人認証に必要な機能をAndroidアプリに実装するための開発キットです。  
提供される「primagest-trust-services-{version}.aar」ファイルをAndroid Studioのプロジェクトにドラッグ＆ドロップで追加することで、利用を開始できます。  
これにより、NFC機能で読み取ったマイナンバーカードを活用し、公的個人認証に必要な各種機能をAndroidアプリ上で実現できます。

## **セットアップ手順**

<Steps>
    <Step title="ファイル追加時の設定">
        ![ファイル追加時の設定.png](https://api.apidog.com/api/v1/projects/1125421/resources/371132/image-preview)
        ZIPファイルを解凍し、同梱されている「primagest-trust-services-{version}.aar」ファイルを、利用したいAndroid Studioプロジェクトのapp/libs/フォルダにドラッグ＆ドロップで追加します。追加先のディレクトリを指定し、「Refactor」ボタンをクリックします。
    </Step>
    <Step title="build.gradle.ktsの設定">
        「app/build.gradle.kts」を開き、「android」ブロックに次の設定を追加します。
        
```gradle
compileOptions {
  sourceCompatibility = JavaVersion.VERSION_17
  targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
  jvmTarget = "17"
}
packaging {
  jniLibs {
    pickFirsts += "**/libc++_shared.so"
  }
}
```
        さらに「dependencies」ブロックに次の依存関係を追加します。その後、画面右上の「Sync Project with Gradle Files」をクリックします。
        
```gradle
// SDK 本体
implementation(files("libs/primagest-trust-services-1.0.0.aar"))
// AndroidX（SDK と同系）
implementation("androidx.core:core-ktx:1.10.1")
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("com.google.android.material:material:1.10.0")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.1")  
// コルーチン（NFC API は suspend）
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3")
// mdoc / Digital Credentials
implementation("androidx.credentials:credentials:1.3.0")
implementation("androidx.credentials:credentials-play-services-auth:1.3.0")
// Verifier-API
implementation("com.jakewharton.timber:timber:5.0.1")
implementation("com.squareup.okhttp3:okhttp:4.9.3")
implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.6.0-RC.2")
implementation("org.bouncycastle:bcprov-jdk18on:1.78.1")
implementation("org.jetbrains.kotlinx:kotlinx-io-core:0.3.2")
implementation("org.jetbrains.kotlinx:kotlinx-io-bytestring:0.3.2")
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
implementation("androidx.fragment:fragment-ktx:1.7.0")
implementation("androidx.activity:activity-ktx:1.9.0")
// 券面 OCR / カメラ / QR
val cameraXVersion = "1.4.0"
implementation("androidx.camera:camera-camera2:$cameraXVersion")
implementation("androidx.camera:camera-lifecycle:$cameraXVersion")
implementation("androidx.camera:camera-view:$cameraXVersion")
implementation("com.google.mlkit:barcode-scanning:17.3.0")
implementation("org.opencv:opencv:4.13.0")
implementation("com.microsoft.onnxruntime:onnxruntime-android:1.20.0")
```
    </Step>
    <Step title="NFC利用の権限設定">
        「AndroidManifest.xml」に次の2行を追記します。
        
```xml
<!-- NFC -->
<uses-permission android:name="android.permission.NFC" />
<uses-feature
    android:name="android.hardware.nfc"
    android:required="false" />
<!-- 券面 OCR -->
<uses-permission android:name="android.permission.CAMERA" />
<!-- mdoc / BLE（mdoc 利用時） -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
    android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"
    android:usesPermissionFlags="neverForLocation"
    tools:targetApi="s" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<!-- API送信 -->
<uses-permission android:name="android.permission.INTERNET" />
```
    </Step>
    <Step title="importによるSDKの呼び出し">
        SDKを利用するKotlin/Javaコード内で「PrimagestTrustReader」をインポートすることで、SDK内の機能を使用できます。
        
```kotlin
import jp.co.primagest.trustservices.nfc.PrimagestTrustReader
```
    </Step>
</Steps>

<br>

