Tango is out of date になる

# 問題

[Tango Example](https://github.com/googlesamples/tango-examples-unity)をビルドして実行すると，Tango is out of dateと表示される．

<img src=https://qiita-image-store.s3.amazonaws.com/0/178486/b40fd266-83d4-41fa-c45b-a00bec3ca8d2.jpeg width=600>

いつもなら右上に出る，Sceneを切り替えるButtonも全て消え去っている．
とてもつらい．

# 環境

Tango Unity Example : 2017/07/11 に落としてきた版

端末 : ZenFone AR ZS571KL 64GB

Tango Core Version : 1.51

<img src=https://qiita-image-store.s3.amazonaws.com/0/178486/74371acc-7312-fc8a-bbb6-37341a213d2a.jpeg height=600>


# 原因

Tango is out of date ということで， Tango Core のバージョンが古いということが想像できる．

一応コードも見てみる．

```csharp:TangoPresentController.cs
        if (!AndroidHelper.IsTangoCorePresent())
        {
            tangoState = TangoState.NotPresent;
        }
        else if (!AndroidHelper.IsTangoCoreUpToDate())
        {
            tangoState = TangoState.OutOfDate;
        }
        else
        {
            tangoState = TangoState.Present;
        }
```

```csharp:TangoAndroidHelper.cs

    internal const int TANGO_MINIMUM_VERSION_CODE = 14694;

<中略>

    /// <summary>
    /// Check if the Tango Core package is up to date.
    /// </summary>
    /// <returns><c>true</c> if the Tango Core is up to date; otherwise, <c>false</c>.</returns>
    public static bool IsTangoCoreUpToDate()
    {
#if UNITY_EDITOR
        return true;
#else
        AndroidJavaObject tangoObject = GetTangoHelperObject();

        if (tangoObject != null)
        {
            int rawCode = tangoObject.Call<int>("getTangoCoreVersionCode");

            // The first two digits of the version code are actually the Platform version.  The real
            // code is actually the integer following those.
            string stringCode = rawCode.ToString().Remove(0, 2);
            int realCode;
            if (int.TryParse(stringCode, out realCode))
            {
                return realCode >= TANGO_MINIMUM_VERSION_CODE;
            }
        }

        return false;
#endif
    }
```

`getTangoCoreVersionCode`で取得できるバージョンの頭２桁はプラットフォームバージョン，
その後ろに続く整数が実際のTangoのバージョンであるということが分かった．

そして，想像どおりこの`getTangoCoreversionCode`で返る値が`14694`より低いことが問題だろうということが分かった．

# 対策

Tango Core を更新する．

<img src=https://qiita-image-store.s3.amazonaws.com/0/178486/ad15cc54-734c-46ce-d2e7-dd9b76db5866.jpeg height=600>

## ヒント

2017/07/12 現在，「Tango」でストア検索すると，Tango用の検索結果画面になってしまい，Tango Coreが見当たらない．

<img src=https://qiita-image-store.s3.amazonaws.com/0/178486/f57bdaa6-971b-25f9-e6f2-46f619d8c958.jpeg height=600>

「Tango Core」で検索する必要がある．

<img src=https://qiita-image-store.s3.amazonaws.com/0/178486/12cccdbc-08ae-1388-1f03-d3102965f72f.jpeg height=600>


# 解決

Tango is available! となった．

<img src=https://qiita-image-store.s3.amazonaws.com/0/178486/101e4a23-c889-1fd3-bb1b-bca3312a3e29.jpeg width=600>

2017/07/12 時点での Tango Core バージョンは `1.55` となった．

<img src=https://qiita-image-store.s3.amazonaws.com/0/178486/0d3d1a81-3df2-151e-04a2-d9d04d27a2b1.jpeg height=600>



# 蛇足

たぶん，アプリの自動更新をONにして，普通に使っていれば，この問題は起きないと思う．

たまにはTango端末を触ろう！

# 追記 - 2017/07/12 16:05

RawVersionを取って表示した．

<img src=https://qiita-image-store.s3.amazonaws.com/0/178486/19cf2a48-195d-dadc-0dc0-2359b1c5aa0e.jpeg width=800>


|Tango Core Version|1.55|1.54|1.53|1.51|
|:---|:---|:---|:---|:---|
|Tango Raw Version|0016802|0016016|0015395|0014693|

上表では，Platform versionである上2桁を削っている．

現在のTango Exampleを触るには少なくとも`1.51`よりは新しい必要がありそうだ．

<br/>

ところで，Zenfone ARではPlatform versionが`24`，Phab2 Proでは`23`となっていた[^1]．

古いTango端末をお持ちの方が居たらこの値の変化をぜひ確認いただきたい．


<br/>
<br/>



---


[^1]: Phab2 ProのTango Core Versionを`1.55`にしたら，Raw Versionは`230016802`となった．