Skip to main content

Windows7 64bitにEclipseでAndroid開発環境をセットアップ

· 4 min read
Yu Sasaki
Enterprise Security Manager / Advisor

実は今までMac Bookに外部ディスプレイとキーボードを接続してデスクトップで開発していたのですが、Androidのエミュレータを起動していると地味に負荷が連続的にかかって発熱がひどくなってきたので、この度、Windows7 64bitのデスクトップPCを買いました。その際のAndroid開発環境のセットアップ(32bitと64bit環境)手順を以下に紹介します。

Java 環境のインストール

下記サイトよりJDKをダウンロード&インストール。 Java SE Downloads JDK Download 画面 ダウンロードするファイルはWindows x64 と Windows の二つ。それぞれインストールする。 64bit版 はProgram Filesフォルダに、32bit版はProgram Files (x86) フォルダにインストールされる。

C:\>java -version
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) 64-Bit Server VM (build 16.3-b01, mixed mode)

Android SDK のインストール

下記サイトよりダウンロードする。 Android SDK | Android Developers 解凍後 SDK Setup.exe を実行する。その際に下記のようなエラーが発生した場合は、 画面左部のSettingsからチェックボックス Force https://... sources to be fetched using http;//... をチェックし、使用したいSDK Versionをインストールする。

Failed to fetch URL https://dl-ssl.google.com/android/repository/repository.xml, reason: HTTPS SSL error. You might want to force download through HTTP in the settings.

Eclipse 64bit版のインストール

下記サイトよりダウンロードする。 Eclipse Project Downloads 現在の最新バージョンのリンクをクリックし「Windows (x86_64)」が64bit版Eclipseなので、クリックしてダウンロード。 追記(2010-04-26):上記の手順の中で32bit版のJDK(with JRE)をインストールしているならば、下記の日本語版Eclipse(32bit版)を使用(pathも設定)してもOK(ちなみに私は結局この方法を採りました^^;)。 Pleiades - Eclipse プラグイン日本語化プラグイン

Android Development Tools のインストール

Android Development Tools Eclipse のプラグインインストール画面で下記のURLを追加し、インストールする。 追記(2012-06-01):目にやさしいコードの配色は下記のXMLテーマを使用する。 Eclipse Color Themes 設定方法は、上部のメーニューバーより、 ウィンドウ > 設定 > 一般 > 外観 > 色テーマ > テーマのインポート よりダウンロードしたXMLファイルをインポート。 追記:上述は3.6想定でしたが、以下の手順でEclipse 3.7, Pleiades v1.3.3での日本語化ができましたので、ご参考下さい。 ■前提 Windows 7 64bit , java version “1.6.0_24″ ■ダウンロード ・http://www.eclipse.org/downloads/ のEclipse Classic 3.7の64bitをダウンロード。 ・http://mergedoc.sourceforge.jp/index.html のPleiades 1.3.3 本体ダウンロード。 ■インストール手順 1. eclipse-SDK-3.7-win32-x86_64.zipを適当なフォルダに解凍→eclipseフォルダが作成される。 2. pleiades_1.3.3.zipの中身を全てeclipseフォルダへ移動→移動中にポップアップ表示される「フォルダを統合しますか?」は「はい」で進める。 3. eclipseフォルダ内のeclipse.iniファイルの最終行に以下の文字列と最後に空行を追加(pleiadesのreadmeに記載のインストール手順)。 -javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar 4. eclipse.exeをダブルクリック (-cleanオプションなしで初回起動) 5. workspaceディレクトリを設定後、日本語化されたEclipseが起動。使用されているjavaw.exeプロセスも64bit版が使用されていることを確認。

Java: ServletからJSPへリクエストをフォワード

· One min read
Yu Sasaki
Enterprise Security Manager / Advisor

目的

Servletで処理した結果をJSPファイルに転送し、HTMLを生成する。これによって、MVCモデルにおけるViewの分離ができる。

方法

protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
ArrayList<string[]> table = new ArrayList<string[]>(); // 転送データ
<中略>
req.setAttribute("table", table);
req.getRequestDispatcher("jsp/view.jsp").forward(req, res);

