2013 年 11 月 8 日

アンドロイドのSDカードパスの取得方法

3074-logo

今回は、アンドロイドのSDカードパスの取得方法をご紹介します。一般的には、Environment.getExternalStorageDirectory()を利用すれば取得できるだろうと考えがちですが、実はSDカードのパスとは限りません。Externalという言葉が外部とかSDカードを連想しがちですが、どちらかというと拡張と考えると理解しやすいです。

KitKatの詳細が公開されましたが、SDカードに関する扱いはまた異なってくるかもしれません。KitKatが早急に広まることで、Gingerbread対応(2.3)をしなくてよくなれば、本当に助かるのですが、各ベンダーごとの実装が存在するので、そう簡単にはいかないでしょう。

続きを読む »

2013 年 9 月 7 日

アンドロイドアプリのメモリ容量を取得する(後編)

3041-logo

前編では、/proc/meminfoの内容を元にアンドロイドで利用できるメモリ量の求め方を考察した。後編では、動作している各アプリのメモリ利用量の取得方法と、そこから利用可能メモリ量を推察してみたい。

アンドロイドアプリの起動はzygote(DVMのデーモン)が実行する。zygoteから起動(fork)された各アプリが必要なメモリを占有するが、共通部分まで、アプリごとに占有してしまうとあっという間にメモリが不足してしまう。

そこで、COW(Copy On Write)と呼ばれる手法で、起動時はzygoteとメモリ空間を共有している(shared)。その後、必要になれば、アプリ専用のメモリ(private)に置き換わる。

それに加えて、各アプリ内では、必要のなくなったメモリを回収するガベージコレクションを実行し、空きメモリを確保しようとする。できるだけメモリを効率よく扱うために、非常に複雑なメモリ管理が行われている。

続きを読む »

2013 年 9 月 6 日

アンドロイドアプリのメモリ容量を取得する(前編)

3024-logo

アンドロイドはLinuxカーネル(2.6.x-3.x)をベースにしたOSに、JavaVM(DalvikVM)を実装しており、複雑なメモリ管理を行っている。

スマートフォンの限られたリソース環境の中で、アプリケーションが快適に動作するように設計されている。メモリが足りなくなるとアプリが突然終了したり、処理速度が遅くなるので、一般のユーザーもメモリがどれぐらい空いているかといったことに関心があるだろう。

設定で実行中のアプリのメモリ利用量を見ることができるが、これは具体的にはどこの値を見てるのだろうか。スマートフォンのスペックから搭載されているメモリ容量はわかるが、実際利用できるメモリ量はどれぐらいだろうか。

続きを読む »

2013 年 9 月 3 日

アンドロイドアプリのinstallLocationを取得する

3010-logo

前回はキャッシュ消去するためにハイドメソッドを利用した方法を紹介したが、ハイドメソッドだけでなくハイドアトリビュートが存在する。
たとえば、アンドロイドアプリのManifestには、インストールロケーションを指定できる(Android2.2以上)。この指定はこのアプリがSDに移動可能かどうかを設定する。
この値をわかれば、事前にSDカードへ移動可能かどうか知ることが可能になる。しかし、この値を取得するAPIは存在しない。
AndroidManifest.xmlを読もうとしても難読化されているので、簡単には読めないだろう。

続きを読む »

2013 年 9 月 2 日

アンドロイドアプリのキャッシュ削除

2995-logo

アンドロイドアプリは、必要に応じてキャッシュデータを保存する。
アプリを使っている間に、いつのまにかキャッシュが増加して、ストレージを圧迫していくことになる。
アプリのキャッシュは設定のアプリケーション管理で、消去できる。またAndroid4.2からは一括でキャッシュを消去する機能が追加された。
4.2より前のOSで、全てのアプリのキャッシュを一括消去するには、キャッシュクリーナーやタスクキラーと呼ばれるユーティリティアプリを使うとよいだろう。

ゲームや役に立つアプリをいきなり作ろうと思っても、まずアイデアが浮かばないのが現実だろう。そんなときは、ユーティリティアプリから始めて見るのはいいかもしれない。

続きを読む »

2013 年 5 月 19 日

PhoneGapでGoogle Cloud Messagingを利用する

