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

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

Read full post gblog_arrow_right

Wear端末をパソコンに接続し、Android Studioでデバッグできるようにする方法

せっかくAndroid Wear端末を手に入れたのだから、Wearアプリも作ってみようかなと思いましたが、Wear端末をAndroid Studioに認識させるのも一苦労です。

Android Wearアプリのデバッグやら実行状況を確認するのにUSBで接続するには、クレードル経由でパソコンに接続する必要があります。しかしクレードルを持ち運ばないといけないのは非常に面倒くさいです。

ちなみにクレードル経由でUSB接続すれば、パソコンにAndroid Wearが認識されてlogcatも確認できます。(クレードルとWear端末は充電端子でしか繋がっていないのに、いったいどういう仕組でLogcatが確認できるんでしょうか・・・)

それはともかく、USB経由で繋ぐにはクレードルを持ち運ばなければならず、腕にはめたままデバッグできないのは面倒くさいです。

そんな場合に備えてBluetooth経由でデバッグすることも可能です。

Bluetooth経由で接続する方法

Bluetooth経由はクレードルを持ち運ばなくて済む点はGoodですが、一方でその他の面で面倒くさいです。

  1. Wear端末とペアリングしているスマホをパソコンにUSBで接続する。
  2. スマホ側でAndroid Wearアプリを起動し、設定(歯車のアイコン)→Bluetooth経由のデバッグを有効にする
  3. Wear端末側でBluetooth経由のデバッグを有効にする(事前に開発者モードを有効にしておく必要あり)
  4. パソコン側でadbコマンドを打ち込み接続を行う
以上のステップを踏むことで、パソコンにWear端末が認識されるようになります。

Wear端末の開発者モードを有効にするには、設定→端末情報→ビルド番号を7回タップします。

adbコマンド

adb forward tcp:4444 localabstract:/adb-hub
adb connect localhost:4444

ポートは自分で決めていいみたいです。

Android StudioのTerminalタブで打つなり、Macのターミナルを起動して打つなりすればOKです。

スマホを繋いだ時に自動的には認識してはくれないので、毎回このコマンドを打たなければなりません。

スマホのAndroid Wearアプリの表示

Bluetooth経由のデバッグを有効にすると、その下にホストとターゲットの表示が出てきます。

ホストはパソコンのことで、adbコマンドを打って接続してやる必要があります。

ターゲットはWear端末のことです。Wear端末でBluetooth経由のデバッグを有効にすれば接続状態になります。

ホストとターゲットの両方が接続状態になると、パソコンからWear端末が認識できるようになります。

ちなみにWear端末のBluetooth経由でバッグをオフにする度に、再度adbコマンドを打ち込まなくてはなりません。

Bluetoothデバッグ中のAndroid Wear

Bluetooth経由のデバッグを有効にすると、常に「Bluetooth経由のデバッグが有効です」と表示され、他のWearアプリを動かしたりできなくなります。

開発中のアプリをWear端末で実行することはできますが、Wear端末からは設定を開く以外なにもできなくなります。

Bluetooth経由のデバッグが有効と常に表示される

結局どっちがいいのか

スマホとWear端末を行き来する必要があるので、Bluetooth経由でのデバッグも面倒くさいです。

Read full post gblog_arrow_right

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

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をインストールする(Windows 8.1 64bit)

Android Studioをダウンロードしてきてインストーラーを起動してインストールします。

Android Studioをインストールするには、まずJDK1.7以上が必要です。

JDKをインストールしていない、もしくはインストールしているがJDKへのパスが通っていない場合、Android Studioのインストーラーで「JDKの場所を指定してください」というメッセージが表示されます。

Android Studioインストール時にJDKの場所を聞かれる

この画面が表示されたら、一旦インストールを中止し、JDKのインストールと環境変数の設定を行いましょう。

JDKをインストールしている場合、JDKの場所を指定してやれば先へ進めるかと思います。しかしここで場所を指定するより、環境変数の設定を行った方が後々便利だと思うので、後述する環境変数の設定を行うことをオススメします。

JDKのダウンロードとインストール

OracleのサイトからJDKをダウンロードしてインストールします。

Oracle – Java SE Downloads

JDKは開発ツールが含まれたものになります。JREとは違うので注意してください。

JDKを選ぶ

ダウンロードページに飛んだら、Accept Licenseにチェックをつけて、自分のWindowsが32bit版ならWindows x86を、64bit版ならWindows x64をダウンロードしてインストールします。

Accept LicenseにチェックをつけてJDKをダウンロード

JDK1.8でもいいのか

このスクリーンショットはJDK1.8(JDK 8)のダウンロードとインストールを行っています。

1.8だとエラーが出るというような情報もあるので、1.8だとインストール出来ないのだろうかと試してみた際に撮ったものだからです。

1.8でもAndroid Studioのインストール、Wizardを使って作ったHello Worldプロジェクトの実行までは無事にできました。

