Outdated Kotlin Runtime

Outdated Kotlin Runtimeワーニングが出ました。Intellij ideaの画面ですが、おそらくAndroid Studioも同じでしょう。

 Your version of Kotlin runtime in 'Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.1.3-2' library is 1.1.3-2, while plugin version is 1.1.4-release-IJ2017.2-3.
 Runtime library should be updated to avoid compatibility problems.

ここで、Update Runtimeボタンをクリックしてしてみましたが、次のメッセージが表示されるだけです。

Automatic library version update for Gradle projects is currently unsupported. Please update your build.gradle manually

この場合はbuild.gradleファイルを開き、手動でバージョンを上げます。

 ext.kotlin_version = '1.1.3-2'

となっている所を

ext.kotlin_version = '1.1.4-3'

とします。

最新のバージョンはリポジトリページで見つけることができます。

これでOutdated Kotlin Runtimeワーニングが消えるはずです。

参考:
https://stackoverflow.com/questions/43928118/outdated-kotlin-runtime-warning-kotlin-plugin-1-1-2-release-studio2-3-3

Lenovo Phab 2 Pro で Project Tango 入門3

本日はPointCloudのJavaサンプルを見てみましょう。
Android StudioのでInport projectを選択し、java_point_cloud_exampleを選択してOKボタンをクリックします。

ファイル構成は以下のようになっています。

PointCloudActivity.java Javaによる点群表示サンプル。メインアクティビティです。
PointCloudRajawaliRenderer.java 点群データのレンダラーです。
 TouchViewHandler.java  標準的なパン操作とズームタッチ操作の処理を含む、VR設定のトップダウンビューと3人称ビューを追加するヘルパークラスです。
 rajawali/FrustumAxes.java public class FrustumAxes extends Line3D
FrustumとAxesの組み合わせを表すプリミティブ(基本的なもの)。錐台(すいだい、英: Frustum)は、錐体から、頂点を共有し相似に縮小した錐体を取り除いた立体図形の事。
Axesとは軸の事。
 rajawali/Grid.java public class Grid extends Line3D
現在のシーンの「床」を表すRajawaliオブジェクト。
これはシーンに配置された静的グリッドで、さまざまなビューにパースペクティブを提供します。
 rajawali/PointCloud.java public class PointCloud extends Points
色を使用して深度センサまでの距離を示すポイントクラウドをレンダリングします。
着色は光のスペクトルに基づいています。最も近い点は赤色で、最も遠くは紫色です。
rajawali/Points.java public class Points extends Object3D
Rajawaliの点のプリミティブ(基本型)です。

それでは詳しくみていきましょう。

PointCloudActivity

onCreateでは、TangoPointCloudManagerを生成しています。また、PointCloudRajawaliRendererクラス(点群データのレンダラー)のインスタンス生成を行なっています。また、DisplayManagerを取得し、画面の回転方向をmDisplayRotationメンバ変数へ保持しています。
onStartでは、bindTangoServiceメソッド内で、Tangoサービスを通常のAndroidサービスとして初期化します。
onStopでは、OpenGLスレッドまたはUIスレッドで使用されているサービスが切断するまで同期します。Tangoコールバックスレッドでこの同じオブジェクトに対してロックしないでください。すべてのTangoコールバックコールが終了するまで、Tango.disconnectはここでブロックされます。Tangoのコールバックスレッドでこのオブジェクトをロックすると、デッドロックが発生します。
bindTangoServiceではTangoサービスを通常のAndroidサービスとして初期化します。 onPauseでmTango.disconnect()を呼び出すので、これはTango Serviceのバインドを解除するので、onResumeが呼び出されるたびに新しいTangoオブジェクトを作成する必要があります。サービスがOpenGLスレッドまたはUIスレッドで使用されているときに切断に対して同期させます。
setupTangoConfigはbindTangoService内で呼ばれるメソッドで、Tango設定オブジェクトを設定します。 この呼び出しを行う前に、mTangoオブジェクトが初期化されていることを確認してください。これはデフォルトの設定を使用して、さらに深度センサーを追加します。
startupTangoもbindTangoServiceメソッド内で呼ばれるメソッドで、Tangoサービスのコールバックリスナーを設定し、Tango接続後に必要なその他のパラメータを取得します。ポイントクラウドとTangoのイベントとポーズの更新をリッスンします。
setupRendererはonCreate時に呼ばれるメソッドで、Rajawaliサーフェイスビューとそのレンダラーを設定します。 これは、理想的にはonCreateで1回だけ呼び出されます。
setupTangoUxAndLayoutもonCreate時に呼ばれるメソッドでTangoUXの設定とそのリスナーの設定を行います。イベントは、例外条件が観測されたときに「DETECTED」とみなされ、根本原因が解決されたときに「RESOLVED」とみなされます。
画面のFirstボタンを押すとカメラが現在位置に設定されます。いわゆる一人称視点になります。
Thirdボタンを押すとカメラを現在位置に設定し、Z軸に45度回転し、更にカメラをY軸に45度回した位置に固定します。いわゆる第三者視点です。
Topボタンを押すとカメラを現在位置の上部に固定し上からの俯瞰表示にします。これらボタンの処理はTouchViewHandler内で行われます。
画面上には、getAveragedDepthメソッドで計算した平均深度とポイントクラウドの数が表示されています。

