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
- Android 4.4
- Android Wearアプリをインストール済
- Google Playよりダウンロード・インストール
インストールの方法
インストールの方法は以下の2つがあります。
- Xamarin Studioから実機へ直接インストール
- Xamarin Studioでapkファイルを作成し、そのapkファイルをインストール
個人的にはXamarin Studioから直接インストールするのが手軽でしたが、とりあえず2つの方法をメモしておきます。
Xamarin Studioから直接インストール
以下の記事を参考に、Android Wearの設定を行います。
Android WearのUSBドライバが認識しない対処法―LG G Watch
あとは、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の変更は不要
- packageをAndroidManifest.xmlのパッケージ名と一致させるように変更
- 公式ドキュメントの記載から以下の部分を変更
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の修正
- metaタグを追加
<meta-data android:name="com.google.android.wearable.beta.app" android:resource="@xml/wearable_app_desc" />
- uses-permissionを追加
<uses-permission android:name="android.permission.INTERNET" />
- これを追加しない場合、実行時に
NameResolutionFailure
エラーでHandheld側のアプリが落ちた
最終的な内容はこちらになります。
XamarinRestsharp-sample/AndroidManifest.xml · thinkAmi-sandbox/XamarinRestsharp-sample
ソリューションのクリーン&再ビルド
再度実行します。
プロジェクトHandheld
のアプリのapkファイルを作成
Wearと同様の方法で、apkファイルを作成します。
これにより、Handheldのapkファイルに、Wearのapkファイルが含まれるようになります。
実機へのデプロイ方法の検討
いろいろと方法がありますが、今回は
- Gmail経由でapkファイルをHandheldへインストール
- 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へのインストールについて
- Google Play以外から入手した野良apkファイルをAndroidにインストールする方法 | TeraDas-テラダス
- apkファイルをAndroid端末にUSB接続でインストールする方法 (開発者ではない人向け) - [Android + Android] ぺんたん info
- apkファイルをAndroid端末(実機)にインストールする方法|Android|モバイル/スマートフォン|PHP & JavaScript Room
HandheldとWearの実機同士のペアリングや接続など
- Android Wear「LG G Watch」が届いたのでレビュー、セットアップ、開封の儀 | TeraDas-テラダス
- Android WearのUSBドライバが認識しない対処法―LG G Watch
- Android Wear端末のUSBデバッグを有効にする方法とスクリーンショットを撮影する方法 | juggly.cn
スライド
GDG信州の勉強会にて、「Xamarinで作るAndroid Wear」という題で上記のアプリとともに発表しようとしたのですが病欠しました...。
せっかくなので使えなかったスライドも置いておきます。
なお、当日の様子は以下にまとめられています。@kehiさん、いつもありがとうございます。