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のテスト結果レポートが作成されます。
その辺り、次回まとめてみようかなと思ってます。

2013年8月19日月曜日

Android開発環境 Eclipse Juno -> Kepler移行メモ


先日公開されたEclipse 4.3 Keplerに移行したのでメモ。

環境

Mac OS X 10.8.4
Eclipse 4.2 Juno
Eclipse 4.3 Kepler
(Juno/Kepler共に、Eclipse IDE for Java EE DevelopersEclipse IDE for Java EE Developers / Mac OS X 64bit版)

ADTのインストール

インストール手順は、こちらを参照
Installing the Eclipse Plugin | Android Developers http://developer.android.com/sdk/installing/installing-adt.html

Android SDK Locationの設定

Android Studioをお試しで使っているので、ここではAndroid SDKはAndroid Studio側(<Android Studio Install Location>/Android Studio.app/sdk)と共用とした。

設定のエクスポート(Juno)

メニューの[file] -> [Export...]を開く。
[Preferences]を選択して[Next > ]ボタンをクリック。
よくわからないので... [Export all]にしました。
あとは、出力先を適当に決めて[Finish]ボタンをクリック。

設定のインポート(Kepler)

メニューの[File] -> [Import...]を開く。
[Preferences]を選択して[Next > ]ボタンをクリック。
先ほど、Juno側でエクスポートした.epfファイルを選択。
[Import all]にチェックをいれて、[Finish]ボタンをクリック。
以上です。

以前は手動でEclipseの設定をやり直していたので不毛だったなと...
設定のインポート/エクスポート機能便利ですね。

AndroiderのためのEclipse設定メモ(2013. 夏)

今更感溢れますが。。
最近、android.importorderのことを知ったので... メモ。

android.importorderは、Organize Importしたときの各import文の並び順のルールが記載されている。

公式ドキュメント

ここに載ってました。
こんなドキュメントあったんですね...
Using Eclipse | Android Developers
http://source.android.com/source/using-eclipse.html#eclipse-formatting

※このドキュメント、Eclipseのメモリ設定についても書かれていたりします。
Using Eclipse | Android Developers
http://source.android.com/source/using-eclipse.html#increase-eclipses-memory-settings

ダウンロード

GitHubのこちらから取得しました。
platform_development/ide/eclipse at master · android/platform_development · GitHub https://github.com/android/platform_development/tree/master/ide/eclipse


platform_developmentをgit cloneするか
ブラウザから欲しいファイルを開いて
[Raw]ボタンクリック -> [別名で保存] (Chromeの場合)
とかでもいけると思います。


設定

[Preferences] -> [Java] -> [Code Style] -> [Organize Imports]の
[import]ボタンからDLしたandroid.importorderをインポートする。


インポートすると、こんな感じに。


おすすめEclipse設定資料



過去に書いたEclipse設定メモ まとめ

