こんにちは、今日は少しAndroidの開発ツールのお話をしたいと思います。

Visual Studio 2015を使ってAndroidの実機デバッグをおこなう方法とハマりがちなポイントを紹介します。

もともと社内でVisual Studio 2015でのAndroid開発環境を評価し始めたのは、Visual Studio 2015がリリースされる少し前のことでした。その時には最新のPreview版(CTP6)を使い、Android端末の実機デバッグをテストしました。

当時の個人的な感想としては、まだサポートしていない機能が幾つかあるものの、VSの操作に慣れている人にとっては大変使いやすい環境だと感じました。

Visual Studio 2015の正式リリースから時間がある程度経ち、Update 1リリースも提供されています。以前のプレビュー版で作っていた環境よりもかなり安定した環境を整えられたので、VSの新機能と共に設定上のコツなどを紹介します。

この文章で想定している対象読者

  • Windows上で主にNDKを利用するAndroidプロジェクトの開発、ビルド、実行、デバッグなど一連を全部完結したい方
  • Visual StudioでAndroidもしくはクロスプラットフォームのプロジェクトを開発したい方

なぜVisual Studio?

  • VisualStudioはインテリセンスを含めてエディターが使いやすい
  • Android実機に繋いでアプリを実行し、ブレークポイントが置かれた所に処理が止まる。その時点での変数値やメモリダンプなどが確認できたり、VisualStudioの便利な機能が当たり前に使える。

image04

  • SDK、NDKの適切なバージョンをインストール時に追加取得できる

VSでのAndroidアプリ開発を始める前にある程度理解が必要なポイント

  • Visual Studioの基本操作
  • Visual Studioのプロジェクトの基本構成

使いこなすためのポイント

  • Visual Studioのプロジェクトプロパティの設定
  • Visual Studioのビルドイベント

今回筆者が使った環境について

  • VSバージョン : Visual Studio Enterprise 2015
  • OS : Windows7 Professional
  • 端末 : Nexus5(Android 5.0)

ゼロベースからサンプルをステップ実行してみよう

まず、導入はとても簡単です。

  • ライセンス条件に従って、Visual Studio Enterprise 2015もしくはVisual Studio Community 2015のどちらかをダウンロード(Community版は企業内での利用などに制限があります。適切に判断してください)
  • Visual C++ for cross-platformのSDKやAndroid NDKなどのパッケージにチェックを付けてインストール

これだけで最低限の環境が整います。

インストールを待っている間についでに、端末の準備もしておくことをお勧めします。

  • 端末の設定画面で開発者モードをオン(開発者モードの他の設定は必要に応じてオン/オフ)
  • PCに該当するUSB Driverをインストール

次はプロジェクトのテンプレートを作って実行します。

  • 新しいプロジェクトの作成画面を開き、図1のようにプロジェクトのテンプレートを選んで作成

image01
(図1)

  • 図2のようなプロジェクトが出来上がる

image06
(図2)

ここで気を付ける点が二つあります。

一点目:
今まで通りソリューションへプロジェクトを自由に追加/削除できますが、AndroidApp.Packagingというパッケージング用プロジェクトは単体で作成することができません。このため、一旦追加したものを削除しないように注意してください。

二点目:
メニューバーの真ん中あたりに[Debug][ARM(チップ)][端末名]と表示されます。端末名がちゃんと表示されるかどうかを確認しておいてください。チップのデフォルトはx86なので、デフォルトのままでは端末名にNo Deviceと表示される場合があります。このままでは実機への転送とデバッグがおこなえません。

作ったプロジェクトをビルドします。

Ctrl + Shift + Bでビルドし、出力ウインドウを見たら、先頭にはこんなログが出力されます。

1>------ Build started: Project: AndroidApp.NativeActivity, Configuration: Debug ARM ------
1> ANDROID_HOME=C:\Program Files (x86)\Android\android-sdk
1> ANT_HOME=C:\Program Files (x86)\Microsoft Visual Studio 14.0\Apps\apache-ant-1.9.3\
1> JAVA_HOME=C:\Program Files (x86)\Java\jdk1.7.0_55
1> NDK_ROOT=C:\ProgramData\Microsoft\AndroidNDK\android-ndk-r10e\

