RabbITを使ってAndroidのデータ通信量を削減する

RabbIT ProxyはHTMLから不要な文字やコメントを削除したり、GZIPで圧縮したり、あるいは画像データの品質を下げるような変換をすることでデータ転送量を減らすソフトウェアです。その当りの仕組みはOpera Maxと同様ですが、自分でサーバーを用意するのであれば画像の品質をどの程度まで下げるのかなど、自由にパラメータ調整を行える分だけ、より使い勝手の良い通信料削減システムを構築できます。
RabbITはJavaで開発されておりWindowsでもLinuxでも動作します。今回はLinux上に構築してみます。

Java Runtimeのインストール
詳細は説明しません。最新のJava Runtimeをインストールします。最近のディストリビューションではOpen JDKがデフォルトになっていますが、Open JDKではjpeg画像ファイルを扱えないためRabbIT Proxyが動作しません。

RabbITのインストール
RabbIT Proxyをダウンロードします。http://www.khelekore.org/rabbit/から最新のバイナリをダウンロードします。ダウンロードしたrabbit4.xx-bin.tar.gzを解答すると、rabbit4.xxというフォルダが作成されます。後はrabbit4.xxフォルダに移動して次のコマンドを実行するだけです。

java -jar jars/rabbit4.jar -f conf/rabbit.conf

パソコンのブラウザでプロキシ設定を追加して、サーバーのポート9666に接続されるようにしてみましょう。Proxyとして動作しているはずです。

RabbITの設定
このままではセキュリティ上よろしくないのでいくつか設定を変更します。設定はconf/rabbit.confを変更します。
まずはポート番号を変えておきましょう。デフォルトは9666ですが、サイコロでも振って適当なポートに割り当てます。

# This is the port the proxy listens on.
# Use any port available (over 1024 unless you run as root).
port=9666

次にProxy接続時にユーザIDとパソワードを使うように変更します。
httpinfiltersの末尾に”,rabbit.filter.ProxyAuth”を追加します。

# Here we filter the HTTP header, these filters should have an
# public static HTTPHeader doHTTPInFiltering (Socket, HTTPHeader,
# Connection)
# method that may modify the incomming request. If a HTTPHeader is
# returned it is sent to the client and the request is finished. (this
# is an easy way to block some ads and other bad stuff).
# The list is comma separated and full class names has to be used.
#
# Available filters today are:
# HttpBaseFilter   this is basically needed, use it.
# DontFilterFilter stop the proxy from filtering certain pages.
# DontCacheFilter  stop the proxy from cacheing certain pages.
# BlockFilter      Dont allow access to certain pages.
# HttpSnoop        Print the Http headers out on System.out.
# ProxyAuth        Perform proxy authentication on all users, backend is some type of db
#                  This filter needs to be after HttpBaseFilter to work correctly.
# ReverseProxy     Transform requests to "/some/page" into "http://some.host/some/page"
#                  If you use the reverse proxy option, you probably
#                  want it first in the list
# NoGZipEncoding   A filter that removes "Accept-Encoding: gzip". Not very useful anymore
#                  since rabbit can repack gzip:ed and deflated files.
# RevalidateFilter A filter that makes sure that resources are always re-validated
# SetHeaderFilter  A filter that can add request or response headers.
# SQLBlockFilter   A filter similar to BlockFilter, but that uses a sql database to block
#                  access to a set of hosts
#
# by default we use a few filters,
httpinfilters=rabbit.filter.HttpBaseFilter,rabbit.filter.DontFilterFilter,rabbit.filter.BlockFilter,rabbit.filter.RevalidateFilter,rabbit.filter.ProxyAuth

Proxyに接続するためのユーザーIDとパスワードはconf/allowedに記述します。もともと書かれている”RabbIT:RabbIT”という記述を削除して、”example:password”を追加します。
ここで再びパソコンブラウザにProxyを設定してつないでみましょう。ちゃんとユーザー認証付きでつながりますか?

AndroidのProxyを設定
昔はAndroidのProxyを設定するにはroot権限取得とか脱獄が必要でしたが、今は脱獄せずにProxyを設定するツールも出ています。わたしはDronyを使ってProxyを設定しました。

screenshotshare_20150127_002057SETTING画面を表示して”Settings for not listed networks”をクリックします。これで下の画面が表示されます。

 

 

 

 

 

 

screenshotshare_20150127_002141

NOT LISTED NETWORKS-MANUAL PROXYの項目にProxyサーバーを設定します。Proxy TypeをPlain Http Proxyに、Hostname、Port,Username、Passswordをそれぞれ設定します。

このあとDronyによるフィルタリングを有効にすると、Proxyサーバー経由で通信が行われるようになります。

 

 

 

 

ちなみに、Proxy経由だと動作しなくなるソフトも多数あります。そういうソフトはFILTERのRulesでProxyを経由しないように個別にDirectに指定します。逆にDefault valueをDirect All(Proxyを経由しない)に指定しておいて、圧縮の効くソフトだけをRulesにAllowedで追加しても良いかもしれません。