PhoneGapでGoogle Cloud Messagingを利用する

[PhoneGap,Monaca]

PhoneGapはHTML5/CSS3,JavascriptでiOS,Androidアプリが開発できるハイブリッドアプリ作成ツールです。Titaniumとは違って、Javascriptをコンパイルしてネィティブアプリにするのではなく、アプリの中のブラウザ上でHTML5+Javascriptが動作します。

しかし、開発環境の構築方法、他の開発ツールの利用方法も理解しておく必要があるので、依然プログラミング経験者でないと敷居が高い部分もあります。

そういった前準備なしに、すぐに始められる統合開発環境として、Monacaがあります。MonacaはブラウザのみでPhoneGapアプリが開発できます。

続きを読む »

2013 年 5 月 19 日

apkファイルアップローダーを作る(第1回)

apkファイルアップローダーを作る

[jQuery File Upload]

アップロードしたapkファイルをapktoolでデコードして、アプリの情報を返すコマンドライン形式apkファイルアップローダーを作成してみたいと思います。今回は、jQuery File Uploadのサーバーサイドの実装を利用して作成します。

jQuery File Uploadはjqueryを使って、Webページからファイルアップロードするライブラリです。マルチファイル選択・ドラッグ&ドロップ・プログレスバー・イメージプレビューなど多くの機能を備えています。サーバサイドの実装もPHP,Python,Ruby,Perl,Node.js,Go,Java,Scala,ASP.NETと、非常に多くの言語をサポートしています。
jQuery File Uploadのデモページでは、bootstrapを利用していますが、必須ではありません。

続きを読む »

2013 年 5 月 11 日

話題のParseのandroid SDKを使ってみた

話題のParseのandroid SDKを使ってみた

[Parse]

Parseはモバイル用BaaS(Backend as Service)を提供していますが、今回、Webホスティングサービスもリリースされました。Cloud Codeというサービスで、Javascript SDKを使ったJavascriptアプリをParse Cloudで動作させることができます。

もちろん、htmlや画像などもアップロードすることができます。使い方はHerokuと似た感じで利用できそうです(Webホスティングはファイル容量は10MBで、ファイル数は500filesまでとなっています)。

今回は、BaaSで提供されているAndroid SDK(他にiOS,OSx,Android,JavaScript,.NET用が用意されています)を使って、アンドロイドアプリから、Parseの使い方をご紹介します。SDK以外に、他にREST APIやPush Notificationも用意されていて、モバイルアプリの開発をサポートしてくれます。

続きを読む »

2013 年 5 月 10 日

アンドロイドアプリからGoogle Cloud Messagingを使う方法(第3回)

アンドロイドアプリからGoogle Cloud Messagingを使う方法(第3回)

[Google Cloud Messageing]

今回は、サーバサイドの実装方法について、説明します。サーバサイドでは、GCMサーバから通知を受信したクライアントアプリからレジストレーションID登録・解除要求を受け付けて、レジストレーションIDを管理する必要があります。サーバアプリから端末へメッセージを送信するには、このレジストレーションIDに対しメッセージを指定して、送信します。

サーバアプリはPHPとcurlコマンドを利用します。レジストレーションIDを登録・解除するプログラムはPHPで実装して、メッセージ送信はcurlコマンドで実行します。

続きを読む »

2013 年 5 月 9 日

アンドロイドアプリからGoogle Cloud Messagingを使う方法(第2回)

アンドロイドアプリからGoogle Cloud Messagingを使う方法(第2回)

[Google Cloud Messageing]

前回は、GCMを利用するためのGoogle API consoleからサーバーキーを生成するところを説明しました。GCMはクライアントのアプリ(以後、クライアントアプリとします)だけではなく、メッセージを送信するサーバーサイドのプログラム(以後、GCMサーバと区別するためサーバアプリとします)が必要です。

サーバアプリのプログラムはPHPを利用します。どちらから説明すればいいのかは、にわとりが先か卵が先かのような話になりますが、まずは、クライアントアプリの実装から説明します。GCMのサンプルとして、androids-sdkにgcm-demo-clientがありますので、このソースコードを解説する形で説明していきます。

続きを読む »