4
1

More than 3 years have passed since last update.

ToolKitを使って10分以内にGMSアプリをG+H対応に変換できました

Last updated at Posted at 2020-08-27

概要

この前の記事では、既存のAndroidアプリをHMS対応に変換する方法の概要を紹介しました。
この記事ではHuaweiが提供しているコード自動変換ツール(ToolKit)を使ってGMSアプリをGMS、HMS両方の端末で動作できるアプリに変換するやり方を紹介したいと思います。

ToolKitの紹介

まず、ToolKitの概要、原理を簡単に紹介したいと思います。

ToolKitとは

ToolKitはAndroid Studioのプラグインツールであり、HMS開発の際のコーディングアシスタント、クラウドデバッグ、クラウドテスティングや自動コード変換などの機能があります。

ToolKitの自動コード変換ツール(GitHubリンク)は、元のアプリの中で使用されたGMSのAPIを検出してG+H対応に自動変換するツールで、KotlinとJava両方に対応しています。今回は自動コード変換ツール(Convertor)を使用して、既存のGMSアプリをG+H対応に変換してみましたのでそのやり方を共有したいと思います。

変換のコストは思ったより少なく、準備作業を除いたらわずか10分以内で変換できましたので興味のある方は自分で試してみてもいいですね。

Convertor変換原理の概要

Convertorの原理について、Huaweiのオフィシャルサイトではこういう風に書かれています。

・Add HMS API: Adds the xmsAdapter, an adapter code module, based on the original code for calling third-party APIs. The adapter code can call third-party APIs or HMS APIs based on the scheduling policy. The scheduling policy is determined by you.
・To HMS API: Replaces the third-party API code in the app code with the to-be called HMS API code. The converted code directly calls the HMS APIs.

また、このページにはさらに詳しい原理が書かれています。

変換ロジックを自分なりに理解して、イメージ図を作ってみました。真ん中が元のアプリで、左側がG+H変換後のアプリ、右側がG2H変換後のアプリになります。
G+HとG2Hについて前の記事で紹介したことがありますのでわからない方はこの記事を参照してください。

xmsconvertorlogic.png

G2H変換の場合は比較的に簡単で、Convertorはアプリ内のGMSのAPIとパッケージをすべて対応するHMSのものに差し替えます(上の図の「G2H変換後のアプリ」)。

G+Hの場合(「G+H変換後のアプリ」)はちょっと複雑で、Convertorを使って変換する際に、Convertorが元のアプリ内で使用したGMSのAPIに応じて新たなモジュール(xmsadaptor)を生成します(上の図の中の緑の部分)。そして、元のコード内で使用されたGMSのAPIはすべてXMSのAPIに変換されます。

あるAPIがコールされたとき、このxmsadaptorが端末のGMS/HMSの可用性を判定し、判定結果に応じて該当するGMS/HMSのSDKのAPIを使用する形になります。

変換用デモアプリの説明

変換を試すために、GMSを使用した簡単なデモアプリを作成しました。
デモアプリでは、Google MapsとLocation SDKを使用し、アプリが起動されたらユーザーの現在地付近の地図が表示されます。
onlyg.jpg

変換前アプリをHMS端末にインストールすると、このようにGoogle Play開発者サービスが使えないというダイアログが表示されます。
onlyh.jpg

変換前アプリは一応GitHubにあげました。興味のある方は直接これを使って変換してみてくださいー
(ご自身のGoogle Cloud Platformで発行されたGoogle Maps API用のAPIキーが必要です)
GitHub: https://github.com/vptsama/GHDemo_BeforeConversion

準備

実際の変換をする前に、まずはHMSのMap SDK&Location SDKとToolKitを使用するための前準備をする必要があります。

準備その1:HMS MapとLocation SDKを使用するための設定

ステップ1:Huawei開発者アカウントの取得(無料)

HMSのSDKを使用するには、Huawei開発者アカウントを取得する必要があります。
アカウントの申請には主に以下の2つのステップがあります。

  1. Huawei IDの取得
  2. 開発者認証

2の開発者認証では、個人開発者認証と法人開発者認証の2つの選択肢がありますが、私は個人アカウントで認証し、審査はだいたい1日で終わりました。また、ただで申請できるところがありがたいですね。

詳しいガイドは以下のサイト(英語)を参照してください。
Huawei ID申請ガイド:https://developer.huawei.com/consumer/en/doc/10104
開発者認証(個人の場合):https://developer.huawei.com/consumer/en/doc/10122

ステップ2:Appgallery Connectにてアプリプロジェクトの作成、情報設定

AppGallery Connect(リンク)はHuaweiの開発者コンソールです。
コンソール内

Googleと同じように、HMSのSDKを使用するにはまずはコンソールでいろいろ設定をする必要があります。

だいたいな流れは以下のようになります。


1. アプリプロジェクの作成

上の図の「My apps」に入って次の画面の右上にある「New app」より作成できます。
image.png

2. プロジェクト詳細設定ページで署名情報を登録

ページの左上に「My apps」が表示されていますが、そこから「My projects」を選択してプロジェクトの詳細情報入力ページに入ります。General informationページでの「App information」のところにアプリの署名情報を登録できます。

3. 使用したいAPIを有効化

