初歩的なミス

Google Android WebAPIプログラミング入門

を参考に、アプリのマッシュアップの勉強していましたが
JSON解析のところで初歩的なミスをしました
JUnit Test を行っていて、
エラーがでてくるため、一度ソースを見直してみたのですが
理由がわからず、いろいろと探してみました
もう少しログを見れば、HttpStatus.SC_OK
のところで
エラーがでていて、この原因が まだAndroidManifest.xml で
android.permission.INTERNET
を記述していないのが原因だと気づけたのですが….
すでに、修正したためエラーがでなくなりましたが
今後は同じミスがでたときのために、
エラーログもメモしておこうと思います

意外と遅い実機でのログ出力


を参考に、実機でアプリの動作をみています
使用している機体は

実機での検証をするにはUSBでつないで、アプリを実行するのですが
この参考書に掲載されている実機での通信関連のアプリの実行結果は、
ログへ出力されるというものでした
最初はわからず、画面がなにも変わらないと悩みましたが
実際にはログへ出力されていました
ログは Eclipse でも確認できます
Eclipse の画面で window > show view > other > android > Logcat
で見ることができます
ただ、このアプリのログはすぐにはでてきませんでした
いままで、エミュレータとくらべて、かなり速いので
ログ出力もかなり速いのかと思ったのですが
意外と時間がかかりました
とはいっても数分もかからない程度ですが
端末からもログの確認をすることも可能です
パスが通してあるなら、
adb logcat
でログをみることができます
途中で終了するには ctrl + c で終了します
(ubuntu の場合)

Android 実機で検証


を参考に、HTMLとJavaScript を使ったプログラムを実機で行って見ました
今回、実機に使用したのは

実機検証にあたり、実機を登録するのに参考にしたのが
過去に実験した
Ziio 7 を開発環境に利用

日経Linux 2011-05

です
ちなみに、adb コマンドを使うには
最新のAndroid SDKと adb その2
に記述するようにパスを通しておく必要があります
バイブレータ機能などは、エミュレータでは検証できないため
実機検証する必要があります

ちょっと意味不明なアプリの実行


を参考に、アプリ開発の勉強をしています
今回は、じゃらんのアプリを作成していて
117ページのアプリ実行のときに、起動できないことが続いたので
いろいろと動かしてみました
前回は、JUnit でつまづいたこともあり、まずはいろいろと実験してみました
このときの対処は
今回、試してみたのは
MainActicity を右クリック > Build Path > Exclude を実行し
パッケージが白くなったら
もう一度 MainActivity を右クリック > Buid Path > include
としたら実行できました
一度、プロジェクトを削除し
再度サンプルをインポートしたらできたので、
なにか途中で失敗していたのかもしれません
とりあえず、これで先にすすめるようになりました

アプリアップデートの注意点


を参考に、セキュリティの勉強をしています
今回は、root 権限奪取型のウイルスについてです
過去に HotGirl というアプリが配布されていました
このアプリは、画像を閲覧するだけのアプリで
当初のバージョンでは無害でした
しかし、バージョンアップのときに
マルウェアコードが追記され、
必要な権限として
ネットワーク接続
通話機能
へのアクセスを求められるようになりました
この root 権限奪取型の一番恐ろしいところは
バックドアを作成され
root 権限を奪取されること
そして、
root 権限を奪取するマルウェアは駆除できず
OSを初期化しても駆除は不可能
セキュリティソフトをつかっても駆除不可能
ということです
初期化すらも無効なのは
OSの初期化は一般ユーザ権限で保存されたものを削除するため
root を奪取された場合、初期化しても意味はない
そして
セキュリティソフトは一般ユーザ権限のため、
root 権限を奪取するマルウェアは駆除できないということです
今回書籍で紹介されたマルウェアで
有名どころとしては
Google SSearch というアプリ
(似ている名前で、かなり紛らわしい)

