fc2ブログ

記事一覧

AndroidX 名前空間への移行方法 -Android10の対応方法- | Xamarin.Forms


毎年恒例の Google Play Console におけるターゲットフレームワークの更新方法について、今回は2020年8月1日以降に公開する為に Android10 へ移行せねばならず、その為には新しい名前空間 AndroidX に対応する必要があり、その対応方法について、覚え書きします。
尚、ツール > オプション から 移行ツール(AndroidX Migrator)を有効にすることで AndroidX に自動で移行できると Microsoft の公式ページに書かれていましたが、実行してみましたところ、何も起きず移行はできませんでした。


前提条件
・Windows10 Pro 64Bit 1903
・Visual Studio 2019 Community v16.6.2
・Xamarin 16.6.000.1061 (NuGet Xamarin.Forms 4.6.0.1141)


1.ターゲットフレームワーク

これは皆さんご存知だと思いますが、2018年以降毎年ターゲットフレームワークは上げていくのがマストとなっています。今年は2020年8月以降に新規公開をするアプリについては Android 10 Q に設定する必要があります。
※最小 Android バージョンについては任意のバージョンのままで大丈夫です。

xamarin_androidx_01.png



2.Xamarin.Build.Download の更新

NuGet パッケージの Xamarin.Build.Download v0.10.0 への更新が必要です。
以前の記事「Xamarin.Build.Download.0.10.0 の対応方法」で覚え書きしていますので、ご参考ください。



3.Xamarin.Forms の更新

Xamrin.AndroidX 名前空間に対応する為、先に Xamarin.Forms 4.5 以降に更新する必要があります。NuGetパッケージマネージャより、インストール済みの Xamarin.Forms を更新します。私の場合は、後述の .Net Standard に対応するべく、v4.6.0.1141 をインストールしました。

xamarin_androidx_04.png



4.AndroidX 対応

Surface Duo などの2画面OSに対応するべく Google より SDK がバージョンアップしています。それゆえ、Xamarin でも AndroidX に対応する Xamarin.AndroidX 名前空間の NuGet パッケージがリリースされています。
最低限、以下のパッケージをインストールする必要があると思います。
・Xamarin.AndroidX.Browser
・Xamarin.AndroidX.Collection
・Xamarin.AndroidX.Core
・Xamarin.AndroidX.Fragment
※Xamarin.AndroidX.PercentLayout は実装方法次第で必要です。

xamarin_androidx_02.png


私の場合は、単純に AndroidX 名前空間に関連する NuGet パッケージをインストールすると、古い SDK である Android.Support.v4 や Andorid.Support.v7 などのライブラリと重複することになり、不必要にビルドされて、アプリ本体のインストール容量が増加すると考えました。AndroidX 名前空間は下位互換性が有る為、特にソースコードに関しては変更する必要が無く、using 句を置換するのみで対応が可能でした。さらには、新しくプロジェクトを作成することで 使用しなくなる NuGet パッケージも整理することにしました。そのついでに PCL プロジェクトを .Net Standard に移行してみたところ、すんなりと移行ができました。
尚、using 句の変更は以下の様に変更することで対応が可能です。

変更前変更後
using Android.Support.V4.App;使用しているクラスにより
using AndroidX.Fragment.App;
または
using AndroidX.Core.App;
using Android.Support.V4.Content;using AndroidX.Core.Content;
using Android.Support.V7.App;using AndroidX.AppCompat.App;
using Android.Support.V7.Widget;using AndroidX.AppCompat.Widget;


その他、Resources\layout\Toolbar.axml / Tabbar.axml 等のレイアウトファイルにも直接名前空間が設定されていたりします。

【変更前】
Toolbar.axml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"

Tabbar.axml
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.TabLayout xmlns:android="http://schemas.android.com/apk/res/android"


【変更後】
Toolbar.axml
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"

Tabbar.axml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.TabLayout xmlns:android="http://schemas.android.com/apk/res/android"


その他の名前空間の変更点につきましては、以下のURLをご参考ください。
https://docs.microsoft.com/ja-jp/xamarin/android/platform/androidx


詳しくは Google 公式ページの以下のURLをご確認ください。
AndroidX の概要
AndroidX への移行



5.AndroidManifest.xml の修正

FileProvider を使用している場合、または storage フォルダ内のファイルを取り扱うソースコードが存在する場合は、以下の様に AndroidManifest.xml を修正する必要があります。また、Admob で広告を表示する場合は、後述の手順で GooglePlayServices を更新する以外にも広告IDを記載する必要があります。

AndroidManifest.xml
<application android:label="ApplicationName"
android:icon="@drawable/icon"
android:networkSecurityConfig="@xml/network_security_config"
android:requestLegacyExternalStorage="true" >
 <meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-01234567890123456~9999999999"/>
<provider android:name="androidx.core.content.FileProvider"
android:authorities="APPLICATION_ID.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths">
</meta-data>
</provider>
</application>