上記のServletコード上のtableという変数をview.jspに渡したす場合、HttpServletRequest #setAttributeで変数を登録し、getRequestDispatcherとforwardでリクエストをフォワードする。 JSP側で登録した変数を取り出すには、下記のコードを用いる。

<% ArrayList<string[]> table = (ArrayList<string[]>)request.getAttribute("table"); %>

Java, Servlet: No suitable driver found for &quot;~&quot; の原因と解決法

· One min read
Yu Sasaki
Enterprise Security Manager / Advisor

事象 - NullPointerException on java.sql.Connection

JDBCを用いてServletからMySQLのテーブルへアクセスする過程で、DriverManager.getConnectionメソッドの呼び出しの後、NullPointerExceptionが送出された(アプリケーション・サーバーはTomcat)。

<前略>
Connection conn = null;
try {
conn = DriverManager.getConnection(URL, USER, PASS);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("<sql文>");
<後略>

tomcat_error_nullpointer

原因 - No suitable driver found for "~"

デバックトレースを行ったところ、No suitable driver found for "~"というメッセージが出力されていた。JDBC Driver のクラスパスを設定していなかった為、今回のエラーが発生した。

対策 - JDBC Driverのクラスパス設定

JDBC Driver ファイル(.jar)をクラスパスに追加する。Eclipse上での設定方法は「実行」→「実行の構成」から「クラスパス」タブ内の「ユーザー・エントリー」を選択、「外部JARの追加」ボタンから、Driverを設定する。

雑感

ありがちー、なミスをしてしまったー。

Android: mksdcardコマンドのabortingの解決法 - could not create file &#039;...&#039;, aborting...

· One min read
Yu Sasaki
Enterprise Security Manager / Advisor

下記のコマンドを入力したら、abortされてしまった。

C:\>mksdcard 256M C:\work\sdcard\sdcard.img
could not create file 'C:\work\sdcard\sdcard.img', aborting...

原因はフォルダsdcardを作成してなかった為。SDカードイメージの作成先のフォルダは予め作っておく必要がある。 フォルダ作成後改めてコマンドを入力すると上手くいった。

C:\>mksdcard 256M C:\work\sdcard\sdcard.img
C:\>

タイムスタンプ署名されたデータから利用者が確認できる情報

· One min read
Yu Sasaki
Enterprise Security Manager / Advisor

タイムスタンプ署名の生成と検証のわかりやすいフローがあったので紹介。 タイムスタンプ署名の生成、検証フロー タイムスタンプサービスSecureSealの仕組み-SecureSeal:NTTデータ タイムスタンプ署名されたデータから利用者が確認できる情報は、データのコード署名が行われた日時。

図の説明

利用者がタイムスタンプトークンをデータと一緒に取得した後、TSAの公開鍵を用いてタイムスタンプトークンを複合(7)。複合するとハッシュ値(メッセージダイジェスト)+日時(コード署名が行われた日時)を取得できるので、ここで取得できたハッシュ値と、取得したデータから算出したハッシュ値を比較し改ざんやなりすましがされていないかを確認(8)。

Android: リソースの画像ファイルの拡大・縮小描画 - drawBitmap()

· 2 min read
Yu Sasaki
Enterprise Security Manager / Advisor

画像ファイルの表示(拡大・縮小)

表示する画像はEclipse上でAndroidプロジェクト作成時に自動的に作成されるIcon画像です。 画像パス:プロジェクト名/res/drawable-hdpi/icon.png resフォルダ以下に置かれたリソースはコンパイル時にプログラムに組み込まれます。その画像リソースを読み込む際は、

Bitmap BitmapFactory.decodeResource(Resources r, int resourcesID)

を用います。読み込んだBitmapインスタンスを描画するには、Canvasクラスのインスタンスメソッドである

void drawBitmap(Bitmap image, int x, int y, Paint p)

を使います。なお、拡大・縮小する場合も上記のdrawBitmapをオーバーロードしたものを使います。

void drawBitmap(Bitmap image, Rect src, Rect dst, Paint p)

今回のサンプルプログラムでは、元画像の幅と高さを2倍したイメージを描画しています。

ImageSp.java

package info.yukun.imagesp;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
public class ImageSp extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(new ImageView(this));
}
}

ImageView.java

