カテゴリー: 使い方

Android Studioの使い方についての情報を取り扱っています。Android Studioでこういったことをするにはどうすればいいの、またはこんな便利な使い方があるんだよということを紹介しています。

式の即時評価を利用してオブジェクトの状態を調べる

この記事は最終更新から3ヶ月以上が経過しています。情報が古い可能性があります。

式の即時評価が便利だよねという話です。

私は以前Calendarクラスを使って日付の処理をしようとしていました。そのとき、どのフィールドを参照すれば目的の値が引っ張ってこれるかを確認するのに、愚直にLog.d()を使っていました。1つ1つメソッドの返り値を出力して(文字列の連結でさらにカオスになる)、目的の数値がちゃんと取れているのか確認していたのです。

ドキュメントを読めよっていう話なんですが、読んでもどういう値が取れるのかいまいち分からなかったんですよね・・・。

まあそんなアホなことをやっていたので、当然のようにバグを仕込んでいました。そんなバグに気づくきっかけとなったのが式の即時評価機能です。以来、とてもお世話になっています。

式の即時評価を使えば、ブレークポイントを設定してデバッグ実行するだけで、任意のメソッドや変数の確認ができるようになります。

式の即時評価

メソッド呼び出しとその結果が確認できる

ブレークポイントで一時停止させないと使えないので、状態の変化を追うのには向かないかもしれません。それでもlogcat頼みのデバッグより捗る場面があると思います。

どんなときに便利か

今日遭遇したエラーで、なんかのタイミングでNullPointerExceptionが発生してクラッシュする現象が発生しました。

特定の状況で例外発生によるクラッシュ

例外の発生する箇所はわかっているものの、どういう状況でそれが生じているのかがよく分かりませんでした。

そこで例外の発生する部分をtry-catch文で囲み、例外をキャッチした所にブレークポイントを置いて調べてみることにしました。

try-catchで止めてみる

ブレークポイントで止めればコールスタックを遡ってオブジェクトの状態を確認できますが、目当ての変数を探すのが大変なので、そういうときに式の即時評価が便利です。だと思います。

AndroidManifest.xmlでコード補完機能を使う際に注意すべきこと

この記事は最終更新から3ヶ月以上が経過しています。情報が古い可能性があります。

Android Studioのコード補完機能を過信しすぎてはよくないというお話です。

例えば、AndroidManifest.xmlにpermissionを追加するときのことです。<uses-permission android:name="android.permission.INTERNET"/>を追加しようとしたさいに、Android Studioのコード補完に任せると<uses-permission android:name="ANDROID.PERMISSION.INTERNET"/>となることはないでしょうか。しかもAndroid Studioで補完された文字列だから、大文字のままでも問題ないのかなと放置していないでしょうか。

実はこれが全部大文字になっているとうまく動きません。android.permissionの部分は小文字でなければなりません。

原因と対策

これはコード補完で候補を絞り込む際に、INTERNETの部分を大文字でタイピングしたときに起こります。最初の1文字目を大文字でタイピングすることで、選んだ選択候補の文字列がすべて大文字で入力されてしまうようです。

この対策は実はとても簡単なことで、internetと小文字でタイピングして絞り込むことです。

INTERNETの部分が大文字だから大文字で入力しなければならないと思い込んでいないでしょうか。私は思い込んでました。なぜなら、コード補完で絞り込む対象が定数である場合、少なくとも最初の1文字目は大文字でタイピングしないと絞り込めなかったからです。だからpermissionでも同じなのだろうと思ってました。

しかし、このpermissionの場合は小文字でタイピングしても絞り込めます。そして、小文字で絞り込んだ場合だと正しくandroid.permission.INTERNETと入力されます。

定数だとなぜ大文字で入力しなければ絞り込めないか

これはAndroid Studioの設定によるものです。デフォルト設定がどうなのかはよく知らないので、人によって違うかもしれません。

Android Studioのコード補完機能の設定で、大文字・小文字を区別する設定があります(Preference > Editor > General > Code Completion)。私の場合はここが「First letter」になっています。そのため補完候補の最初の1文字目だけは大文字・小文字が区別されてしまうのです。

Android Studioのコード補完機能設定