インストールしてしまうと
root 権限の奪取
バックドアの生成
が行われるようです
root 権限奪取されたときの対策としては
Android SDK を使い手動で削除
もしくは
Google からウイルスごとに個別に提供されるセキュリティツール
Android Market Security Tool を使うことになるようです
幸い、ウイルスに感染したことはまだありませんが
初期化も無効、セキュリティソフトも効かない
となると、自分で駆除する方法を身につけるしかないようです

Androidとマルウェア


を参考に、セキュリティの勉強です
今回は、マルウェアについてです
マルウェアは、トロイやスパイウェアなどをいうようです
ちょっと昔だと、ウイルスでひとくくりだったのですが
有名なものとして、トロイの木馬のGEINIMI
そして、セキュリティソフトやユーザ権限で削除できない
DroidDream があるようです
iPhoneのときのエクスプロイトと同様に、Android にも
古いバージョンには脆弱性があり、これをつかっていろいろと攻撃されますので
アップデートは必須です
あと、マルウェアの対策として
インストールするときに表示される権限についてよく見ることが重要になります
今回、書籍で紹介されたマルウェアとして
Tap Snake がありますが
これは蛇をうごかすゲームアプリなのに
ネットワーク接続
GPS位置情報
端末がスタンバイモードにならないようにする
ということを要求されます
ちなみに、パソコンのアプリでもおなじですが
基本的に同意しないとアプリはつかえませんし、インストールも
できません
インストールするときには、権限について見ることが重要なのですが
権限と機能に対する知識が必要になるうえ、見逃しやすいので
対応は難しいかもしれません

Android 1と iPhone のウイルス


を参考に、 今回は Android と iPhone のウイルスに関して勉強しています
とはいっても、現在しようしているのは Android で
iPhone ではなく iPod touch 32GB を使っています

まず、iPhone 関連からですが、通称「脱獄」と言われる
JailBreak を行っているかどうかが一番のポイントになります
Jailbreakme.com にアクセスし、Free/install を実行するだけでできるそうですが
セキュリティが極端に低下します
Jailbreakは PDF エクスプロイトを利用して行っているようです
Apple の対応として配布している iOS4.3.4 を適用している場合
これはできなくなります
(エクスプロイトは脆弱性をつくプログラムなので、塞ぐと実行できなくなります
Windows アップデートも、これらと同様に、脆弱性対策なので
実行するようにしましょう)

アプリの外部ストレージ保存の注意点

Android 2.2 以降は、アプリを外部ストレージ
例えば microSD などに保存することができるようになりました
しかし、このアプリの保存についても
注意すべき点があるようです
現在、アプリ作成をしていますが、開発する側でも
いろいろと外部保存については問題があったりします
今回は、
アプリケーションのインストール領域を考える (Dev Guild – App Install Location 和訳
を参考にさせていただきました
とくに気をつけたいのがサービス系です
外部ストレージをアンマウントした時
外部ストレージが再マウントされてもリスタートされないということです

AndroidエミュレータでのGPS使用

Android エミュレータでGPSアプリの作成をしようとしましたが
位置情報の取得をしようとしたまま止まってしまうため
原因をさぐるべく検索
参考サイトは
AndroidでGPSを使ってみる

Android 位置が取得できないのはなぜ?
そして
AndroidでGPSセンサを利用する方法
です
どうやら、Android エミュレータの設定で、GPS Support が yes になっていないこと
そして、
エミュレーターを動かしている状態で、
eclipseのメニューから windows > show view > other

Emulator Control を選択し
位置情報を送信していないのが原因のようです
一度このほうほうで検証してみます
どうしてもうまくいかない場合、仮想環境で実験したり
実機検証してみようと思います

Android アプリ作成時には、パーミッションに注意

最近、じゃらんアプリ作成をしようとして、JUnit を使っていました
なぜか、テストをしてもエラーになり、ネットの画像などが
参照できないので、ソースを調べたりしていましたが
初歩的なミスでした
原因は、
AndroidManifest.xml へ
<uses-permission android:name=”android.permission.INTERNET”></uses-permission>
を記述するのを忘れていたため、ネットアクセスができていませんでした
機能、Google Map の座標取得アプリを勉強中に
AndroidManifest.xml を編集している時に気づきました