Androidアプリの64bit化と最適化、Google Play にアプリをアップロードした時の警告と解決の記録

6 min
スポンサーリンク

Unityで初めてゲームアプリを開発してGooglePlayに公開するまでに悪戦苦闘しけど、ようやくGooglePlayでリリースされました!めっちゃ嬉しい。

Chicken Stop
開発元:KuneoApps
価格:無料(広告を含む)
平均評価: 5.0/5(合計件)
インストール:1回以上
(2019年7月18日時点)

 

今後の開発をスムーズに進めるためにも、今回つまずいて解決に至るまでの記録を残しておくことにする。

 

AdMobの導入

アプリに広告を入れるためにGoogleが提供するAdMobを導入しようとしたのだが、ここで一番ハマったと言っても過言ではない。

広告が表示されないわ、ビルド後にアプリを起動したらUnityのスプラッシュが出る前にいきなりクラッシュするわ全然うまく行かなかった。

 

UnityにAdMobを実装する基本的な流れ

①UnityでAdMobをアプリに実装するには、AdMobでアカウントを作成後に広告ユニットを作成して、アプリIDと広告IDの2種類のIDを取得する。

 

②AdMobのスタートガイド | Unity | Google Developers から『Mobile Ads Unity プラグイン』をダウンロードする

AdMob実装スクリーンショット①

 

 

③Unityのメニュー[Assets]→[Import Package]→[Custom Package...]を押して、FInderからさっきダウンロードしたプラグイン(GoogleMobileAds.unitypackage)を選択して開く。

AdMob実装スクリーンショット②

 

 

④プラグインをインポートできたら、AdMobで広告ユニットを作成した時に取得した2種類のIDを使ってC#スクリプトを作成し、空のGameObjectに紐づける。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

using GoogleMobileAds.Api;