ただ公式にはJDK1.7(JDK 7)が必須とあるので、敢えて1.8で冒険する必要はないような気もします。

1.8だと問題あるのかよく分からないので、詳しい方は教えてくださると助かります。

環境変数の設定

JDKをインストールし終わったら、今度は環境変数の設定を行い、JDKへのパスを通します。

Windows 8.1の場合、コントロールパネル→システムとセキュリティ→システムを開き、システムの詳細設定を開きます。

システムの詳細設定を開く

そうするとシステムのプロパティが開くので、詳細設定のタブの下にある環境変数のボタンを押します。

システムのプロパティから環境変数のボタンを押す

ユーザー環境変数とシステム環境変数と2つありますが、どちらに追加しても構いません。ユーザー環境変数だと、現在Windowsにログインしているユーザーだけ有効になるだけです。今回はシステム環境変数で設定します。

新規ボタンを押し、変数名にJAVA_HOME、変数値にJDKのインストール先を指定します。特に変更していなければ、C:¥Program Files¥Java¥jdk1.8.0_31という感じになっていると思います。(数字はインストールしたJDKのバージョンによって異なるので、自分の環境に合わせて指定しましょう)

システム環境変数の新規ボタンを押し、JAVA_HOMEを設定する

以上で環境変数の設定は完了です。

Android Studioのインストール

環境変数の設定さえしてあれば、Android Studioのインストーラーの指示にしたがって「次へ次へ・・・」と進んでいけば特に迷うところはないと思います。

Read full post gblog_arrow_right

Android StudioでButterKnifeを使う

ButterKnifeはViewのインジェクションに特化したライブラリです。

Android Studioで利用する場合はとても簡単で、app/build.gradleのdependenciesに1行追加するだけです。

app/bulid.gradleに1行追加するだけ

    compile 'com.jakewharton:butterknife:6.1.0'

これだけで使えるようになります。

ButterKnifeを使うことでfindViewById()をコードからなくすことができるので、ActivityやFragmentのコードがすっきりします。

public class MainActivity extends ActionBarActivity {

    @InjectView(R.id.test)
    TextView mTextTest;
    @InjectView(R.id.hello)
    TextView mTextHello;

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

        mTextTest.setText("ButterKnife Sample!!!");
        mTextHello.setText("Next text here!!");
    }
}

ButterKnifeサンプルの実行結果

@InjectView(ViewのID)で、TextViewなどを保持するクラスフィールドを指定してやります。

後はonCreate()内でButterKnife.inject(this)を実行すれば、findViewById()を使うことなく、Viewに対する操作ができるようになります。

扱うViewが多くなればなるほど、その効用が実感できるようになります。

ButterKnifeを使わない場合、以下のようになります。

public class MainActivity extends ActionBarActivity {

    TextView mTextTest;
    TextView mTextHello;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        (TextView) mTextTest = (TextView) findViewById(R.id.test);
        (TextView) mTextHello = (TextView) findViewById(R.id.hello);

        mTextTest.setText("ButterKnife Sample!!!");
        mTextHello.setText("Next text here!!");
    }
}

Android Studioだとbuild.gradleに1行追加するだけで使えるようになるので、とても便利ですね。

GitHub – ButterKnife

Android Studioで新規プロジェクト作成時のテンプレートを作る

【Android】もっと先へ「加速」したくはないか、少年 〜Project Template編〜を見て、実際に自分でも試してみました。

パッケージ構成はBest practices in Android developmentの通りに再現することにしました。

パッケージ構成以外に、リソースファイルもテンプレートで追加させることができるので、color.xmlなどよく使うものがあれば追加してやると便利かもしれません。

AndroidStudio.appの中に直接作成したら、アップデートの際にどうなるか分からなかったので、Gitで別途管理することにしました。作成したテンプレートはGitHubで公開しています。

カスタムテンプレート

注意点

テンプレートファイルを書き換えても、都度Android Studioを再起動させないと変更が反映されません。ちょっと変わった処理をしようと思うと、動作確認が面倒くさいです。

ディレクトリにファイルを置けばそれが反映されるわけではなく、recipe.xml.ftlで指定したファイルが作成されます。rootディレクトリ以下に作ったディレクトリが勝手に再現されるのかと思っていたら全然違いました。

template.xml

template.xmlはテンプレートファイルの名前や入力項目などを決めるファイルになっています。

<parameter>タグを追加することで、入力項目を増やすことができます。

ちなみにこのテンプレートでは、package-info.java@authorを変更できるようにしてみました。

<parameter
    id="author"
    name="Author"
    type="string"
    default="Gen"
    help="This uses javadoc @autohr in package-info.java." />

追加した入力項目

package-info.javaでは以下のようにして参照できました。idで指定した文字列で参照できるみたいです。

/**
 * Activities.
 * @author ${author}
 */
