2013年 5月 の投稿一覧

Android studio doesn’t start.

Android studio does not start why? orz

It will start, if “JAVA_HOME or “JDK_HOME” or “ANDROID_STUDIO_JDK” is added to an environment variable.

or

“android-studio\bin\studio.bat” is edited.

@ECHO OFF

::----------------------------------------------------------------------
:: Android Studio startup script.
::----------------------------------------------------------------------
:: ↓add
SET JAVA_HOME=C:\Program Files\Java\jdk1.7.0_17
 

It came to start now.
The cause of an error understands that it sees the following source.
It will become an error if either is not set as the environment variable below.
(1)JAVA_HOME
(2)JDK_HOME
(3)ANDROID_STUDIO_JDK

▼android-studio\bin\studio.bat

:: ---------------------------------------------------------------------
:: Locate a JDK installation directory which will be used to run the IDE.
:: Try (in order): ANDROID_STUDIO_JDK, ..\jre, JDK_HOME, JAVA_HOME.
:: ---------------------------------------------------------------------
IF EXIST "%ANDROID_STUDIO_JDK%" SET JDK=%ANDROID_STUDIO_JDK%
IF NOT "%JDK%" == "" GOTO jdk
IF EXIST "%~dp0\..\jre" SET JDK=%~dp0\..\jre
IF NOT "%JDK%" == "" GOTO jdk
IF EXIST "%JDK_HOME%" SET JDK=%JDK_HOME%
IF NOT "%JDK%" == "" GOTO jdk
IF EXIST "%JAVA_HOME%" SET JDK=%JAVA_HOME%
IF "%JDK%" == "" GOTO error
 

android studioが起動しない場合

android studioをインストールしたが、起動しなかったorz

以下、誤りがありました。失礼いたしました。
android studio はjava1.7でも動作します。
検証が足りておりませんでした、申し訳ございません。
単刀直入に言うと「java1.7では動かない。」ということなので
java1.6をインストールして、環境変数にJAVA_HOMEを追加したら起動します。(JDK_HOMEでも良いみたいですね。)
訂正させいていただきますと
環境変数に以下のいずれかを追加すると起動します。
※詳しくは原因を調べたので、そちらをご覧ください。(記事後方)
JAVA_HOME=C:\Program Files\Java\jdk1.7.0_17
ANDROID_STUDIO_JDK=C:\Program Files\Java\jdk1.7.0_17
JDK_HOME=C:\Program Files\Java\jdk1.7.0_17
環境変数に追加するのは、あまり好きじゃない方は
起動スクリプトの android-studio\bin\studio.bat に以下のように追加すると起動いたします。
私はこの方法にしました。

@ECHO OFF

::----------------------------------------------------------------------
:: Android Studio startup script.
::----------------------------------------------------------------------
↓追加
:: add
SET JAVA_HOME=C:\Program Files\Java\jdk1.7.0_17
 

▼起動しなかった原因を詳しく調べてみました。
結論から言いますと studio.exe 実行時にに呼ばれる
android-studio\bin\studio.bat でエラーになっていたためです。
ファイルの先頭の方に以下のようなコメントがあり、
「Locate a JDK installation directory which will be used to run the IDE.」
これを訳すと
「IDEを実行するために使用されるJDKインストール・ディレクトリを見つけます。」
となっておりましたので
その下にある処理を読んでいったところ
以下の3つの内1つも、環境変数に設定されていないと
12行目のGOTO errorになり、起動しないということになっておりました。
(1)ANDROID_STUDIO_JDK
(2)JAVA_HOME
(3)JDK_HOME

▼android-studio\bin\studio.bat 先頭の方に記述されているソース

:: ---------------------------------------------------------------------
:: Locate a JDK installation directory which will be used to run the IDE.
:: Try (in order): ANDROID_STUDIO_JDK, ..\jre, JDK_HOME, JAVA_HOME.
:: ---------------------------------------------------------------------
IF EXIST "%ANDROID_STUDIO_JDK%" SET JDK=%ANDROID_STUDIO_JDK%
IF NOT "%JDK%" == "" GOTO jdk
IF EXIST "%~dp0\..\jre" SET JDK=%~dp0\..\jre
IF NOT "%JDK%" == "" GOTO jdk
IF EXIST "%JDK_HOME%" SET JDK=%JDK_HOME%
IF NOT "%JDK%" == "" GOTO jdk
IF EXIST "%JAVA_HOME%" SET JDK=%JAVA_HOME%
IF "%JDK%" == "" GOTO error

junitでprivateメソッド(method)をテストする方法

junitでprivateメソッドのテストしたかったので調べてみました。

このクラスのisEmpty(String)を呼び出そうと思います。

package com.ctrltf.test.sample;

class MailAddressValidator {

	public boolean validate(String mailAddress) {
		return !isEmpty(mailAddress);
	}

	private boolean isEmpty(String mailAddress) {
		return (mailAddress == null || mailAddress.length() == 0);
	}
}

こんな感じてテストすることができました。
リフレクションを使って、privateメソッドを呼び出しています。

package com.ctrltf.test.sample;

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

import java.lang.reflect.Method;

import org.junit.BeforeClass;
import org.junit.Test;

public class PrivateMethodTest {

	@BeforeClass
	public static void prepare() {

	}

	@Test
	public void sample() {

		try {
			MailAddressValidator validator = new MailAddressValidator();

			Method method = MailAddressValidator.class.getDeclaredMethod(
				"isEmpty", // メソッド名(呼び出したいprivateメソッドの名称を指定する。)
				new Class[] {
					String.class // メソッドの引数の型
				}

			);
			method.setAccessible(true); // アクセス可能にする。
			assertThat(
				(Boolean)method.invoke(validator, "system@ctrltf.com"), // "system@ctrltf.com"はメソッドの引数です。
				is(Boolean.FALSE)
			);

		} catch (Exception e) {
		    e.printStackTrace();
		}
	}
}

お試しください。