いくつかのパスがすでに内部で設定されていることがわかります。

NDKのビルドが終わったら、自動的にantが実行され、パッケージングなどの作業を完了させます。

ここではサンプルコード中の図3の位置へブレークポイントを貼って、F5で実行してみましょう。

image03
(図3)

ブレークポイントのところで実機上の処理が中止され、ウォッチ機能でパラメータの内容を確認できます。

その後にF5で再開し、サンプルプログラムの実行が継続されることを確認できます。

既存プロジェクトをVS2015に移行する時の注意点

ここまでで出来たテンプレートプロジェクトを拡張していくと、より複雑なアプリを開発できます。一方で既に存在するプロジェクトをVS2015で開発することもできます。

が、どちらにしても単純なサンプルを超えると何かとハマるところが出てきます。

ここではAndroidAppプロジェクトを例として、よく遭遇する注意点を列挙します。

1、AndroidApp.Packagingを改造する場合

操作自体はさほど難しくありませんが、パッケージング用プロジェクトにファイルを入れる場合、参照をリンクするのではなく、ファイルがコピーされる点に注意してください。古いファイルを一度削除し、新しいファイルをAndroidApp.Packaging以下にドラッグ&ドロップするだけでokです

AndroidManifest.xmlを入れ替えた場合のみ、プロパティの中身を確認する必要があります。Package Actionの所には必ずAndroid Manifest Xmlを選んでください(図4)。

image02
(図4)

AndroidApp.Pacagkingのプロパティには幾つかデバッグに関するパラメータがあるため、事前に確認しておくことをお勧めします。

2、antに関して

antを単体で実行することも可能です。AndroidApp\ARM\Debug\Packageに対してファイルの追加/削除処理をおこないたい場合にはant debugでant単体を起動することもあるでしょう。

ただし、少し手間は発生します。

  • まず事前にantのパスを通します。
  • もしbuild.xmlがないというエラーが表示された場合、VSのビルドを一回走らせると自動的に生成されます。
  • そのbuild.xml先頭のほうにを追加し、local.propertiesを作って、sdk.dir=path/to/your/android-sdkを記入します。

image05
(図5)

  • 補足:もしjavaのソースをコンパイルする必要がある場合、ant.propertiesを作って、source.dir=absolute/path/to/java/folderを記入します。
  • ※VS2015 Update 1ではJavaのビルドやデバッグがサポートされるそうです。(2015.11.16時点でRC状態)

3、デバッグに関して

  • Androidツール(Android Device Monitorなど)が起動している最中は、VSのデバッガーを起動できません。VS2015の正式版ではちゃんとlogcatを見れるので、通常は特に他のツールを起動する必要はないはずです。
  • 既に同じパッケージ名のアプリがインストールされている場合、インストール中に出力ウインドウでUnknown Errorが出力されます。その場合はインストール済みのアプリを端末上の全ユーザで一旦アンインストールしたうえでVSから再度転送します。
  • ブレークポイントで処理を止めた際に、変数がoptimized outとして表示される場合があります。コンパイル時のoptimization levelを-O0にすれば、これらはきちんと表示されますが、当然バイナリにリリース版との差分が生じるため、追いかけているバグが発生しなくなるなどの懸念もあります。
  • デバッグシンボルに関して、AndroidApp\ARM\Debug\.gdbにデバッグシンボルが入った.soファイルが存在しないとブレークポイントが効きません。過去のプロジェクトをVS2015に移植する時によく発生します。ビルドイベントを使ってファイルをコピーすれば解決できます。

4.プロジェクトプロパティの設定

  • 一度プロジェクトプロパティを変えるとリビルドが発生します。少しミスするだけでも大きな時間の無駄につながります。
  • 新規プロジェクトを追加した時にConfiguration Typeは.soになっているかどうかを確認します。また、Use of STLに関しては必要に応じて変えるのが無難です。

image00
(図6)

ここまでを一通りおさえておけば、Visual Studio
2015を使ってAndroidアプリ(NDKメイン)を快適に開発できるでしょう。

もし記述に間違いなどを見つけられたら、是非ご指摘をください。

Kyo Shinyuu