プログラミング

APIレベル26(Android8)以降でのUnity5対応について

本記事は、GooglePlayでAndroidアプリを公開している開発者向けの記事となります。

最近この記事がよく読まれているので、私が現場で実際にやったときに詰まった事例と解決策を追加しました。

Googleから以下の記事で公式にアナウンスがあったとおり、2018/11以降は新規アプリのリリース、既存アプリの更新時にターゲット API レベル 26 以降が必須となります。

今後の Google Play でのアプリのセキュリティおよびパフォーマンスの改善について

なお、注意すべき点が一つ。

UnityのターゲットAPIレベルは、Player SettingsよりもPluginsフォルダ内にあるAndroidManifest.xmlの設定が優先されますので、ご注意ください。

現状、Unity5以下で開発されたアプリについては対応が必要なのですが調べてみたところバージョンによって対応方法が異なるようなので、まとめてみました。

・Unity 5.6.6以上の場合

1.Build Settings → Android → Player Settings を開く。
2.API level 26 を選択。
3.ビルドする。

・Unity 4.3.x ~ 5.6.5の場合

1.Android SDK tools version 25.1.7をダウンロードして~/$user/sdk_unity/に展開。
(無かったら新規作成。)
ダウンロードリンク (Windows | Mac | Linux)

2.コマンドプロンプトからAndroid SDK Managerを起動し、API26に変更。手順は以下。
2-1. (コマンド)cd ~/$user/sdk_unity/tools
2-2. (コマンド)./android
2-3. (UIにて選択)Build-tools 26
2-4. (UIにて選択)Platforms 26

3.UnityでPreference → External ToolsからAndroid SDK pathを~/$user/sdk_unity/toolsに修正。

4.APKビルド(Player Settingsのtarget API level を"Automatic (highest installed)"に設定。)

5.APKの AndroidManifest.xmlでtargetSdkVersion="26" となっていることを確認。

※ただし、Unityフォーラムでは、上記方法ではなくUnity 5.6.6 final versionへの更新が勧められていました。
https://forum.unity.com/threads/api-level-26-in-5-6-2f1.531852/

・Unity 4.2.x以下の場合

信頼できる回避策はなし。コンパイル済みのAPKのtargetSdkVersionを手動で調整して上手く言ったケースはあるようだけどおとなしくUnityのバージョンを引き上げたほうがよさそう。

私が実際に遭遇したトラブル

API22以下のプロジェクトをAPI26に引き上げる際に、UNIX系共有ライブラリ(.so)を使用しているケースで発生する可能性があり。

現象

API20からAPI26に上げたところ、古いNDKでビルドしたライブラリがロードできずに異常終了する現象が発生。

エラーとしては、DllNotFoundExceptionが出ます。

原因

原因は、API23以降の仕様変更。

ライブラリのテキスト再配置機能(TEXTREL)が有効である場合は、アプリ起動時にライブラリ自体がロード不可。

API22以前はログで警告表示はしていたものの、ライブラリのロードは行っていた。

最新版のNDKでビルドしたライブラリと差し替えることで対応可能。

Cのソースを用意してVisualStudioでビルドするのがラクらしい。

https://answers.unity.com/questions/678131/sqlite3dll-not-found-on-specific-android-devices.html#answer-1162976

-プログラミング
-, ,

© 2024 楽々PCライフ