というわけで、ちょっと技術には詳しいんだという方は試してみてはいかがでしょう?

念のためいくつか注意点も・・・

※自宅で普段使っているWindowsパソコンにProxyを導入してインターネットから接続を受け付けるサーバーとして使うことはお勧めしません。サーバーをインターネットに公開したとたんに、数多くのクラッカーからの接続が始まります。業務やプライベートなデータを取り扱うパソコンをサーバーにするのはやめましょう。

※可能なら接続元IPアドレスも制限しましょう。auやDocomoのスマホや携帯電話が使用するIPアドレスの範囲は公開されていますので、それらのIPアドレスからの接続を禁止すればより安心です。

Androidでデータ通信量を節約する

どこのキャリアもデータ通信量は上限がついてしまって、使いすぎるといざというとき、ブロードバンドを使えずに困ってしまいますよね。Androidに標準でインストーリされているChromeブラウザにはデータを圧縮して通信することで、通信量を削減する機能があるので、有効にしておくとよいですよ。

screenshotshare_20150122_000536
データの圧縮を有効にするにはChromeを起動した後、メニューから設定を開きます。

screenshotshare_20150122_000207
設定画面の下のほうにある「データ使用量を節約」をクリック。

screenshotshare_20150122_000220
データ使用量を節約の画面から右上のスイッチをONに切り替えます。

ただしこのデータ圧縮機能はChrome上で閲覧した分に限られます。Opera MAXのようにすべての通信について圧縮してくれるわけではありません。ただ逆に有効になってほしくないときには、Chrome以外のブラウザから閲覧すればよいので、かえって使い分けもしやすいのでお勧めです。

参考:Chrome モバイル ブラウザでのデータ使用量を節約する

Visual Studio Tools for Apache CordovaでENOENT, no such file or directory ‘C:\Users~\.cordova\lib\android\cordova3.5.0\VERSION’が発生する

Visual Studio Tools for Apache CordovaのHello Worldに従って、新規に作成したプロジェクトをAndroidのエミュレーター上で実行しようとしても「EXEC : error : ENOENT, no such file or directory ‘C:\Users\<username>\.cordova\lib\androidc\ordova3.5.0\VERSION’」となり実行できない。Multi-Device Hybrid Apps FAQでは「C:\Users\<username>\.cordova\lib\tmp<somestring>」以下からVERSIONファイルを検索してコピーするように記載されている。実際にはVERSIONファイルだけではなくて、「C:\Users\<username>\.cordova\lib\tmp<somestring>」以下にあるファイルをすべてコピーする必要がある。

Visual Studio Tools for Apache CordovaでENOENT, no such file or directory ‘C:\Users~\.cordova\lib\android\cordova3.5.0\VERSION’が発生する

Visual Studio Tools for Apache CordovaのHello Worldに従って、新規に作成したプロジェクトをAndroidのエミュレーター上で実行しようとしても「EXEC : error : ENOENT, no such file or directory ‘C:\Users\<username>\.cordova\lib\androidc\ordova3.5.0\VERSION’」となり実行できない。Multi-Device Hybrid Apps FAQでは「C:\Users\<username>\.cordova\lib\tmp<somestring>」以下からVERSIONファイルを検索してコピーするように記載されている。実際にはVERSIONファイルだけではなくて、「C:\Users\<username>\.cordova\lib\tmp<somestring>」以下にあるファイルをすべてコピーする必要がある。

Visual Studio Tools for Apache CordovaでENOENT, no such file or directory ‘C:\Users~\.cordova\lib\android\cordova3.5.0\VERSION’が発生する

Visual Studio Tools for Apache CordovaのHello Worldに従って、新規に作成したプロジェクトをAndroidのエミュレーター上で実行しようとしても「EXEC : error : ENOENT, no such file or directory ‘C:\Users\<username>\.cordova\lib\androidc\ordova3.5.0\VERSION’」となり実行できない。Multi-Device Hybrid Apps FAQでは「C:\Users\<username>\.cordova\lib\tmp<somestring>」以下からVERSIONファイルを検索してコピーするように記載されている。実際にはVERSIONファイルだけではなくて、「C:\Users\<username>\.cordova\lib\tmp<somestring>」以下にあるファイルをすべてコピーする必要がある。

Visual Studio Tools for Apache CordovaでENOENT, no such file or directory ‘C:\Users~\.cordova\lib\android\cordova3.5.0\VERSION’が発生する

Visual Studio Tools for Apache CordovaのHello Worldに従って、新規に作成したプロジェクトをAndroidのエミュレーター上で実行しようとしても「EXEC : error : ENOENT, no such file or directory ‘C:\Users\<username>\.cordova\lib\androidc\ordova3.5.0\VERSION’」となり実行できない。Multi-Device Hybrid Apps FAQでは「C:\Users\<username>\.cordova\lib\tmp<somestring>」以下からVERSIONファイルを検索してコピーするように記載されている。実際にはVERSIONファイルだけではなくて、「C:\Users\<username>\.cordova\lib\tmp<somestring>」以下にあるファイルをすべてコピーする必要がある。