PointCloudRajawaliRenderer

ポイントクラウドのデータはXYZC形式で提供されるため、ポイントあたり4つのfloatを示します。
レンダリングされたポイントクラウドを更新します。 このためには、クラウドデータを取得した時点でポイントクラウドデータとデバイスポーズが必要です。
注:これは、OpenGLレンダリングスレッドから呼び出す必要があります。
Rajawaliは左手系を使用するため、共役四元数が必要です。(共役四元数はこちらのサイトの説明がわかりやすい)
現在のデバイスポーズに関する情報を更新します。
注:これは、OpenGLレンダリングスレッドから呼び出す必要があります。
Rajawaliは四元数に対して左手系を使用するため、共役四元数が必要です。

TouchViewHandler

標準的なパン操作とズームタッチ操作の処理を含む、VR設定のトップダウンビューと3人称ビューを追加するヘルパークラスです。
 

実行する

では実行してみましょう。実行すると次の画像のような点群表示が得られます。リアルタイムでかなり高速に点群表示できている事が確認できます。ただ、点群の更新はちょっと遅れるようですね。そんなに応答性が良い感じではありませんが、スマホで使うには申し分ない速度でしょう。

 

 

 

Lenovo Phab 2 Pro で Project Tango 入門 2

前回に続き、サンプルの動作を確認していきましょう。
java_augmented_reality_exampleです。
これは、Tango APIを使用して拡張現実感(AR)アプリケーションを作成する方法を示す簡単な例です。 それは、装置の正面1メートルのところに浮かぶ惑星地球とその周りを回転する月を表示します。
この例では、OpenGLレンダリングにRajawaliを使用しています。これには、バックグラウンドでの カラーカメラ画像と、前方3mの空間に浮かぶ地球の質感を持つ3D球が含まれます。
この部分は、通常のRajawaliアプリケーションのように、{@code AugmentedRealityRenderer} クラスで実装されています。
この例では、Tango APIを使用してOpenGLテクスチャにカラーカメラデータを効率的に取得し、 拡張現実感効果を実現するためにOpenGLカメラがデバイスの動きを追跡するようにする方法に焦点を当てます。
Rajawaliの仮想世界をRGBカメラと同期させる最良の結果を得るには、 KEY_BOOLEAN_LOWLATENCYIMUINTEGRATION設定パラメータを含めることが重要です。
Rajawaliのようなレンダリングライブラリを使用しない、より抜粋した例を探しているなら、 java_hello_video_exampleを見てください。
では、import projectをクリックし、java_augmented_reality_exampleを選択してOKを押します。

RajawaliはAndroid OpenGL フレームワークです。
実行すると次のように地球と月が表示され、位置がほぼ固定されます。ただ追従はあまりよくない感じです。

 

Lenovo Phab 2 Pro で Project Tango 入門

世界初の Tango 対応スマートフォンLenovo Phab 2 Proを購入しました。

まずは開封の儀

IMG_3839
なんとパッケージから内部が見えます。Phab 2 Proの特徴であるデプスカメラ、モーション・トラッキング・カメラが見えています。
 
IMG_3840IMG_3841
かなりでかい印象です。Xperia Zと比べるとこんなにも違います。
付属品は、ACアダプタ、ヘッドフォン、USBケーブル。
早速電源に繋いで充電をします。充電されるのを待っている間に、Project Tangoについて勉強することにしましょう。
まずは、Googleのサイトから。
https://get.google.com/tango/
まずはProject Tangoの仕組みの概要です。
Tangoのコンセプト
モーショントラッキング
エリア学習
奥行き検知

サンプルプロジェクトのダウンロードと実行

https://github.com/googlesamples/tango-examples-java/archive/master.zip をダウンロードします。
Android Studioを起動して「Inport project」より、java_basic_examplesディレクトリを選択してOKを押します。

プロジェクトが開いたら、ツールバーを見るといくつかのモジュールが存在していると思います。ここからhello_motion_trackingを選択してRunボタンをおして実行してみましょう。

実行するとAndroid Studioの下部に生の姿勢データが表示されます。