Android開発向けEclipse設定メモ
Eclipse Java ; { の入力
Eclipse Working Set
Android Layout XMLのコーディングを快適にする方法

2013年8月15日木曜日

Google Play アルファ/ベータ版テスト メモ

こちらの投稿を参考にアルファ/ベータ版テストをさわってみたメモ。
スクリーンショット付きで詳しく解説されていて、先人に感謝。

Android - Google playでのベータ版配布機能について - Qiita [キータ]
http://qiita.com/kaa/items/3904845d225d40f9a6ef

Google+コミュニティの作り方

アルファ/ベータ版テストを行うには、「Google Group」 or 「Google+コミュニティ」が必要。
参考サイトではGoogle Groupを使用していたので、Google+コミュニティでも試したみた。

まず、Google+にアクセスしてサイドバーから「コミュニティ」を選択。


「コミュニティを作成」をクリック。


コミュニティの公開範囲を聞かれるので、テストを行う範囲に応じて決める。
今回は限定公開かつ検索結果に表示しないようにする。
(コミュニティ作成後に公開範囲設定の変更は出来ない)

公開範囲についてはこちらの公式ドキュメントの表がわかりやすかった。
Google+ コミュニティを作成する - Google+ ヘルプ https://support.google.com/plus/answer/2872671?hl=ja


適宜、キャッチフレーズやアイコン画像を設定して「完了」クリック。

以上でGoogle+コミュニティの作成は完了です。

コミュニティのURLをGoogle Play Developer Consoleに設定しますので、ブラウザのURL控えておく。
例:https://plus.google.com/communities/<ID>

あとは、テスターのGoogleアカウントをコミュニティに追加してください。

まとめ

・アルファ/ベータ版テストを行うには、アプリを「公開中」の状態にする必要がある。
・APKファイルをアップしてからGoogle Play反映にかかる時間は、製品版を公開する場合と同様と思われる
・「テスターのリストを管理」に設定するGoogle Group/Google+コミュニティのオーナーはGoogle Play開発者アカウントと別のGoogleアカウントでも良い。
・有料アプリは、アルファ/ベータテストユーザーに対しても有料。

その他

・「下書き」の状態だとアプリの削除が可能。
・「下書き」削除後にパッケージ名の再利用は可能。
・「下書き」の状態で、同一パッケージ名のAPK(別アプリ)はアップロードできない。
(別Google Play開発者アカウントからは試してません)

2013年8月11日日曜日

iosched(2013)をビルドしてみる

ioschedとは

Google主催の開発者向けイベント「Google I/O」の公式ガイドアプリです。

Google I/O 2013 - Google Play の Android アプリ
https://play.google.com/store/apps/details?id=com.google.android.apps.iosched&hl=ja

毎年イベント終了後にソースコードが公開されます。
先日、ソースコードが公開されましたので今回はビルドして端末にインストールするところまでやってみます。

環境

・Mac OS X 10.8.4
・Android Studio 0.2.3

ダウンロード

ソースコードはこちらのプロジェクトサイトで公開されています。
iosched - Google I/O App for Android - Google Project Hosting
https://code.google.com/p/iosched/

プロジェクトはGitで管理されていますので
ターミナルから下記のコマンドでプロジェクトを取得します。
git clone https://code.google.com/p/iosched/
※Gitのセットアップ等については割愛

準備

ioschedアプリが使用するライブラリをAndroid SDK Managerでインストールしておきます。

Extras
 Android Support Repository
 Google Repository

インポート

Android Studioを起動して、こちらの画面の[Import Project]を開く。
ioschedプロジェクトルートのsettings.gradleを選択して[OK]ボタンをクリック。
※プロジェクトのディレクトリ名はiosched -> iosched2013にリネームしています。


[OK]ボタンをクリック。


そうするとこんな感じでプロジェクトが開くと思います。


ビルド

一番左の[Sync Project with Gradle Files]をクリックして暫し待つ。


緑三角の[Run]ボタンをクリック。


うまくいくと、こんな画面が立ち上がってきます。
※因みにこのスクリーンショットはAndroid Studioの[Frame Screenshot]機能を使って撮りました。



まとめ

毎年、ソースコードリーディングに挫折していますが...
今年もワントライしてみようと思います。

[補足]
ioschedプロジェクトのルートディレクトリに「BUILDING.txt」というファイル名前でビルド手順書が同梱されています。
こちらも一読されることをお勧めします。

2013年8月3日土曜日

Android開発環境ダウングレードメモ

退路確保のためメモる。

ADT

下記のサイトにまとめられています。感謝。
Bescotteeさん
Android SDKの古いADTのダウンロードURLの一覧を記載
http://andbrowser.com/development/918/old-adt-download-url/

SDK Tools

バージョン(r21.1)の部分は適宜変更してください。

SDK Platform-tools

バージョン(r16.0.2)の部分は適宜変更してください。

※SDK ToolsとSDK Platform-toolsのバージョン組み合わせが分からなくなったときはSDK Toolsのルートディレクトリに居るsource.properties(の末尾)を参照すると良いっぽい。