net::err_proxy_connection_failedが表示されてWEBを閲覧できない

screenshotshare_20141024_092913
AndroidでWEBなどを閲覧しているときに、net::err_proxy_connection_failedが表示されてWEBを閲覧することが出来なくなりました。AndroidのProxyサーバーの設定はちょっと深くてわかりにくいのですが「設定→Wi-Fi→接続先を長クリック→ネットワークを変更」にあります。この画面で「詳細オプションを表示」をチェックすると表示されます。

プロキシの設定が「手動」になっており、IPアドレスは127.0.0.1、ポートに3128が設定されている状態なので、プロキシの設定を「なし」にして保存します。これで正常に閲覧することが出来るようになります。

・・・が、気がつくとが元に戻ってしまいます。

screenshotshare_20141028_034907
どうやら、このProxy設定はカスペルスキーインターネットセキュリティが「危険サイトブロック」の機能を提供するために使っているようなのです。Wi-Fi接続の時だけProxy設定を有効にして実現しているというのも変な話なのですが・・・。カスペルスキーインターネットセキュリティの設定画面から「危険サイトブロック」のチェックを外すと、Proxy設定が「なし」になり、正常に閲覧できるようになりました。

Hello Android 2:Hello Worldを作ってみる

・・・と言っても、HelloWorldは日本語のページが用意されています。なので、公式のHelloWorldでは書かれていない事を中心に書いていこうと思います。
AVD(仮想Android)の作成
まずはAVD(Android Virtual Device)なるAndroidの仮想OSを設定します。通常はこの仮想OS上でデバッグをおこないます。コマンドプロンプトを起動して、Android SDKのをインストールしたフォルダ配下のToolsに移動します。ここで”android create avd –target 2 –name my_avd”と入力するとAVDが作られます。パラメータ無しでandroidと指定するとGUIが起動するので、私としてはGUIを使うのがお勧めです。
GUIを起動してVirtual Devicesを選択して、Newボタンをクリックします。表示されたダイアログから、AVDの名称、Androidのバージョン、使用メモリ、画面サイズなどを指定してCreate AVDボタンをクリックします。これでAVDが作成されます。作成したAVDを選択してStartボタンをクリックすると、AVDが起動します。
作成したAVDを初めて起動する時には、相当に時間がかかります。何分と言うレベルではなく、何十分も待つ事になるので気長に待ってください。

Hello Android 1:SDKのインストール

いままでスマートフォンを避けて来たのだけれど、IS03の発売を記念してAndoroid Programmingを始めてみようと思う。
Androidの開発者向けの情報はAndroid Developersにあります。幸いな事に一部の情報は日本語で提供されているので、あまり躓かずにスタートできると思います。
まずは開発環境の構築です。
Android用のアプリケーションは原則としてJavaで開発します。そのためにJDKの5.0または6.0が必要です。OracleのJavaホームページからJDKをダウンロードします。ここではJava SE JDK 6 Update 22を使う事にします。インストーラをダウンロードしたら、jdk-6u22-windows-i586.exeを実行しWizardに従ってインストールしていきます。
Android用の等号開発環境には原則としてEclipseを使います。ダウンロードサイトには様々な開発言語に合わせたパッケージが用意されていますが、あまりオオーバースペックなパッケージをダウンロードすると重たさに苦鳴をあげることになります。ここは無難にEclipse IDE for Java Developersあたりにしておきます。EclipseのインストールはダウンロードしたZIPファイルをインストール先のフォルダに解答するだけです。解凍後にEclipse.exeを起動すると開発環境が立ち上がります。
続いてAndroid SDKをインストールします。Android SDK ダウンロードページからWindows用のZIPファイルをダウンロードします。ダウンロードしたZIPファイルをSDKのインストール先フォルダに解凍し、SDK Manager.exeを実行します。あとはWizardにしたがってインストールするだけです。
android_sdk_install
最後にEclipseにAndroid用のプラグインをインストールします。Eclipseを起動してメニューの”Help->Install New Software”を選択して、表示されたダイアログの”Work With”にプラグインのダウンロード元URLとして”https://dl-ssl.google.com/android/eclipse/”を入力すると、名前にインストールするプラグインが表示されます。表示されたプラグインにチェックを付けたら、ウィザードに従って次に進めていってください。
eclipse_plugin
Pluginのインストールが終わったら、Eclipseを再起動してください。Eclipseのメニューの”Window->Setting”を選び設定画面を開きます。Androidという項目が増えているので、Android SDKのインストール先フォルダを指定して適用します。
eclipse_setting
以上で開発環境の準備は完了です。