では次にhello_depth_preceptionを実行してみましょう。これも同じくLogcatに生の値を吐くだけです。ただポイントクラウドはデータ量が多いからか距離の平均を出力しているようです。

Logcatを見るかぎり、おおよそ0.2秒間隔で3万6千個の点を取得出来ているようです。
次に、heloo_area_descriptinを実行してみましょう。このサンプルは先ほどまでのサンプルより複雑ですね。
Larning mode onにしてStartするとセンサーの値から領域を学習し、学習した領域をADFに保存します。
最後にhello_videoです。
このhello_videoはとてもなめらかに動き、ほぼ遅延なくRGBカメラからの画像が画面上に表示されます。
ヘッダよりこのサンプルは以下の機能を説明しています。

 このサンプルでは、RGBカメラをOpenGLテクスチャに変換します。
 単純なレンダラーで標準のAndroidのサーフェスビュー(GLSurfaceView)を作成し、ビデオレンダリング用の適切な設定でTangoサービスに接続します。
新しいRGBビデオフレームがTango APIを介して利用可能になるたびに、OpenGLテクスチャに更新され、対応するタイムスタンプがlogcatおよびスクリーンに印刷されます。
 
 Tango RGBカメラで生成された特定のテクスチャ形式をレンダリングする方法を理解するために必要な最小OpenGLコードのみが提供されています。
これらの詳細は、HelloVideoRendererで見つけることができます。
 拡張現実エフェクトを使用して実際の3Dオブジェクトをレンダリングする例をお探しの場合は、java_augmented_reality_example
および/またはjava_augmented_reality_opengl_exampleを参照してください。

 

はじめてのAndroidプログラミング 改訂版 第4章 練習問題

CHAPTER04 最強!? じゃんけんアプリ

はじめてのAndroidプログラミング 改訂版を読んだ人のステップアップに最適な練習問題です。練習問題を通じてこの章で学んだことを整理してみましょう。

1:ボタンをタップした時の処理を、setOnClickListenerメソッドで実装してみましょう。

ヒント:グー、チョキ、パーのボタンでは無名インナークラスを使わないで実装してみましょう。

2:プレイヤーが勝利した回数、コンピュータが勝利した回数を画面上に表示してみましょう。


ベストセラーが新しいレイアウトエディタに対応して大改訂。
さらに便利になったAndroid Studioでカンタン開発を極めろ!!
本書はJavaの基本は理解している人を対象に、Android StudioのレイアウトエディタのみでUIを作成し、コード補完を効果的に使いながら、なるべく労力をかけずにAndroidアプリを開発する方法を解説します。
またAndroid SDKのAPIはもちろん、実際の開発現場でよく使用されているオブジェクトデータベースRealmや、最近とみに充実してきた後方互換用サポートライブラリの活用、マテリアルデザインを応用したUI作成などについてもとりあげます。これから本格的な開発者を目指したい人にもおすすめです!!

はじめてのAndroidプログラミング 改訂版 第3章 練習問題 解答

問1:3

画面レイアウトファイルの格納先はapp/res/layoutです。

問2:

1、レイアウトエディタのonClickに、public void メソッド名(View view)を指定する

2、setOnClickListenerにView.OnClickListener()を実装したメソッドを渡す

問3:4

Androidシステムはメモリが足りなくなるとメモリを確保するため実行中でないアクティビティを強制終了することがある。


ベストセラーが新しいレイアウトエディタに対応して大改訂。
さらに便利になったAndroid Studioでカンタン開発を極めろ!!
本書はJavaの基本は理解している人を対象に、Android StudioのレイアウトエディタのみでUIを作成し、コード補完を効果的に使いながら、なるべく労力をかけずにAndroidアプリを開発する方法を解説します。
またAndroid SDKのAPIはもちろん、実際の開発現場でよく使用されているオブジェクトデータベースRealmや、最近とみに充実してきた後方互換用サポートライブラリの活用、マテリアルデザインを応用したUI作成などについてもとりあげます。これから本格的な開発者を目指したい人にもおすすめです!!

はじめてのAndroidプログラミング 改訂版 第3章 練習問題

CHAPTER03 「ちわ! あんどろいど」で初アプリ作成

はじめてのAndroidプログラミング 改訂版を読んだ人のステップアップに最適な練習問題です。練習問題を通じてこの章で学んだことを整理してみましょう。

プロジェクトの構成要素に関する次の記述で間違っているものは?

  1. app/manifestsフォルダにはアプリケーションの設定全般を管理する「xml」ファイルが格納されています。
  2. app/javaの中に作成したプログラムが格納されています。
  3. app/res/drawableには画面レイアウトファイルを格納します。
  4. app/res/menuにはメニュー項目を格納します。
  5. app/res/valuesには定数などを管理します。文字列や、色、サイズ、スタイルなどを格納します。