(1) requestLegacyExternalStorage="true" は新しいファイルシステムを採用しません。Android9.0と互換があります。Android11では効力が無いようなので注意は必要です。
(2)FileProvider の名前空間を android.support.v4.content から androidx.core.content に変更します。
(3)ca-app-pub から始まる広告ID(Admob管理画面にて確認ができます。)を埋め込みます。



6.GooglePlayServices の更新

アプリ内ので Admob の広告を表示している場合は、Xamarin.GooglePlayServices 関連の最終バージョンが v71.1720.4 となっており、Xamarin.Android 名前空間に基づくものとなっています。(AndroidXに未対応なのです。)そこで、プレビューバージョンをインストールする必要があります。

※2020/10/22追記
今現在確認しましたところ、プレビューバージョンが正式リリースされているようです。動作は未確認ですが、v117 / v118 がリリースされていますので、要チェックです。

ツール > パッケージマネージャ― > パッケージマネージャコンソール より、以下のコマンドを入力してインストールします。
Install-Package Xamarin.GooglePlayServices.Ads -Version 119.1.0-preview02
Install-Package Xamarin.GooglePlayServices.Ads.Base -Version 119.1.0-preview02
Install-Package Xamarin.GooglePlayServices.Ads.Identifier -Version 117.0.0-preview02
Install-Package Xamarin.GooglePlayServices.Ads.Lite -Version 119.1.0-preview02
Install-Package Xamarin.GooglePlayServices.Basement -Version 117.2.1-preview02
Install-Package Xamarin.GooglePlayServices.Gass -Version 119.1.0-preview02
Install-Package Xamarin.GooglePlayServices.Tasks -Version 117.0.2-preview02


xamarin_androidx_03.png


NuGetパッケージマネージャのサポートページは以下の通りです。パッケージマネージャのコマンドを確認できます。
https://www.nuget.org/packages/Xamarin.GooglePlayServices.Ads/
https://www.nuget.org/packages/Xamarin.GooglePlayServices.Ads.Base/
https://www.nuget.org/packages/Xamarin.GooglePlayServices.Ads.Identifier/
https://www.nuget.org/packages/Xamarin.GooglePlayServices.Ads.Lite/
https://www.nuget.org/packages/Xamarin.GooglePlayServices.Basement/
https://www.nuget.org/packages/Xamarin.GooglePlayServices.Gass/
https://www.nuget.org/packages/Xamarin.GooglePlayServices.Tasks/

もしも不具合があれば、以下のURLより直接ソースコードをダウンロードして、カスタマイズする必要もあるかもしれません。(※私はプレビューバージョンで正常動作しましたので、行っておりません。)
https://github.com/xamarin/GooglePlayServicesComponents/tree/master_based_androidx



以上で、正常にビルドが通る状態になり、おおよその動作は確認ができましたので、2020年8月以降に Google Play Console でアプリを公開する準備ができると考えております。
※まだ非公開テストを行っており、正式リリースはしておりません。

2021/03/03追記
2020/11/13に正式リリースしております。





最後までお読みいただきありがとうございます。
当ブログの内容をまとめた Xamarin逆引きメニュー は以下のURLからご覧になれます。
https://itblogdsi.blog.fc2.com/blog-entry-81.html


関連記事

コメント

コメントの投稿

※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。

 入力されていないコメントには返信しませんのであらかじめご了承くださいませ。

※ニックネームでも良いので必ずご入力ください。

    

※必ずご入力ください。

    
    

※必ずご入力ください。

※技術的な質問には環境やエラーについて正確かつ詳細にお教えください。

・正確なエラーの内容

・Windowsのバージョン番号

・Visual Studioのバージョン

・機器の型番

・アプリやソフトのバージョン

    

カテゴリ別記事一覧

広告

プロフィール

石河 純


著者名 :石河 純
自己紹介:素人上がりのIT技術者。趣味は卓球・車・ボウリング

IT関連の知識はざっくりとこんな感じです。
【OS関連】
WindowsServer: 2012/2008R2/2003/2000/NT4
Windows: 10/8/7/XP/2000/me/NT4/98
Linux: CentOS RedHatLinux9
Mac: macOS Catalina 10.15 / Mojave 10.14 / High Sierra 10.13 / Sierra 10.12 / OSX Lion 10.7.5 / OSX Snow Leopard 10.6.8
【言語】
VB.net ASP.NET C#.net Java VBA
Xamarin.Forms
【データベース】
Oracle 10g/9i
SQLServer 2016/2008R2/2005/2000
SQLAnywhere 16/11/8
【BI/レポートツール】
Cognos ReportNet (IBM)
Microsoft PowerBI
ActiveReport (GrapeCity)
CrystalReport
【OCX関連】
GrapeCity InputMan SPREAD MultiRow GridView
【ネットワーク関連】
CCNP シスコ技術者認定
Cisco Catalyst シリーズ
Yamaha RTXシリーズ
FireWall関連
【WEB関連】
SEO SEM CSS jQuery IIS6/7 apache2

休みの日は卓球をやっています。
現在、卓球用品通販ショップは休業中です。