package ${packageName}.activities;

参考

Custom Projects In Android Studio

Android Studioのバージョンアップができない

注意点として上記のテンプレートを追加すると、以下ののようなメッセージが表示されAndroid Studioのバージョンアップができません。

バージョンアップする際のエラーメッセージ

そのため、バージョンアップする際には追加したテンプレートを手動で削除してやる必要があります。

バージョンアップすると追加したテンプレートは消されてしまうのではと思っていたのですが、そもそもバージョンアップ自体ができませんでした。

プロジェクトテンプレートを自分で追加する場合、テンプレートで得られるメリットと、バージョンアップ時に手動で消さなければならないというデメリットを天秤にかけてから行うようにしてください。

Android Studioのプレビュー画面でActionBarが表示されないと勘違いした話

最近Android Studioを使ってプロジェクトを作った際に、ActionBarが表示されていないことが気になっていました。

以前までだと、特に何もしなくとも表示されていたはずのActionBar。自分でも特にActionBarのためにコードを書いたり、XML書いたりした覚えがないので、どうすればいいのやらサッパリでした。

実際にはタイトルバーの部分にアプリアイコンが表示されなくなってるだけであって、ActionBarがなくなっているわけではありません。画面のプレビューではActionBarが表示されなくなっていたせいで、私が勘違いしていただけでした。

プレビュー画面の違い

上記の画像は、両方共ソースコードに変化はありませんが、targetSdkVersionと利用するサポートライブラリのバージョンが異なるものです。

左がtargetSdkVersionが20、app/build.gradleのdependanciesで利用するサポートライブラリのバージョンをcom.android.support:appcompat-v7:20.+と指定したもの。

右はAndroid Studio 1.0の新規プロジェクト作成ウィザードで作られたデフォルトの状態のもの。(targetSdkVersion21,com.android.support:appcompat-v7:21.0.3)

API21(Lolipop)からMaterial Designが導入されたことによる影響なんでしょうね。新しく導入されたToolBarを使えということなんでしょうが、使い方がよく分からず苦戦中です。

ちなみに右の状態でも、エミュレーターで実行するとちゃんとActionBarが表示されます。(ただし従来のようなアプリアイコン+タイトルの表示ではありません)

targetSdkVersion21で実行した状態

ToolBarのClass Overviewに以下の記述があり、Lolipop以降では従来のアプリケーションアイコン+タイトルはやめろってことなんでしょうね。

In modern Android UIs developers should lean more on a visually distinct color scheme for toolbars than on their application icon. The use of application icon plus title as a standard layout is discouraged on API 21 devices and newer.
確かにマテリアルデザインで設計された画面の中でアプリアイコンがぽつんとあると、浮いた感じがして気持ち悪い気もしてきました。

それにしてもデザインに対するハードルがどんどん上がっていって辛い・・・。

MacをYosemiteにバージョンアップしたらAndroid Studioが起動しなくなった

MacをYosemiteにバージョンアップしたらAndroid Studioが起動しなくなりました。

原因はYosemiteへのアップデートでJDK 1.6が消えてしまったことが原因のようでした。(消えたのか参照できなくなったのかはよく分かりませんが・・・)

ターミナルで/usr/libexec/java_home -v 1.6と打つと、Unable to find any JVMs matching version “1.6”.と表示されました。JDK 1.7と1.8はバージョンアップ前と同じように存在してくれてましたが、1.6だけ参照できなくなってました。

対策はJDK 1.6(Java 6)を再インストールすればOKです。JDK1.6(Java 6)はこちらからダウンロードできます

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

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つです。

Read full post gblog_arrow_right

Android StudioでJDKのパスを指定する

久しぶりにAndroid Studioでサンプルアプリを作ろうとしたら、JDK7を使えと怒られてしまいました。

設定を確認すると、JDK6を使うように設定されていました。

Project Structure

Project Structureはcmd + ;で開きます。

JDKは1.8をインストールしていたはず・・・と思って確認すると、やっぱり1.8がインストールされていました。

コマンドプロンプトでJDKのバージョン確認

コマンドプロンプトを開いてjava -versionでインストールされているJavaのバージョンが確認できます。(正確にはJREのバージョンの確認ですけど)

しかし、/System/Library/Java/JavaVirtualMachinesにはJDK6しかない。調べてみると、JDK1.7以降ではインストールされているディレクトリが異なる模様。

それぞれのJDKのディレクトリを確認するには、コマンドプロンプトで/usr/libexec/java_home -v バージョンで、JDKのバージョンごとのインストールされているディレクトリが確認できます。

java_homeコマンドでインストールされているディレクトリを確認

とりあえずJDK7を使えというエラーメッセージだったので、JDK7のディレクトリを指定してやることでエラーメッセージが消えました。

JDK7を使えというエラーメッセージ

ちなみに、JDK7はOracleのサイトからダウンロードできます。