そのため定数(例えばREQUEST_CODEといったもの)の場合、少なくとも最初のRだけは大文字で入力しなければ候補に残りません。一方でandroid.permission.INTERNETの場合は最初の1文字目が小文字であるため、INTERNETの部分で絞込をする場合に入力する文字は小文字でも問題ないのです。

今のところ私が遭遇して実際に影響を受けたのはAndroidManifest.xml上でだけですが、他の部分でも影響があるのかもしれません。

Android StudioでJunit4によるテストを走らせる

この記事は最終更新から3ヶ月以上が経過しています。情報が古い可能性があります。

基本的にはここに書いてあるとおりにやればいいだけの話です。

準備

/app/build.gradleのdependenciesにjunitを追加します。

testCompile 'junit:junit:4.12'
testCompile 'org.mockito:mockito-core:1.9.5'

この際に注意が必要なのは、androidTestCompiletestCompileは別物であるということです。

何が別物かというと、テストコードを配置するディレクトリがそれぞれ違います。

その名の通りandroidTestCompileandroidTestディレクトリに配置したテストコードのコンパイル時にだけ使うライブラリです。同じくtestCompiletestディレクトリに配置したテストコードのみに使われるライブラリになります。

なお、androidTestディレクトリは自動的に作成されていますが、testディレクトリは自分で作らなければなりません。(ディレクトリは/app/src/test/java/パッケージ名にしてやればOK)

androidTestとtestの切り替え

Build Variantsウィンドウを開くと、Test Artifactという欄があります。

Build VariantsのTest Artifact

Android Instrumentation Testsを選択していると、androidTestディレクトリ以下にあるテストコードが有効化されます。有効化されるというのが適切なのかは分かりませんが、Android Studioからコンパイル対象のソースコードであると認識されます。

Unit Testsに切り替えると、testディレクトリが有効化されます。試しに切り替えてみると、androidTestディレクトリの色が変わって、テストコードのアイコンに赤いJアイコンが出るようになると思います。

IDE上からテストを実行しようと思うと、このBuild Variantsをいちいち切り替えないといけないのが面倒くさいかもしれません。

しかし、ターミナルからGradleを使って実行する場合は、このTest Artifactsの切り替えはしなくてもいいみたいです。Gradleからテストを実行する場合、./gradlew connectedAndroidTestがAndroid Instrumentation Testsを、./gradlew testがUnit Testsを選択してテストを実行するのと同じになります。この場合のテスト結果は/app/build/reports/testsの中に出力されます。

テストコードはViewやActivityなどのUIに関するテストをandroidTestディレクトリに、純粋なJavaコードのテストはtestディレクトリに置くように工夫すべきでしょう。そうしてやれば、ユニットテストにかかる時間を削減できて幸せになれると思います。

Android StudioでLogcatをフィルタリングする

この記事は最終更新から3ヶ月以上が経過しています。情報が古い可能性があります。

Logcatでアプリのデバッグをする際に、自分のアプリからのログ出力だけ見たいなんてときありますよね。

そんなときにどうやってフィルタリングをするかという話です。

キーワードやログレベルでのフィルタリングはここでできます。

ログレベル・キーワードでフィルタリング

ちなみにログレベルでのフィルタリングは、指定したレベル以下のものを出力するというフィルタ設定になります。

例えばここでInfoを選ぶとInfo以下のものだけが出力されるようになり、VerboseとDebugレベルのログは表示されなくなります。

ログレベルは下図で囲った部分です。ログレベル/タグという形式で出力されています。

ログレベル

特定のアプリからのログ出力だけ見たい場合は、Show only selected applicationのところをクリックして、Edit Filter Configrationを選びます。

Edit Filter Configration

ここでPackage Nameのところで調べたいアプリのパッケージ名を指定してやると、自分のアプリからの出力しか表示されなくなります。

Package Nameでアプリからの出力のみに絞れる

こういったフィルタリングの設定をうまく使えば、アプリ開発も捗ると思います。

一方でLogcatにこれらのフィルタ設定をしているときには注意しなければならないことがあります。それは、アプリが落ちた時のスタックトレースまでフィルタされて表示されないことがあるということです。

「アプリが落ちたのにLogcatに何も表示されない・・・」と混乱しないようにしましょう。

Android StudioでQuick Documentationを活用する

