2013年8月31日土曜日

Android StudioでNineOldAndroidsを使う

NineOldAndroidsとは

Honeycombから追加された新しいアニメーションAPIをGingerbread以前でも使えるようにするライブラリ。

公式サイト
NineOldAndroids
http://nineoldandroids.com/

GitHub
JakeWharton/NineOldAndroids
https://github.com/JakeWharton/NineOldAndroids

環境

・Mac OS X 10.8.4
・Android Studio (I/O Preview) 0.2.6

ライブラリをプロジェクトに追加

こちらのサイトでNineOldAndroidsを検索。
Gradle, please
http://gradleplease.appspot.com/


検索結果に出てきた
compile 'com.nineoldandroids:library:2.4.0'
をbuild.gradleのdependenciesに追加。

使ってみる

ViewPropertyAnimatorのさわりだけ。

animateまで入力してコード補完を実行するとNineOldAndroidsのViewPropertyAnimator.animate()が出てくる。

使い方はこんな感じ。

anime()にカーソルを合わせて[option] + [enter]で、animate()メソッドをstatic importにしておくとコーディングで楽が出来る。

以上。

Eclipseで使ってみたメモはこちら。
NineOldAndroidsを使ってみた
http://neta-abc.blogspot.jp/2013/03/nineoldandroids.html

2013年8月30日金曜日

Android StudioでProGuard

Android StudioでProGuardを使ってみたのでメモ。

環境

・Mac OS X 10.8.4
・Android Studio (I/O Preview) 0.2.6

build.gradle

1. runProguard trueでProGuardを有効化

2. proguardFile file('proguard-project.txt')でプロジェクト固有のProGuard設定ファイルを指定
(proguard-project.txtをルートプロジェクトのルートディレクトリに作成)

3. proguardFile getDefaultProguardFile('proguard-android.txt')でプロジェクト共通のProGuard設定ファイルを指定
(<sdk-root>/tools/proguard/proguard-android.txtが参照される)
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 18
    buildToolsVersion "18.0.1"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 18
    }

    signingConfigs {
        releaseConfig {
            storeFile=file(project.properties.storeFile)
            storePassword=project.properties.storePassword
            keyAlias=project.properties.keyAlias
            keyPassword=project.properties.keyPassword
        }
    }

    buildTypes {
        release {
            runProguard true
            proguardFile file('../proguard-project.txt')
            proguardFile getDefaultProguardFile('proguard-android.txt')
            signingConfig signingConfigs.releaseConfig
        }
    }
}

dependencies {
    compile 'com.android.support:support-v4:18.0.0'
}

ビルド

ルートプロジェクトのルートディレクトリに移動。
下記のコマンドを実行して暫し待つ。
./gradlew assembleRelease
ビルドが成功すると、サブプロジェクトの
build/apk/の下に<プロジェクト名>-release.apkのファイル名でAPKファイルが
build/proguard/release/の下にmapping.txt等のProGuardのファイルが作成される。

確認

ProGuardの有効化を下記のコードで確認。(かなり無理矢理ですが... )
package com.example.app;

import android.os.Bundle;
import android.app.Activity;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        checkProGuard();
    }

    private void checkProGuard(){
        throw new RuntimeException("Check ProGuard");
    }

}
デバッグビルドとリリースビルドで実行してstack traceを確認したところ、mapping.txtの設定に従ってメソッド名がcheckProGuard() -> a()に変更されていた。

※proguard-project.txtについては、Eclipseでプロジェクトを作成した時に自動生成されるファイル(設定は空)を持ってきただけなので、こちらに設定した内容が正常に反映されるかは未確認。

Android Studioでのリリースビルドについてはこちらの記事を参照。
Androidアプリをコマンドラインからリリースビルド(Android Studio/Gradle編)
http://neta-abc.blogspot.jp/2013/08/androidandroid-studiogradle.html

Androidアプリをコマンドラインからリリースビルド(Android Studio/Gradle編)

Android Studioで作ったプロジェクトをコマンドラインからリリースビルドしてみたメモ。

環境

・Mac OS X 10.8.4
・Android Studio (I/O Preview) 0.2.6

リリース用証明書

keystoreファイルをサブプロジェクトのルートに配置。
gradle.propertiesファイルをルートプロジェクトのルートに作成。
(このgradle.propertiesファイルにkeystoreのパスワード等を設定する)
storeFile=キーストアのファイル名
storePassword=キーストアのパスワード
keyAlias=エイリアス名
keyPassword=エイリアスのパスワード
※ この例ではkeystoreファイルをプロジェクト内に配置していますが、プロジェクトの外に置いてstoreFileにパスを指定してもいけます。

build.gradle

サブプロジェクトのbuild.gradleにリリース用署名の設定を追加。
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 18
    buildToolsVersion "18.0.1"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 18
    }

    signingConfigs {
        releaseConfig {
            storeFile=file(project.properties.storeFile)
            storePassword=project.properties.storePassword
            keyAlias=project.properties.keyAlias
            keyPassword=project.properties.keyPassword
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.releaseConfig
        }
    }
}

dependencies {
    compile 'com.android.support:support-v4:18.0.0'
}

ビルド

ターミナルでルートプロジェクトのルートディレクトリに移動。
下記のコマンドを実行して暫し待つ。
./gradlew assembleRelease
ビルドが成功すると、サブプロジェクトのbuild/apk/の下に
<プロジェクト名>-release.apkというファイル名でリリース用APKが作成される。

インストールまで行う場合は
./gradlew assembleRelease installRelease
とする。

2013年8月29日木曜日

Androidアプリをコマンドラインからリリースビルド(Eclipse/Ant編)