ボタンをタップした時の処理の実装方法を2つ挙げてください

アクティビティに関する次の記述で間違っているものは?

  1. Android StudioはEclpseをベースに開発された開発環境である。
  2. Android SDKにはコンパイラ、デバッガ、エミュレータなどの開発環境が含まれている。
  3. Intel HAXMを使うとAndroidエミュレータが高速動作する。

ベストセラーが新しいレイアウトエディタに対応して大改訂。
さらに便利になったAndroid Studioでカンタン開発を極めろ!!
本書はJavaの基本は理解している人を対象に、Android StudioのレイアウトエディタのみでUIを作成し、コード補完を効果的に使いながら、なるべく労力をかけずにAndroidアプリを開発する方法を解説します。
またAndroid SDKのAPIはもちろん、実際の開発現場でよく使用されているオブジェクトデータベースRealmや、最近とみに充実してきた後方互換用サポートライブラリの活用、マテリアルデザインを応用したUI作成などについてもとりあげます。これから本格的な開発者を目指したい人にもおすすめです!!

はじめてのAndroidプログラミング 改訂版 第2章 練習問題 解答

問1:4

Android端末に搭載された一部のセンサーにはエミュレータが対応していないものがあります。

問2:1

USBデバッグをONにし、Android端末で開発用PCを認証する必要があります。

Android端末用USBドライバのインストールは使用するOSによっては不要なこともあります。

Android Studioのアップデートは必ずしも必要ではありません。


ベストセラーが新しいレイアウトエディタに対応して大改訂。
さらに便利になったAndroid Studioでカンタン開発を極めろ!!
本書はJavaの基本は理解している人を対象に、Android StudioのレイアウトエディタのみでUIを作成し、コード補完を効果的に使いながら、なるべく労力をかけずにAndroidアプリを開発する方法を解説します。
またAndroid SDKのAPIはもちろん、実際の開発現場でよく使用されているオブジェクトデータベースRealmや、最近とみに充実してきた後方互換用サポートライブラリの活用、マテリアルデザインを応用したUI作成などについてもとりあげます。これから本格的な開発者を目指したい人にもおすすめです!!

はじめてのAndroidプログラミング 改訂版 第2章 練習問題

CHAPTER02 Android Studioを使ってみよう

ステップアップに最適な練習問題です。練習問題を通じてこの章で学んだことを整理してみましょう。

練習問題 Android開発について間違っているものは?

  1. ActivityはAndroidアプリケーションの1画面に対応する。
  2. Androidの開発では実際のAndroidデバイス(実機)がなくてもエミュレータにより動作を確認することができる。
  3. エミュレータでIntel HAMXを利用するためにはIntel x86システムイメージを利用する必要がある。
  4. Androidの実機がなくても全ての操作をエミュレータで検証することができる。

Androidの実機で開発する場合に必ず必要なことはどれでしょうか?

  1. 開発者向けプションでUSBデバッグの項目をONにする。
  2. Android端末用USBドライバのインストール。
  3. Android Studioのアップデート

 


ベストセラーが新しいレイアウトエディタに対応して大改訂。
さらに便利になったAndroid Studioでカンタン開発を極めろ!!
本書はJavaの基本は理解している人を対象に、Android StudioのレイアウトエディタのみでUIを作成し、コード補完を効果的に使いながら、なるべく労力をかけずにAndroidアプリを開発する方法を解説します。
またAndroid SDKのAPIはもちろん、実際の開発現場でよく使用されているオブジェクトデータベースRealmや、最近とみに充実してきた後方互換用サポートライブラリの活用、マテリアルデザインを応用したUI作成などについてもとりあげます。これから本格的な開発者を目指したい人にもおすすめです!!

はじめてのAndroidプログラミング 改訂版 第1章 練習問題 解答

問1:1,2

Androidアプリケーションの配布は自由です。

問2:2

シミュレータが用意されているため、Android端末がなくても開発を始められます。

問3:1

Android StudioはIntelliJ IDEAをベースに開発された開発環境です。


ベストセラーが新しいレイアウトエディタに対応して大改訂。
さらに便利になったAndroid Studioでカンタン開発を極めろ!!
本書はJavaの基本は理解している人を対象に、Android StudioのレイアウトエディタのみでUIを作成し、コード補完を効果的に使いながら、なるべく労力をかけずにAndroidアプリを開発する方法を解説します。
またAndroid SDKのAPIはもちろん、実際の開発現場でよく使用されているオブジェクトデータベースRealmや、最近とみに充実してきた後方互換用サポートライブラリの活用、マテリアルデザインを応用したUI作成などについてもとりあげます。これから本格的な開発者を目指したい人にもおすすめです!!