この記事は最終更新から3ヶ月以上が経過しています。情報が古い可能性があります。

Android Studioでコーディングしていて、「このメソッドどういう処理するんだっけ?」と思った時に便利なQUICK DOCUMENTATIONがあります。

F1押すと出てきますが、標準だとFloating Modeで表示されて邪魔です(設定によって違うかもしれませんけど)。

Floatingモードで表示されて邪魔

これは右上の歯車マークをクリックして、Floating Modeを押して解除してやれば他の枠に収まってくれます。

Floating Modeを解除

私の場合毎回右側にDocumentationが収まるのですが、右側は個人的に見づらい。このDocumentationはドラッグすることで表示位置を移動することができます。

個人的には右下に置いておくのが好みです。

表示位置は調整可能

こうすることでQuick Documentation機能がぐっと使いやすくなります。

これでめでたしめでたしなんですが、このままではDocumentationの表示位置は現在開いているプロジェクト固有の設定にしかなりません。

つまり、別のプロジェクトを作成してQuick Documentationを利用した時に、再びFloating Modeで開かれてしまいます。プロジェクトごとに毎回この設定をするのは面倒なので、これを標準のレイアウトとして設定してしまいましょう。

方法はAndroid StudioのWindowメニュー→Store Current Layout as Defaultを選べばOKです。

標準のレイアウト設定にしてしまう

これで毎回設定せずともすみます。

GitHubで公開されているプロジェクトをAndroid Studioで開く

この記事は最終更新から3ヶ月以上が経過しています。情報が古い可能性があります。

GitHubで公開されているサンプルやライブラリプロジェクトをローカルに拾ってきて、そのプロジェクトをAndroid Studioで開く方法についてです。

GitHubからソースコードをcloneする

取得したいプロジェクトをgit cloneなりDownload ZIPなりでリポジトリから取得してきます。

今回はandroidmvp – GitHubをcloneしてみました。

ソースコードを保管したいディレクトリに移動して次のコマンドを叩きます。

git clone リポジトリのURL (ディレクトリ名:省略可)

今回の場合だと、git clone https://github.com/antoniolg/androidmvp AndroidMvpという感じです。ディレクトリ名はつけなかったらリポジトリのものがそのまま使われます。私は分かりやすいようにと、既存のプロジェクトと名前を揃える意味でAndroidMvpとしました。

gitコマンドなんてよく分からないという人は、素直にDownload ZIPでソースコードを拾ってくるといいでしょう。

Android Studioで開く

Import project

Open an exisiting Android Studio projectではなくImport Project (Eclipse ADT, Gradle, etc.)を選ぶのがポイントです。

Gradle形式のプロジェクトだから、前者で開くのかなと思ったら全然開けなくて困りました。

プロジェクトによっては開けるのかもしれませんが、Gradle Homeの場所を指定するように言われる場合は、後者のImportの方を選ぶといいです。

Gradle Homeを指定するように言われる

この場合、/Applications/Android Studio.app/Contents/plugins/gradle/libを指定するといいなんて情報を見かけたのですが、指定してもうまくいきませんでした。

Gitで管理するプロジェクトファイルの設定によって変わってくるものなのかもしれませんが、GitHubなどで公開されているプロジェクトをAndroid Studioで開くには、Import projectで読み込むようにしたほうが無難なのかもしれません。

Android Studioで直接GitHubで公開されているリポジトリをcloneする

GitHubに公開されているソースコードは、Android Studioからcloneすることも可能です。

まずCheck out project from Version ControlからGitHubを選びます。

Check out project from Version Control > GitHub

GitHubの設定をしていない場合、ログインアカウントとパスワードを尋ねられるので設定してやります。

そうするとcloneするリポジトリを聞いてくるので、リポジトリのURLや保存先などを指定してやります。

clone対象を設定する

こうすることでもリポジトリのcloneは可能です。

ただしこの方法でcloneしたとしてもGradle Homeを指定するように言われてしまったので、改めてImportしてやらないと開けませんでした。

Android StudioでLogcatが表示されず、何が原因でアプリが落ちてるのかわからなくて困った話

この記事は最終更新から3ヶ月以上が経過しています。情報が古い可能性があります。