いまさら感MAXですが... メモ
Eclipseで作成したAndroidアプリプロジェクトをコマンドラインからAntでリリースビルドする。

環境

・Mac OS X 10.8.4
・Eclipse 4.3 Kepler

プロジェクトのアップデート

ビルドしたいプロジェクトのルートディレクトリに移動。
下記のコマンドを実行。
android update project -p ./ -n <プロジェクト名>
※ -n <プロジェクト名>は無くても可。プロジェクト名を指定しない場合、APKファイル名がMainActivity-release.APKとかになる。

コマンド実行結果(この例ではプロジェクト名は「App」)

Before

After

build.xml/local.propertiesがプロジェクトに追加される。

リリース用証明書

リリース用証明書をプロジェクトのルートディレクトリにコピー。
ant.propertiesファイルを作成して、証明書のパスワードなどを設定。
key.store=キーストアのファイル名
key.store.password=キーストアのパスワード
key.alias=エイリアス名
key.alias.password=エイリアスのパスワード
※この例ではキーストアをプロジェクト内に配置しましたが、プロジェクトの外に置いてkey.storeにパスを設定でもいけます。

ビルド

下記のコマンドを実行。
ant release
しばし待つと、bin/の下に<プロジェクト名>-release.apkという名前でリリース用APKファイルが作成される。

ビルドと同時に端末にインストールしたい場合は
ant release install
とする。

補足

ProGuardを使う場合のお作法は、Eclipseからリリースビルドする時と同じ。
(project.propertiesで設定。)
コマンドラインからビルドした場合、mapping.txt等はbin/proguard/の下に生成される模様。

2013年8月27日火曜日

Android Studioでユニットテスト(Code Template編)

環境

・Mac OS X 10.8.4
・Android Studio (I/O Preview) 0.2.6

まず

こんな感じにテストクラスを準備。
package com.example.app.test;

import android.test.ActivityInstrumentationTestCase2;

import com.example.app.MainActivity;

public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity>{

    public MainActivityTest() {
        super(MainActivity.class);
    }

}

おもむろに

[command] + [N]。


[Test Method]を選択。


楽チン。
[Setup Method]/[TearDown Method]を選択すると、それぞれメソッドをオーバライドしてくれる。

ちなみに

コードテンプレートの定義はここで確認できる。

Android Studioでユニットテスト(コマンドライン編)

コマンドラインからユニットテストを動かしてみたのでメモ。

プロジェクトの構成およびテスト対象コード・テストコードは前回の記事と同じ。

環境

・Mac OS X 10.8.4
・Android Studio (I/O Preview) 0.2.5

テストの実行

ターミナルでプロジェクトのルートディレクトリに移動して
./gradlew connectedCheck
を実行する。

テスト結果

build/の下に
・instrumentTest-results
・reports
の2つのディレクトリが作成され、その中にテスト結果が生成される。

※今回は実機を2機接続してテストを実行したので、SH-04E/SO-02Eの2機分のテスト結果となっている。

reports/instrumentTests/connected/index.htmlをブラウザで開くとこんな感じ。

Packageのリンクを辿るとテスト項目と機種ごとのテスト結果が確認できる。

2013年8月26日月曜日

Android Studioでユニットテスト

Android Studioでユニットテストを動かしてみたのでメモ。


環境

・Mac OS X 10.8.4
・Android Studio (I/O Preview) 0.2.5

テスト対象Activityのコード

package com.example.app;

import android.os.Bundle;
import android.app.Activity;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    public String getMessage() {
        return "Hello";
    }

    public int add(int a, int b) {
        return a + b;
    }
}

テストの作成

まず、src/配下に「instrumentTest」ディレクトリを作成します。
さらに、instrumentTest/配下に「java」ディレクトリを作成します。
※ディレクトリ新規作成はショートカット[command] + [N]からが楽かなと思います。

instrumentTest/java/ディレクトリを作成したら、今度はパッケージを作成します。
パッケージ名は<テスト対象パッケージ名>.testとなります。

あとは、作成したパッケージにテストのクラスを作成します。
クラス名は<テスト対象クラス名> + Testとします。
今回の例ではMainActivityTestとなります。

テストコードはこんな感じです。

package com.example.app.test;

import android.test.ActivityInstrumentationTestCase2;

import com.example.app.MainActivity;

public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity>{

    private MainActivity mActivity;

    public MainActivityTest() {
        super(MainActivity.class);
    }

    @Override
    protected void setUp() throws Exception {
        super.setUp();

        mActivity = getActivity();
    }

    public void testGetMessage() throws Exception {
        String expected = "Hello";
        String actual = mActivity.getMessage();
        assertEquals(expected, actual);
    }

    public void testAdd() throws Exception {
        int expected = 2;
        int actual = mActivity.add(1, 1);
        assertEquals(expected, actual);
    }
}

Run/Debug Configurationsの設定

ツールバーから[Edit Configurations...]を開きます。

左上の[+]ボタンから[Android Tests]を追加します。

[Name]:適宜名前を付けます。
[Module]:アプリのモジュールを設定します。
[Target Device]:適宜設定します。(今回はShow chooser dialogを選択)
上記の設定が完了したら、[OK]ボタンをクリックします。
これで準備完了です。

テストの実行

作成したテスト用のコンフィグレーションが選択された状態で、その右の[Run]ボタン(緑三角ボタン)をクリックするとテストが開始されます。


テストが完了すると、こんな感じのテスト結果画面が表示されます。

まとめ

今回はIDE上でユニットテストを行いましたが、コマンドラインからユニットテストを行うこともできます。
コマンドラインから実行した場合、HTMLのテスト結果レポートが作成されます。
その辺り、次回まとめてみようかなと思ってます。