2014年12月4日木曜日

Android AndroidでGmailのメールを取得する(2)

前回からずいぶん投稿間隔が離れていました。
すみません、ブログのことをすっかり忘れてました。ページビューが地味にあったので、しっかりと書かないとだめですよね……。

前回、「セッションを取得後、Gmail Imapサーバに接続する」の項目で、「com.sun.mail.imap.protocol.IMAPSaslAuthenticator」が見当たらず、接続できないどころかClassNotFoundExceptionが吐き出される、と書きました。

自分が実装していたときには、まだGmailにOAuth2.0認証して接続するという技術情報が少なく、手探り状態でやっていたために上記のような課題にぶつかってしまったのですが、
現在では比較的AndroidでSSLメール通信しようということで、いくつかライブラリが整っているので、このような問題にぶつかることはあまりないかもしれません。

ぶつかってしまった場合は、javax.mail.jarを自分のように単純にOracleのホームページからダウンロードしてAndroidプロジェクト内のlibsに突っ込んだからだと思います。

したがって、解決方法は、以下のようなAndroid RuntimeではないクラスをIncludeしたライブラリを拝借して使わせてもらうこと!

javamail-android

※ 上記のURL先のライブラリは「javax.security」がないため、以下を利用することをお勧めします。
重ね々ね、申し訳ありません。

https://github.com/ruiaraujo/javamail_android



以上!
そうすることで、前回投稿の「5) セッションを取得後、Gmail Imapサーバに接続する」セクションの処理で正常にGmailに接続できることが確認できるかと思います。

そのあとは、所謂いつものJavaMailの使い方でjavax.mail.Folderやjavax.mail.Messageを取得して、メール内容を確認したりすることができると思います。

ただ、Gmailは所謂フォルダでメールの振り分けしているのではなく、「ラベル」で管理しているので若干癖があるので、思いついたらその部分について記載しておきたいです。

Gmail のいくつかの相違点

上記にはっきりと一般ユーザ向けにわかりやすく「Gmail にフォルダはありません。」とありますが、Gmailにもフォルダはあります。送信済みや、INBOXはフォルダ管理されています。
この部分について詳しく知りたい場合は以下のドキュメントを確認するとわかりやすいかもしれません。

IMAP Extensions

2014年1月6日月曜日

git svnからgitへの移行

ソース管理にはvss、svnと色々ありますが、そろそろgitに移行しましょう、という話がでました。
それでは、とばかりに、とあるsvnリポジトリからgitに移行しようとしましたが、これが割りと知識不足のために四苦八苦したのでメモメモ。

1) git svn cloneコマンドでsvnリポジトリを取得します

git svn clone http://svn/my_project

このとき、対象のsvnリポジトリが一般的なの構成(※ 管理の主体となる「my_project」階層配下でtrunk、brunch、tagがぶら下がっている構造)の場合、「- s」オプションを付与して実行しますが、

git svn clone -s http://svn/my_project

trunk配下に別のプロジェクトや、ドキュメントまで一括して管理しているような構造の場合、「-T」「-b」「-t」オプションでtrunk、brunch、tagの階層を明示的に指定してやる必要があります。

git svn clone -T http://svn/my_project/trunk/android/ -b http://svn/my_project/brunch/android/ -t TAGS http://svn/my_project/tag/android/

**

上記のように実行すると、最旧から最新のリビジョンまでの更新情報を取得しますので、対象のリポジトリの規模が大き過ぎると、場合によっては半日以上経っても取得が完了しない場合がありますので、「-r」オプションで最低限必要なリビジョン範囲を指定して取得することも検討します。

git svn clone -r 0001:HEAD http://svn/my_project


2) GitHub Enterprise上等でリポジトリを作成



3) 作成した後、pushコマンドで対象のリポジトリにpushします

git push -f http://git/my_project.git

このとき、ポイントとなるのは、「-f」オプションで強制pushしないと失敗してしまいます。
あまり強制pushは望ましくないですが、git svn cloneコマンドでリビジョンを取得すると、git移行後にsvnリポジトリにコミットした内容をgit上に反映したい場合、git svn rebaseで手軽に実行できます。