Android Studioでデバッグ実行を行った際に、起動直後にアプリが終了してしまう症状に悩まされました。通常ならLogcatが表示されるはずなのに、それすら表示されなかったため、何が原因で落ちてるのかすら分かりませんでした。

通常、デバッグを実行すると、

デバッグの実行

Logcatが表示されるのですが、何の反応もなくアプリだけが落ちているという状況に陥ったのです。

通常ならLogcatが表示される

他のプロジェクトだと普通に表示されるのに、特定のプロジェクトでだけLogcatも何も表示されずに落ちるのです。アプリが落ちる原因もわからない上に、Logcatが表示されない理由も分からないと、ムダにハマってしまいました。

最終的には、使っていたFragmentのonCreate()super()を呼び出していなかったことが原因でアプリは落ちていました。たったそれだけなのに、Logcatが確認できないせいで迷走してしまったのです。

今回記事を書くに当たり、super()をわざと呼び出さないサンプルプロジェクトを作って再現するかどうか試してみたんですが、普通にLogcatが表示されました。super()呼ばなかったせいで表示されなかったのかなと思ったのですが、どうも違うようです。

なぜAndroid StudioでLogcatが表示されなかったのかはよく分かりませんが、もし同様のトラブルに遭遇した場合に備えて、ADMでLogcat確認できないか試してみましょうというお話です。

そんなときはADMを使う

Android StudioでLogcatが見えなければADMを使います。

Android Studioの右上にあるドロイド君のアイコンを押せば、Android Device Monitorが起動します。(Android SDK > Tools > Monitorが実体です)

ADMの起動アイコン

何かいろいろありすぎてよく分かりませんが、本格的なデバッグはこれを使うといいと思います。Android Studioからデバッグできなくとも、ADMのLogcatなら表示されていました。

adb kill-serverとかしても効果がなかった

ちなみにadbの調子が悪いのかと、adb kill-serveradb start-serverも試してみたのですが全く効果がありませんでした。

というか他のプロジェクトだとLogcatは表示されていましたし、該当のプロジェクトでも単にActivityだけを表示させたらLogcat普通に出ていたので、adbのせいではなかったんでしょうけどね。

そもそもなんかおかしかったら再起動が吉

わざわざADMを使うよりも、素直にエミュレータ、Android Studioを再起動、(それでもうまくいかないならOSごと再起動)するのが一番いいかもしれません。

使っているうちに終了したつもりがプロセスが生きたままになってるということはまれによくあることです。

私はエミュレーターにGenymotion使っていますが、終了させたのにVirtual Box上では動きっぱなしになっていることがよくあります。

本題でないところにこだわって無為に時間を使うより、さっさと再起動した方が早かったように思います。

Android StudioでRobolectricを使いJUnit4によるユニットテストを行う

この記事は最終更新から3ヶ月以上が経過しています。情報が古い可能性があります。

Android StudioでJunit4を使ったテストを実行する方法は、今のところ2通りあるみたいです。

  • TestRunnerを指定して行う(android-junit4を使う)
  • Robolectricを使う

TestRunnerを指定した方法だと、IDEでテストの実行結果が確認できるので便利です。ただし、設定がややこしいのが不便なところです。簡単に取り込める方法があれば教えて欲しいです。

対してRobolectricを使う場合は、テストの実行結果をブラウザで確認しなければならないというデメリットはありますが、導入方法が比較的簡単です。今回はRobolectricを使ってJunit4によるユニットテストを実施する手順を紹介します。

Qiitaのこちらの記事があってようやくまともに入れることができました。感謝感謝。

1. プロジェクトを作成する

Android StudioのメニューからFile > New Projectを選択し、新規プロジェクトを作成します。単にプロジェクトを作成するだけです。別に既存のプロジェクトを使うなら飛ばして問題無いです。

2. build.gradleの編集

プロジェクトルートのbuild.gradleにclasspath 'org.robolectric:robolectric-gradle-plugin:0.13.+'を追記します。(app/build.gradleではないです)

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.13.2'
        classpath 'org.robolectric:robolectric-gradle-plugin:0.13.+'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

新規プロジェクトの場合、build.gradleがこうなればOKです。(この例ではAndroid Studio 0.8.14を使っています)

3. app/build.gradleの編集