public class AdMobManager : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        // アプリID(iOS)
        //string appId = "ca-app-pub-9872381294734172~2702154610";
        // アプリID(Android)
        string appId = "ca-app-pub-9872381294734172~3206293905";

        // Initialize the Google Mobile Ads SDK.
        MobileAds.Initialize(appId);

        RequestBanner();
    }

    private void RequestBanner()
    {

        // 広告ユニットID(iOS)
        //string adUnitId = "ca-app-pub-9872381294734172/3630478502";
        // 広告ユニットID(Android)
        string adUnitId = "ca-app-pub-9872381294734172/9468449923";
        // 広告ユニットID(Test)
        //string adUnitId = "ca-app-pub-3940256099942544/6300978111";


        // Create a 320x50 banner at the top of the screen.
        BannerView bannerView = new BannerView(adUnitId, AdSize.Banner, AdPosition.Bottom);

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();

        // Load the banner with the request.
        bannerView.LoadAd(request);

        // Create a 320x50 banner at the top of the screen.
        //bannerView = new BannerView(adUnitId, AdSize.Banner, AdPosition.Top);
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

 

 

で、実機をパソコンに繋いで Build And Ren したらビルドは成功しているのに、実機でアプリが起動直後にクラッシュして「アプリが停止しました」と実機の画面に出てきよった。

 

ビルド後にアプリ起動でクラッシュ問題の解決

ネットで検索しまくって、原因判明。

結論から言って手順が足りていなかった。

[Assets]→[Google Mobile Ads]→[Settings...]を押して画面右側にインスペクターを表示させる。

AdMob Unity側の設定不足①

 

 

はい、ここの設定が足りていなかったのが原因ですた。Google AdMob のEnabledにチェックを入れて、AdMob App ID のAndroid欄に広告ユニット作成時に取得したアプリIDを入力しておく。

AdMob Unity側の設定不足②

 

 

これで再度実機をパソコンに繋いで Build And Ren したらビルドは成功、アプリも無事起動して動かせるようになった。

が、しかし次は広告が表示されない問題にぶつかった。

 

テスト広告は表示できるのに本番広告が表示されない!

上に書いたAdMob用のC#スクリプトにもコメントアウトして書いてあるけど、テスト広告で試しにビルドしてみると、ちゃんと広告が表示されている。

ということは、アプリIDの方に問題はない。Androidの広告IDにすると広告が表示されないのだから、広告IDの方に問題があるのかと思い、片っ端から検索をかけまくると以下のサイトさんの情報が役にたった。ありがとうございます。

AdMobの広告が表示されない!その原因と対処方法 | Androidアプリ開発

この記事から恐らく僕の場合は、AdMobアカウントを作成して広告ユニットを作成したばかりで、まだGooglePlayにリリースすらしていない。そのため単純にリクエストが少なすぎて広告が表示されていないのだろうと結論づけた。

何度か実機でアプリを起動した後に少し時間を置いてからAdMobの管理ページで確認するとリクエスト数が増えていることから広告IDを間違えていたりはしていなさそう。

とりあえず広告が表示されていないけど、リリースすることを決意した。

 

 

GooglePlayに登録しようとしたら噴出したトラブル

出来上がったアプリをGooglePlayにアップロードしてみると以下の2つの警告が出てきた。

GooglePlayで表示されたメッセージ

 

 

ビルドして作成したアプリ(appファイル)が64ビットになってねーよ!ってのと、もっとアプリの容量落とせるアプリの最適化してくれよ!っていう2つの警告メッセージ。

無理やりリリースしようか迷ったけど、64ビットに対応していないアプリは確か新規で登録できなくなったって話を聞いた気がしたので、ここは対応するしかない。アプリの最適化の方もここで無理やりリリースして後々対応しなきゃならなくなることを考えると面倒なので、ここで解決してしまいたい。

ってことでネットの大海原で検索しまくって解決したのが以下の方法。

 

Google Play の64 ビット要件に準拠していません

UnityでAndroidアプリを64ビットに設定するのは簡単で、[File]→[Build Settings...]→[Player Setings...]をクリック。

Other Settings内の以下の2箇所を設定することで64ビットに対応することができる

Scripting Backend IL2CPP
Target Architectures - ARM64 チェックを入れる

Androidアプリを64ビット化①

 

こんな簡単に64ビット化出来るなんて助かるわーwと思っていたら案の定、罠があった。Spricting Backend をIL2CPP に設定してビルドするには、AndroidNDKが必要になるとのこと。

AndroidNDKは、AndroidStudioのSDK Managerからダウンロード出来るが、Mac内の隠しフォルダであるライブラリに格納されるので、Unityからビルド時に選択することができない。

仕方ないので、Android Developersサイトから最新のものをダウンロードするも、Macでビルドするには過去バージョンのAndroidNDKが必要とUnityが行ってくる。

2019年7月15日現在、Ver16bの「android-ndk-r16b」が必要とのこと。Android Developersサイトでは過去バージョンのAndroidNDKもダウンロード出来るので以下からダウンロードした。

NDK アーカイブ  |  Android NDK  |  Android Developers

 

ダウンロードしたAndroidNDKをローカルの任意のディレクトリに入れて、Unityのメニューバー[Unity]→[Preferences...]をクリック。

External Toolsの画面内の[Android NDK Installed with Unity (recommended)]のチェックを一度外し、NDK欄に「android-ndk-r16b」フォルダのパスを指定する。

Androidアプリを64ビット化②

 

その後、[Android NDK Installed with Unity (recommended)]にチェックを入れてNDK欄のパスが非表示になれば設定完了。

Androidアプリを64ビット化③

 

これで、Androidアプリの64ビットがのセッティングは完了。

 

 

APKが最適化されていません - Android App Bundle

アプリの最適化をするには Android App Bundleでビルドする必要があるのだが、UnityのBuild Settings画面にそれに該当するチェックボックスがある。

Build App Bundle (Google Play) のチェックボックスをONにするだけでOKだった。

UnityでAndroid App BundleをONにする

 

 

この設定でビルドすると、以下の2つのファイルが作成された。apkファイルは作成されない。
・アプリ名-1.0-v1.symbols.zip
・アプリ名.aab

UnityでAndroid App Bundleで作成されるファイル

 

 

Google Playにアプリをアップロードするのは「アプリ名.aab」の方で、「アプリ名-1.0-v1.symbols.zip」の方は何に使うかよくわかんない。

ちなみに.aabの拡張子だがAndroid App Bundle の略のようだ。Android App Bundle でビルドしたことによって、約20MBあったアプリサイズが半分の約10MBにおさまった。

これで、無事64ビット化とアプリの最適化が出来て、エラーや警告が出来ることなくGoogle Playにアプリをアップロードすることが出来た。

Google Play にaabファイルをアップロード成功

 

 

以上でございます。

スポンサーリンク
カテゴリー:
関連記事