つぎに、ページ上部の「Manage APIs」を選択し、使用したいAPIのスイッチをオンにします。Manage API
 
4. agconnect-services.jsonファイルをプロジェクトに追加

以上の設定がすべて終わったら、最後にコンフィグファイル(agconnect-services.json)をプロジェクトに導入する必要があります。General informationページでの「App information」のところにagconnect-services.jsonをダウンロードできるボタンがありますので、それをクリックしてダウンロードできます。最後にダウンロードしたファイルをapp root directoryにコピーして設定を完了させます。

詳しいガイドは以下のサイト(英語)を参照してください。
アプリ情報設定ガイド:https://developer.huawei.com/consumer/en/doc/development/HMS-Guides/hms-map-configuringinagc

準備その2:ToolKitのインストール

ToolKitは直接Android Studioでインストールできます。
File > Settings > Plugins > MarketplaceでHMSを検索したら出てきますので簡単にインストールすることができます。
image.png

詳しいガイドは以下のサイト(英語)を参照してください。
ToolKitインストールガイド:https://developer.huawei.com/consumer/en/doc/development/Tools-Guides/installation-0000001050145206

変換のながれ

ここから実際の変換にはいります。

変換開始

まずは、Android Studioで変換したいプロジェクトを開き、ツールバーの「HMS」よりConvertor→New Conversionで変換を開始できます。New Conversionをクリックしたら次の画面が表示されます。
image.png

ここでバックアップのディレクトリーを選択して「Next」をクリックします。

スキャン結果と変換ソリューションの選択

「Next」をクリックしたらスキャンが始まり、しばらくしたら結果が表示されます。
image.png

スキャン結果を見ると、現在のファイルではどれぐらいのGMSのAPIを使用しているのか、そして自動で変換可能なAPI数が表示されていることが分かります。今回の場合、100%のGMS APIが自動でHMSに変換できます(Auto Rate: 100%)。

最後に、変換のソリューション(Add HMSかTo HMS)を選択して「Analyze」をクリックすると分析が始まります。今回は、Add HMS API(GMS API First)を選択しました。これを選択すると、GMSが使えるかどうかを優先的に判定し、GMSが使える場合はGMSを使い、GMSが使えない場合はHMSを使うように変換されます。

変換操作

分析が終わったら、操作方法が記載されてた「README.md」ファイルが最初に表示されます。そして、分析の結果が下部に表示されます。
image.png

分析結果を見ると、プロジェクト中のすべてのGMSに依頼しているところが表示されていることが分かります。

gradleファイルの改修

コードを変換する前に、まずはgradleファイルを変換する必要があります。
Fileフィルタでbuild.gradleを指定して、条目右端の空欄にチェックを入れて「Convert」をクリックするとHMSのrepositoriesやdependenciesが自動的追加されます。

image.png

次に、同じような感じてapp/build.gradleを選択してdependenciesなどを追加します。
image.png

赤字のところは自動変換できないところとなりますので、Descriptionに書かれた指示に従って手動で修正する必要があります。

最後に、フィルタをsetting.gradleにして、自動変換を実施します。
image.png

gradleファイルの変換が完了したら一度プロジェクトをSyncします。

コードの変換

Syncが終わったら、コードの変換を実行します。
FileフィルタをAllにして、gradle以外の条目にすべてチェックを入れて変換を実行します。

image.png

これで、プロジェクトの変換はすべて完了となります。

詳しいガイドは以下のサイト(英語)を参照してください。
Convertorガイド:https://developer.huawei.com/consumer/en/doc/development/Tools-Guides/convertor-0000001050147221

変換後のアプリの動作確認

変換後のアプリをHMS、GMS端末両方にインストールしてみました。
GMS端末で開いた場合は元のアプリと同じく、Google Mapが表示されます。
gmsmap.jpg

HMS端末で開いた場合は正しくHuawei Mapが表示されるようになりました。
hmsmap.jpg

このように、ToolKitのConvertorを使用すれば、既存のAndroidアプリを意外と簡単にHMS対応に変換できます。

また、気になる変換前後のAPKのサイズなんですが、
変換前:2.4MB
変換後:3.9MB
になります。2つのSDK(Map, Location)を対応して1.5MBぐらいしか増加していないのでG+H対応によるサイズの増加も許容範囲内であるかと思います。

変換後のアプリもGitHubにあげましたので変換後のコードを見たい方は直接こちらを参照してください。
(Huawei Mapを表示させるためには「準備その1」で書いた作業をご自身で行う必要があります)
GitHub: https://github.com/vptsama/GHDemo_AfterConversion

おわりに

Huaweiは世界2番目に多い出荷台数を誇るスマートフォンメーカーで、ヨーロッパでは約20%の市場シェアを持つほか、特に中国では約50%の市場シェアをもっています。ですので、アプリの海外進出を考えているのであれば、アプリをHMS対応にしてAppGalleryに登録するのが避けられない時代になってきているかと思います。
実際の変換も、このToolKitを使用すればかなり時短で終わらせることができますので、皆さんも現在のアプリをHMS対応にしてAppGalleryにリリースし、ユーザー数を拡大させながらグローバル中のHuaweiユーザーに自分のアプリを配信してみませんか?

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1