やることは3つです。

  • apply plugin: ‘robolectric’の追加
  • dependenciesの追加
  • robolectricディレクティブの追加

apply pluginの追加

app/build.gradleの2行目(apply plugin: 'com.android.application'のすぐ下)にapply plugin: 'robolectric'を追加します。

dependenciesの追加

RobolectricとJunit4を追加をします。

    androidTestCompile 'org.robolectric:robolectric:2.3'
    androidTestCompile 'junit:junit:4.11'

robolectricディレクティブの追加

robolectric-gradle-pluginのサンプルを利用してコピペします。

そのままだとGradle Syncがうまくいかないので、一部削除しています。

robolectric {
    // configure the set of classes for JUnit tests
    include '**/*Test.class'
    exclude '**/espresso/**/*.class'

    // configure max heap size of the test JVM
    maxHeapSize = '2048m'

    // configure whether failing tests should fail the build
    ignoreFailures true

    // use afterTest to listen to the test execution results
    afterTest { descriptor, result ->
        println "Executing test for {$descriptor.name} with result: ${result.resultType}"
    }
}

最終的にapp/build.gradleはこんな感じになります。

apply plugin: 'com.android.application'
apply plugin: 'robolectric'

android {
    compileSdkVersion 21
    buildToolsVersion "21.0.2"

    defaultConfig {
        applicationId "jp.gcreate.sample.samplerobolectric"
        minSdkVersion 10
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.0'
    androidTestCompile 'org.robolectric:robolectric:2.3'
    androidTestCompile 'junit:junit:4.11'
}

robolectric {
    // configure the set of classes for JUnit tests
    include '**/*Test.class'
    exclude '**/espresso/**/*.class'

    // configure max heap size of the test JVM
    maxHeapSize = '2048m'

    // configure whether failing tests should fail the build
    ignoreFailures true

    // use afterTest to listen to the test execution results
    afterTest { descriptor, result ->
        println "Executing test for {$descriptor.name} with result: ${result.resultType}"
    }
}

JUnit4によるテストをしてみる

とりあえずJUnit4を使ったテストができるか試してみます。ここではTrueを返すだけのtest()メソッドを持ったクラスを作ります。

テスト対象クラス

public class Sample {
    public boolean test(){
        return true;
    }
}

テストコードを作成する

androidTest/java/(パッケージ)/SampleTest.javaを作成します。勝手が分かっている方なら直接作った方が早いと思います。が、今回はIDEにある程度作って貰う方法を紹介します。

作成したテスト対象クラス(今回はSample.java)をエディタで開いた状態で、右クリックしGo To > Testを選びます。

右クリックGoTo Test

その後小さいダイアログが出てくるので、Create New Testをクリックします。

Create New Test

そうするとテストコードを自動生成してくれるウィザードが立ち上がるので、JUnit4を選んでやります。(他にもJUnit3やら作成してくれます)

Create TestでJUnit4を選ぶ

画像はSampleTestTestになっていますが、今回の例で言うとSampleTestになっているはずです。(SSとったときは対象クラスの名前がSampleTestだったんです・・・)

JUnit4にチェックを付ける以外は特に何もしなくてOKです。Memberのところにチェックをつけると、自動的にテストメソッドまで作ってくれます。

その後、テストコードをどこに配置するか聞いてくるので、androidTestとなっているディレクトリを選んでやればOKです。(デフォルトで選ばれているディレクトリを指定してやれば大丈夫だと思います)

androidTestとなっているディレクトリを選ぶ

後は作成されたテストコードのクラス名の前に、@RunWith(RobolectricTestRunner.class)を追記します。

テストコードはこんな感じになりました。

import org.junit.Test;

import static org.hamcrest.core.Is.is;
import static org.junit.Assert.*;

@Config(emulateSdk = 18)
@RunWith(RobolectricTestRunner.class)
public class SampleTest {

    @Test
    public void とりあえず失敗するテスト(){
        Sample sut = new Sample();
        assertThat(sut.test(),is(false));
    }

    @Test
    public void とりあえず成功するテスト(){
        Sample sut = new Sample();
        assertThat(sut.test(),is(true));
    }

isが赤字になってしまいますが、org.hamcrest.core.Is.isをstatic importすればOKです。

実行はターミナルで./gradlew clean testと入力してエンターです。(gradlewが置いてあるディレクトリで実行すること)

毎回コマンドを打つのが面倒くさい場合、Android StudioのメニューからRun > Edit configrations ...で+ボタンを押しGradleを追加、Gradle Projectにプロジェクトルートを追加、Tasksにclean testと入力したものを作ります。後はGUIからこれを選んで実行してやれば、毎回コマンド入力しなくても同じことができます。

Edit configrationsでGradleを追加

Gradle projectにプロジェクトルートを選択、Tasksにclean testを入力

作成したGradle実行環境を選んで再生ボタン押す

テストの結果はプロジェクトルート/app/build/test-report/debug/index.htmlに出力されます。いちいちブラウザで確認しないといけないのは若干面倒くさくはあります。

ちなみに初期状態で作られているApplicationTest.javaのせいで余計なエラーが出ます。

JUnit4実行結果

ApplicationTest.javaを削除すれば出てこなくなります。

@Config(emulateSdk = 18)について

targetSdkVersionを19以上にしていると、Robolectric does not support API level 19, sorry!というエラーが表示されます。この場合は、テストコードに@Config(emulateSdk = 18)@RunWithの前に追記することで回避できます。

API19以上に依存するクラスをテストしたい場合は、Robolectricが対応するのを待つか、それまではRobolectricを使わずにテストするしかないみたいです。

参考:Stack over flow

Genymotionを導入してエミュレータの起動待ち時間を短縮する

この記事は最終更新から3ヶ月以上が経過しています。情報が古い可能性があります。

アプリ開発をしていてバカにならないのが、デバッグにかける時間です。頻繁にエミュレータを起動して動作確認を行うわけですが、デフォルトのエミュレータ(Android SDKのエミュレータ)はとにかく起動が遅いです。さらに動作ももっさりしていて、お世辞にも動作確認しやすいとはいえません。

そこで動作確認の時間をできるだけ短縮するためにも、Genymotionを導入しておくことをおすすめします。起動も早く動作もスムーズなので、デフォルトのエミュレータを使うのが馬鹿らしくなります。

私の環境で実際に両者を比較した動画を撮ってみました。

Genymotionをインストールする

Genymotionを利用するためには、ユーザー登録が必要になります。

また、エミュレータを動かすために別途Virtual Boxが必要になります。

端末を登録する

Genymotionをインストールできたら、端末の登録を行いましょう。Genymotionは実在する端末のエミュレーションを行うものなので、よく使う端末をとりあえず登録しておけばいいと思います。

サポートするAndroidのバージョンに合わせて登録しておくといいでしょう。私はとりあえず、Android2.3の端末と、自分の持っているGaraxy S3を登録しています。

端末の追加はそんなに難しくありません。予め用意されている端末から、エミュレーターとして使いたいものを選択するだけです。

Genymotionで端末の追加

Genymotion端末の選択

Genymotion端末の表示名を決める

後はダウンロードを待つだけ

Android Studioでプラグインを導入する

Android StudioからGenymotionのエミュレータを起動するためにも、Genymotionのプラグインも一緒にいれましょう。別に入れなくても使用に問題はありませんが、入れておいたほうがエミュレータの起動が捗ります。

GenymotionPluginからの端末起動

こんな感じでAndroid Studioから起動しやすくなります。

インストールの仕方はAndroid StudioのPreference > PluginsからGenymotionを探してインストールするだけです。そうすることでAndroid Studioの右上にGenymotion用のアイコンが追加されます。

Genymotion Pluginのインストール

万能ではないものの使わないのは損

Genymotionではデフォルトのエミュレータと比較して、画面サイズやAndroidのバージョン、SDカードの有無など細かなところまでカスタマイズすることができません。特にFreeライセンスでは利用できる機能に制限があるため、Android SDKのエミュレータを完全に置き換えるものではありません。

ですが基本的なデバッグ・動作確認にGenymotionを利用することで、アプリ開発における動作確認の時間を短縮することができると思います。基本的にはGenymotionを使うようにすれば、開発がだいぶ捗るのではないでしょうか?

Android StudioでGitを使ったバージョン管理

この記事は最終更新から3ヶ月以上が経過しています。情報が古い可能性があります。

Android StudioでGitを利用したバージョン管理ができます。Git以外にもGitHubやSubversionなども使えるのですが、私はGitを使っているのでGitで説明します。

ちなみに私のGit力はGUIでしか管理できないレベルなので、コマンドで管理するのはどうするのかは聞かないでください・・・。これまでずっとSourceTreeでしかGit触ったことがないのです。

リポジトリの作成の仕方

まずはAndroid StudioでGitのリポジトリを作成する方法です。今回はSampleGitというプロジェクトを例に説明します。

メニューのVCS > Inport into Version Control > Create Git Repositoryを選択します。

Gitリポジトリを作成する

そうすると、リポジトリを作成する場所を聞いてくるのでプロジェクトルートを選択します。

Gitリポジトリを作成するディレクトリを選択する

これでGitリポジトリが作成されます。

Gitリポジトリが作成されると、Android Studioの下部にChangesという項目が新たに増えます。このタブでコミットしたり、Gitのログを確認したりといった作業を行えます。

Android Studioの下部にChangesというタブができる

また、リポジトリを作成したことによりプロジェクトウィンドウ等に表示されるファイル名の色が変わります。色の意味はこんな感じです。

  • 赤色:Gitで管理されていないファイル
  • 緑色:新規に作成されたファイル(まだコミットされていないファイル)
  • 青色:コミット後に変更があったファイル
  • 白色:コミットされたファイル(もしくは.gitignoreによってGit管理下から除外されているファイル)

リポジトリ作成直後はほとんどのファイル名が赤色になっていると思うので、まずはGit管理下においてやる必要があります。

ファイルをGit管理下に追加する

下部にあるChangesツールウィンドウを開くと、Unversioning Filesという部分に、赤色で表示されているファイルの一覧がずらっと並んでいます。

これらのファイルを右クリック→Add to VCS(もしくはcmd+option+a)でGit管理下においてやります。そうするとファイル名が赤から緑色に変わります。

Android StudioでファイルをGit管理下に追加する方法

1つ1つファイルを選ばずとも、Unversioning Filesという部分を右クリックしてAdd to VCSとすれば一気に全部変更できます。

(余談)リポジトリ作成後に新規ファイルを作成した場合

ちなみに、リポジトリを作成した後にファイルを追加すると、Git管理下におくかどうかきいてくるので、Yesを押せばわざわざこんな面倒臭いことをしなくてすみます。

新たにファイルを作成した時に出てくるメッセージ

コミットの仕方

ファイルをGit管理下に加えた後はコミットするだけです。以下のいずれかの方法でコミットを行うためのダイアログが表示されます。

  • メニューのVCS > Commit Changes
  • ChangesツールウィンドウのVCSの文字の下に上矢印のついたアイコンをクリック
  • キーボードショートカットcmd+k

コミットの仕方

後はコミットするファイルにチェックをつけて、コミットメッセージを入力して、Commitボタンを押せばOKです。

ちなみにコミットする際にCode Analysisが働いて確認ダイアログが表示されることがあります。

Code Analysisのメッセージ

コミットする前にコードをチェックしてくれる機能で、「こういう風にした方がいいんじゃね?」という提案ではありますが、正直細かすぎる指摘もあるので、Warning程度であれば無視してもいいと思います。

Reviewを押せばWarning等の内容が表示されるので、無視してコミットする場合はCommitのボタンを押せばコミットできます。

Changesツールウィンドウを使ってコミットする際の注意点

Changesツールウィンドウを使ってコミットをする際は、リストに表示されている1つのファイルを選択した状態でVCSアイコンを押さないように気をつけましょう。

その場合、選択されているファイルしかコミット対象にならないことがあります。私はよく1ファイルだけコミットされてないという状況に陥りました。

そんなときは再度コミットするファイルを選び直し、Ammend commitにチェックをつけてコミットすると、直前のコミットを修正することができます。

コミット後のファイルの変更

コミット後にファイルに変更を加えると、ファイル名が青くなります。

コミット後にファイルに変更を加える

またファイル名だけでなく、ソースコードの変更した部分のウィンドウの端にも色がつくようになります。この部分の色も、新規追加が緑、変更が青という規則にそっています。覚えておくと何かと便利かもしれません。