読者です 読者をやめる 読者になる 読者になる

Xamarin + Android Wearアプリを実機にインストールする

Android Xamarin

Xamarin + Android Wearアプリを作っている際、最初はHandheldを実機・Wearをエミュレータとしていたためか、特に問題なくインストールできていました。

しかし、Handheld・Wearとも実機として開発アプリをインストールしてみようとしたところ、いろいろと悩んでしまったため、メモを残しておきます。

ただ、Android開発ついて単に慣れていないだけかもしれないため、他に良い方法があれば教えていただけるとありがたいです。

 

環境

  • Windows7 x64
  • Xamarin 評価版
    • Xamarin 3.9.344.0
    • Xamarin Studio 5.7.2 (build 7)
    • Xamarin Android 4.20.0
  • LG G Watch
    • 工場出荷状態
  • Nexus7 2012

 

インストールの方法

インストールの方法は以下の2つがあります。

  • Xamarin Studioから実機へ直接インストール
  • Xamarin Studioでapkファイルを作成し、そのapkファイルをインストール

個人的にはXamarin Studioから直接インストールするのが手軽でしたが、とりあえず2つの方法をメモしておきます。

 

Xamarin Studioから直接インストール

以下の記事を参考に、Android Wearの設定を行います。
Android WearのUSBドライバが認識しない対処法―LG G Watch

  • 開発者オプションの設定の表示
  • USBデバッグの有効化
  • Android WearとPCをUSB接続し、認識させる

 
あとは、Xamarin StudioにてWearプロジェクトのデプロイ先をLGE G Watchへと変更・ビルドすれば、LG G Watchへインストール・動作します。

 

Xamarin Studioでapkファイルを作成し、そのapkファイルをインストール

こちらはいろいろと手間がかかりますが、PCとAndroid Wearを直接接続できない場合などに使えるかと思います。

 

ソリューションのクリーン&再ビルド

Xamarin Studioでひとまず再ビルドしておきます。

 

プロジェクトWearのアプリのapkファイルを作成
  • プロジェクトWearを選択
  • メニューバーより、プロジェクト > Create Android Package ... を選択
  • ファイル名は任意のものを付けて保存
    • 今回は wearable_app.apk

 

HandheldのResourcesディレクトリへの追加
  • HandheldプロジェクトのResourcesディレクトリの下に、rawディレクトリを作成
  • 先ほど作成した、Wearアプリのapkファイル(wearable_app.apk)をrawディレクトリの中にコピー
  • HandheldプロジェクトのResourcesディレクトリの下に、xmlディレクトリを作成
  • UTF-8のBOMなしで、wearable_app_desc.xmlというファイルを、xmlディレクトリの中に作成
    • 公式ドキュメントの記載から以下の部分を変更
      • packageをAndroidManifest.xmlのパッケージ名と一致させるように変更
        • 今回は Gdg.Shinshu20
      • apkファイル名をwearable_app.apkとしているため、rawPathResIdの変更は不要
wearable_app_desc.xml
<wearableApp package="Gdg.Shinshu20">
  <versionCode>1</versionCode>
  <versionName>1.0</versionName>
  <rawPathResId>wearable_app</rawPathResId> 
</wearableApp>

 
また、rawとxmlディレクトリと中身をHandheldプロジェクトに追加する必要があるため、

  • HandheldプロジェクトにあるResourcesディレクトリで右クリック
  • 追加 > Add Existing Folder ... を選択
  • xmlとrawフォルダを追加

を行います。

 

HandheldのAndroidManifest.xmlの修正

 
最終的な内容はこちらになります。
XamarinRestsharp-sample/AndroidManifest.xml · thinkAmi-sandbox/XamarinRestsharp-sample

 

ソリューションのクリーン&再ビルド

再度実行します。

 

プロジェクトHandheldのアプリのapkファイルを作成

Wearと同様の方法で、apkファイルを作成します。

これにより、Handheldのapkファイルに、Wearのapkファイルが含まれるようになります。

 

実機へのデプロイ方法の検討

いろいろと方法がありますが、今回は

  1. Gmail経由でapkファイルをHandheldへインストール
  2. Handheldでアプリの同期を行い、apkファイルをWearへインストール

の手順としました。

ただ、apkファイルのファイルサイズが大きいため、いろいろと時間がかかります。

 

Gmail経由でapkファイルをHandheldへインストール

Handheldで使っているGoogleアカウントに、apkファイルを添付してメール送信します。

Handheldでは添付されたapkファイルを開き、インストールします。

 

Handheldでアプリの同期を行い、apkファイルをWearへインストール

以下を参考に、Android Wearアプリからアプリの再同期を実行します。
Android Wear Tips : Android Wearにアプリが反映されない場合は「アプリの再同期」を行ってみて | juggly.cn

 

