【Android】「Android絵文字ポリシー」に開発者が対応する事

# この記事は
2021年10月の Google Play ポリシーアップデートにより「Android絵文字ポリシー」が追加されました。

追加されたポリシーに対応するためにAndroidアプリで開発者が実装しなければならないことがいくつかあるので記事にしてみます。

# 「Android絵文字ポリシー」について簡単に解説
Googleはこれまで絵文字の更新をOSのアップデートにより新しい絵文字を追加してきました。

最新のOSを搭載する高価格帯の端末ユーザーであれば、最新の絵文字を利用できていたが、それ以外のユーザーは最新の絵文字が送られてきても表示できず豆腐と呼ばれる小さな四角い箱（☐）や、間違ってレンダリングされた絵文字シーケンスとして表示される利用できない絵文字が生じていました。

今回の「Android　絵文字ポリシー」によりOS依存であった絵文字の更新が対応アプリの更新で絵文字をアップデートするようになりました。
最新のOSを搭載する高価格帯の端末ユーザーでなくても最新の絵文字を手に入れ利用できるようになったのです。

簡単に言うと、 
**アプリ側で絵文字をサポートしてあげれば古い端末・OSのユーザーであっても最新の絵文字を利用できるよっっ！！** 
ってことです。

# 実装方法

### 前提条件
> アプリが最近の絵文字を適切に表示することを確認するには、Android 4.4（API レベル 19）から Android 10（API レベル 29）までのバージョンを搭載したデバイスでアプリを起動します。

前提条件の確認が終わりましたら早速実装していきます。
基本的に以下２つのどちらかの方法で実装可能みたいです。
- AppCompatライブラリを使用する(1.4.1以上)
- EmojiCompatを明示的に導入する

今回は、AppCompatライブラリを使用したほうが簡単そうだったのでそちらで実装しました。
何らかの理由でライブラリを使用できない場合は[こちらの記事を](https://developer.android.com/guide/topics/ui/look-and-feel/emoji2#appcompat)参考に実装してみてください。

### 依存関係
build.gradleファイルに必要なアーティファクトの依存関係を追加します。

```build.gradle
dependencies {
    def appcompat_version = "1.4.1"
    implementation "androidx.appcompat:appcompat:$appcompat_version"
    implementation "androidx.appcompat:appcompat-resources:$appcompat_version"
}
```

AppCompat:1.4.１はcompileSdkVersionが31以上に設定されている必要があります。
```diff:build.gradle
 android {
-    compileSdkVersion 30
+    compileSdkVersion 31
 }
```

### Activity

次にテキストを表示する全てのActivityで継承先をAppCompatActivityにします。
```MainActivity.java
class MainActivity extends AppCompatActivity {
 
}
```

## カスタムビューを使用している場合
カスタムビューがアプリにある場合は、それぞれがEmojiCompatを実装する必要があります。

AppCompatを仕様している場合は継承先をAppCompatのViewを継承するよう変更します。
```diff:EmojiTextView.java
- public class EmojiTextView extends TextView {
+ public class EmojiTextView extends AppCompatTextView {
```

| 変更前 | 変更後 | 
|:-----------|:------------|
| TextView   | AppCompatTextView        |
| EditText     | AppCompatEditText      |
| ToggleButton       | AppCompatToggleButton        | 
| Switch         |  SwitchCompat |
| Button       | AppCompatButton       |
| CheckedTextView    | AppCompatCheckedTextView     |
| RadioButton       | AppCompatRadioButton       |
| CheckBox    | AppCompatCheckBox     |
| AutoCompleteTextView       | AppCompatAutoCompleteTextView       |
| MultiAutoCompleteTextView    | AppCompatMultiAutoCompleteTextView |

### 確認
以上で実装は完了です。
搭載OSがAndroid10以前の端末でアプリを起動し、最新の絵文字を表示してみてください。
全ての絵文字が正しく表示されていれば成功です。

😶‍🌫️ 🧔🏻‍♀️ 🧑🏿‍❤️‍🧑🏾	 : [13.1](https://emojipedia.org/emoji-13.1/)
🥲 🥷🏿 🐻‍❄️ : [13.0](https://emojipedia.org/unicode-13.0/)
🧑🏻‍🦰 🧑🏿‍🦯 👩🏻‍🤝‍👩🏼 : [12.1](https://emojipedia.org/emoji-12.1/)
🦩 🦻🏿 👩🏼‍🤝‍👩🏻 : [12.0](https://emojipedia.org/emoji-12.0/)



## こんな感じ
|  変更前  |  変更後  |
| ---- | ---- |
| ![スクリーンショット 0004-05-26 14.52.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2644766/3864cc8d-9da0-e534-e28d-c97ae786b860.png)  |  ![スクリーンショット 0004-05-26 14.53.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2644766/65950551-a04f-02a4-4874-02dd9b306e81.png)  |

絵文字って絵文字同士を組み合わせて出来てるのかな？

## 最後に

初めて記事を書いてみましたが誰かの参考になれば幸いです！！

ではまた！！


## 参考
https://www.youtube.com/watch?v=ozc6LPv4tZ4

https://developer.android.com/guide/topics/ui/look-and-feel/emoji2