SSブログ

AREarthroid またもやバージョンアップ 1.2.3に [Androidアプリ AREarthroid]

AREarthroidが、またもやバージョンアップしたので宣伝。
今回のバージョンアップで、標高データにより山が表示されるようになった。

スクリーンショット10.png

まだ、1日しか経過していないのに、半数近くのユーザがバージョンアップしてくれた模様。更新が通知されるもんね。
前回、紹介したように、標高データはNASAのSRTM3を使っている。この標高データ、スペースシャトルから採集したものだとか。1度ごとにデータファイルがある。当然ながら、データがあるのは陸の部分だけ。といっても、かなりの数がある。地球全体で、海も含めると360×180なので、64,800。陸の部分が、3分の1としても、約20,000ものファイル数がある。

ひとつのファイルが約2メガ(3秒メッシュを展開後)。えーと、全体だと80,000メガ。80ギガもあることになる。陸の部分って、7分の1だっけか?
どうでもいいが、これをまじめに入れるとなるとやってられない。現実的なサイズにしなければ。

3秒メッシュのデータは、1201×1201個のデータが入っている。1度=3600秒なので、3秒ごととなっている。3秒メッシュから20ごとに取りだして、60秒メッシュを作成することにした。これで一気にデータ量は減る。さらに、apkは圧縮されるので、200k程度になった。

60秒というと実際の長さは、どのくらいなのか。計算するのがめんどうだなぁ。1kmくらいか?10kmかも。まぁ、そんなに精度がなくても十分。なにせ、ポリゴンをそんなにたくさん作れない。やってみたが、60×60のメッシュを切るのがいいところで、120×120にすると、目にみえて重たくなる。30×30だと山が崩れてしまう感じ。
気になるapkパッケージからの展開読み込みの速度であるが、そんなに悪くない。メッシュを作成するときに、標高データが必要になるわけであるが、連続した緯度、経度でのデータが要求される。ファイル読み込みはそう頻繁には行われない。というか、そうにらんでコードを書いた。C/C++ネイティブであることも効いているかも。

もともと、androidのストレージは、フラッシュメモリなので、読み込みは速いのであろう。とりあえずは、apkファイルからzip_readで展開して読み込む方式でやっている。

以下はおまけ動画



パッケージデータの共有

androidアプリは、そのアプリ専用のJavaVM内で実行される。androidでのJavaVMは、Sunのものではなく、携帯端末用に改良された「Dalvik VM」と呼ばれるもの。
アプリを起動すると、Dalvik VMがひとつプロセスとして起動され、そのVM中でアプリが実行される。androidのベースは、Linuxである。Linuxには、ユーザという概念がある。普通にPCで使うLinuxなら、ユーザは、使用する人別に作られる。PCを使用する際には、ユーザ認証を受ける必要がある。認証を受けるには、通常、パスワードを入力することで行われる(ディストリビューションの中にはユーザはrootで固定。っていうのもあるが...)

androidには、こういった使用者を選別するような機能は、OSには存在しない。携帯端末の使用者は決まっていて、ユーザはひとりだけ(昔のWindowsやDOSをイメージすればOKか)。
とはいえ、Linuxのユーザ管理機能がばっさり削除されているかというと、そうでもなく、アプリの実行権限とかで使われている。

androidアプリをインストールすると、そのアプリ用のユーザIDが割り当てられる。で、そのアプリはそのユーザIDで実行される。アプリがファイルを作成すれば、そのファイルの所有者は割り当てられたユーザとなる。
別のアプリをインストールすれば当然、別のユーザIDが割り当てられる。なので、アプリが異なれば、ユーザが異なるので、お互いにファイルを参照することはできない。

AREarthroidには、広告付きの無印AREarthroidと、有料版のAREarthroidProがある。異なるアプリなので、ユーザも別。ということは、AREarthroid中のデータをAREarthroidProで参照する、ということはできないわけである。
今回、拡張データを追加でインストールするようなしくみについても考えてみた。例えば、アメリカやヨーロッパなどの詳細衛星画像、標高データを別パッケージとして用意しておき、それらをインストールすることで、アドオンできないか。ということである。

実は、ユーザIDをAndroidManifest.xmlで指定することができる。ユーザIDが指定されていれば、androidはインストール時にそのユーザIDをそのアプリ用のユーザとする。
別のアプリであっても、同じユーザIDを指定できる。ただし、apkをエクスポートする際に、同じ署名ファイルを使用する必要がある。

AREarthroidとAREarthroidProで同じユーザIDを付けてみた。ユーザIDは、AndroidManifest.xmlのmanifestタグのandroid:sharedUserIdで指定する。ユーザIDにはひとつ以上の.が含まれていないといけない。慣例的に、パッケージ名が使用される。AREarthroidでは、以下のようにsharedUserIdを付けてみた。

AREarthroid
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cx.fam.asai.AREarthroid"
    android:versionCode="6"
    android:versionName="1.2.3"
    android:sharedUserId="cx.fam.asai.AREarthroid" >


AREarthroidPro
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cx.fam.asai.AREarthroidPro"
    android:versionCode="5"
    android:versionName="1.2.3"
    android:sharedUserId="cx.fam.asai.AREarthroid" >


NDKで作成したライブラリがnot foundとなり読み込めなくなったりしてあせった、再ビルドすることで、ロードできるようになった(デベロッパーコンソールでもこのエラーが1件報告されている。ちょっと気になる)。
これで、AREarthroidProからAREarthroidのデータを読み込むことができるようになったはず。
後は、拡張パッケージを用意して、詳細メッシュを切る場所を変更すればOK。要望があれば、作成してみたいと思っている。って、日本でしか使われていないような気がするが...



サイト内を検索

nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。



Copyright Atsushi Asai Google+朝井淳
[改訂第4版]SQLポケットリファレンス

[改訂第4版]SQLポケットリファレンス

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2017/02/18
  • メディア: 単行本(ソフトカバー)

イラストで理解 SQL はじめて入門

イラストで理解 SQL はじめて入門

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2019/05/16
  • メディア: 単行本(ソフトカバー)

[データベースの気持ちがわかる]SQLはじめの一歩 (WEB+DB PRESS plus)

[データベースの気持ちがわかる]SQLはじめの一歩 (WEB+DB PRESS plus)

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2015/03/03
  • メディア: 単行本(ソフトカバー)

Access クエリ 徹底活用ガイド ~仕事の現場で即使える

Access クエリ 徹底活用ガイド ~仕事の現場で即使える

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2018/05/25
  • メディア: 大型本

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。