インストールの確認

adbコマンドを使った確認

LG G WatchをPCにUSB接続し、デバイスを確認します。

>adb devices
List of devices attached
**************06        device  // Nexus7
**************e6        device  // LG G Watch

 
インストールされているパッケージを確認します。

>adb -s **************e6 shell pm list packages
package:com.android.inputdevices
package:com.android.bluetooth
package:com.android.providers.settings
package:Mono.Android.DebugRuntime
package:com.lge.wearable.oemconfig
package:Gdg.Shinshu20
package:com.example.android.wearable.photoswatchface
package:com.google.android.gms
package:com.google.android.music
package:com.android.location.fused
package:com.android.backupconfirm
package:com.google.android.apps.wearable.settings
package:com.google.android.apps.maps
package:com.android.providers.userdictionary
package:com.google.android.keep
package:com.ustwo.ustwowatchfaces
package:com.android.providers.contacts
package:com.lge.wearable.compass
package:com.google.android.apps.wearable.bugreportsender
package:com.google.android.apps.fitness
package:com.lge.wearable.watchface
package:com.android.defcontainer
package:com.google.android.wearable.frameworkpackagestubs
package:com.android.shell
package:com.google.android.deskclock
package:com.android.providers.media
package:com.android.providers.calendar
package:com.android.certinstaller
package:android
package:com.android.providers.downloads
package:com.google.android.clockwork.packageinstaller
package:com.lge.wearable.worldclock
package:com.google.android.wearable.app
package:com.google.android.gsf
package:com.google.android.apps.wearable.setup

package:Gdg.Shinshu20がアプリのパッケージで、存在していることが確認できました。

 

LG G Watch(実機)での確認

以下の方法でアプリを起動できるようになっています。

  • フェイス画面をタップ
  • いろいろなメニューが出るので、一番下の開始をタップ
  • Wearをタップ

なお、一度起動すれば、フェイスをタップした後のメニューにて、Wearが表示されるようになります。

 

アンインストールの流れ

Android Wearアプリのアンインストールは以下にある通り、Handheld側のアプリをアンインストール > アプリの再同期で可能です。上記のどちらのインストール方法であってもアンインストールできました。
Android Wear アプリのアンインストール : smart-watcher.jp

 
adbコマンドでも、package:Gdg.Shinshu20がなくなっていることが確認できました。

>adb -s **************e6 shell pm list packages
package:com.android.inputdevices
package:com.android.bluetooth
package:com.android.providers.settings
package:Mono.Android.DebugRuntime
package:com.lge.wearable.oemconfig
package:com.example.android.wearable.photoswatchface
package:com.google.android.gms
package:com.google.android.music
package:com.android.location.fused
package:com.android.backupconfirm
package:com.google.android.apps.wearable.settings
package:com.google.android.apps.maps
package:com.android.providers.userdictionary
package:com.google.android.keep
package:com.ustwo.ustwowatchfaces
package:com.android.providers.contacts
package:com.lge.wearable.compass
package:com.google.android.apps.wearable.bugreportsender
package:com.google.android.apps.fitness
package:com.lge.wearable.watchface
package:com.android.defcontainer
package:com.google.android.wearable.frameworkpackagestubs
package:com.android.shell
package:com.google.android.deskclock
package:com.android.providers.media
package:com.android.providers.calendar
package:com.android.certinstaller
package:android
package:com.android.providers.downloads
package:com.google.android.clockwork.packageinstaller
package:com.lge.wearable.worldclock
package:com.google.android.wearable.app
package:com.google.android.gsf
package:com.google.android.apps.wearable.setup

 

ソースコード

このような設定を行ったAndroid WearアプリをGitHubに置いておきました。
thinkAmi-sandbox/XamarinRestsharp-sample · GitHub

なお、Xamarinの評価版で開発していたので、そろそろアップデートなどができなくなるかと思います。

 

参考

Wearへのインストールについて
公式資料

 

その他

F#のXamarinプロジェクトですが、READMEの内容が充実していて分かりやすかったです。
fwaris/WearableStarter · GitHub

こちらはGoogle Playへの公開方法のようでした。もっとも、今回は公開しないため試していませんが...。
APK Signed In Debug Mode? - Xamarin Forums

 

Handheldへのインストールについて

 

HandheldとWearの実機同士のペアリングや接続など

 

スライド

GDG信州の勉強会にて、「Xamarinで作るAndroid Wear」という題で上記のアプリとともに発表しようとしたのですが病欠しました...。

せっかくなので使えなかったスライドも置いておきます。

 
なお、当日の様子は以下にまとめられています。@さん、いつもありがとうございます。