package info.yukun.imagesp;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Rect;
import android.view.View;
public class ImageView extends View {
private Bitmap image;
public ImageView(Context context) {
super(context);
setBackgroundColor(Color.WHITE);
// リソースの画像ファイルの読み込み
Resources r = context.getResources();
image = BitmapFactory.decodeResource(r, R.drawable.icon);
}
@Override
protected void onDraw(Canvas canvas) {
// イメージ描画
canvas.drawBitmap(image, 0, 0, null);
int w = image.getWidth();
int h = image.getHeight();
// 描画元の矩形イメージ
Rect src = new Rect(0, 0, w, h);
// 描画先の矩形イメージ
Rect dst = new Rect(0, 200, w*2, 200 + h*2);
canvas.drawBitmap(image, src, dst, null);
}
}

携帯の迷惑メールフィルタのホワイトリスト(ドメイン)設定例

· One min read
Yu Sasaki
Enterprise Security Manager / Advisor

携帯メールアドレスを分かりやすい文字列(短いor意味がある)すると迷惑メールが頻繁に来るので、迷惑メールフィルタのホワイトリスト設定で受信許可するドメインを絞ると良いかもしれません。 追記(2009-7): 許可アドレス以外は問答無用ではじいてしまうので、予期しないドメインからの重要なメールを取りこぼしてしまいます。ブラックリスト型に切り替えようかな。

ホワイトリストドメイン例

softbank.ne.jp vodafone.ne.jp ezweb.ne.jp docomo.ne.jp gmail.com me.com mac.com i.softbank.jp dk.pdx.ne.jp 迷惑メールのドメインをチェックするとyahoo.com、yahoo.co.jpやhotmail.comが多いので、これらはリストには入れませんでした。 その他、使用しているサービスからの連絡メールが受け取れるように別途ドメインを追加していけば良いかと思います。

SJC-Pに受かった

· One min read
Yu Sasaki
Enterprise Security Manager / Advisor

春先にSunがOracleに買収されて私的に気になるMySQLの形振りどうなるのかな、とか今後のOracleのロードマップ次第ではPostgreSQLのOSSとしての立場が再度見直されそう、とかSJC-P(Sun Certified Programmer for the Java Platform, Standard Edition 5.0)の名前や内容が変わるか否かが少し気になってましたが、そういった今後のことは今夏に発表らしいので(手続きや株主の訴訟が解決後)、気兼ねなくできた。 この試験はスコアが分野別にも集計してくれるので受験者の知識・技能を細かく評価するのに役立ちます。私はAPIコンテンツや並行性のセクションが100%に対してコレクション/ジェネリックスのセクションが相対的に低いという少し意外な結果が出たので、今日は自分のレベルが客観的に分かって収穫だった。

Excel VBA: 指定した行、列内のテーブルのセルに乱数を格納

· 2 min read
Yu Sasaki
Enterprise Security Manager / Advisor

excel_vba_random_cells 今回のネタは乱数でサンプルデータを生成したいときなどに使えますかね。

ソースコード

Sub randloop()
Randomize ' シードの設定(引数省略でシステムタイマーの値)
Const GYO_S As Integer = 1 ' 開始行
Const RETSU_S As Integer = 1 ' 開始列
Const GYO_E As Integer = 10 ' 終了行
Const RETSU_E As Integer = 5 ' 終了列
Const UPPER As Integer = 100 ' 乱数の最大値
Const LOWER As Integer = 0 ' 乱数の最小値
' 指定された行、列のテーブル内のセルに乱数を格納
For i = GYO_S To GYO_E
For j = RETSU_S To RETSU_E
' Rndは[0, 1)の範囲の値を返す
Cells(i, j).Value = Int((UPPER - LOWER + 1) * Rnd + LOWER)
Next j
Next i
End Sub

実行結果は上図のように0~100の範囲の乱数(今回は整数)が格納されます。 上記のコードの要の式は

(upper - lower + 1) * Rnd + lower

です。簡単に意味を説明しますと括弧内の+1はRndの戻り値の範囲が1未満の為の補正で、式の最後の+lowerはRndの戻りが0の場合の補正、と捉えます。

参考サイト

  • VBA World : 乱数の発生(関数:Rnd) その1