最近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が表示されます。(ただし従来のようなアプリアイコン+タイトルの表示ではありません)
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. 確かにマテリアルデザインで設計された画面の中でアプリアイコンがぽつんとあると、浮いた感じがして気持ち悪い気もしてきました。 それにしてもデザインに対するハードルがどんどん上がっていって辛い・・・。
私は未だにAndroidのOSバージョンとAPIの数字とコードネームが結びついていません。最新の5.0がAPI21で、Lolipopだというのは分かるんですけどね。
ソースコードを読んでいて、JBとかICSとか出てきて「それバージョンで言うとどこ?」と混乱したのでまとめておくことにしました。
バージョン コードネーム api 5.0.1 Lolipop 21 4.4w Android L Preview 20 4.4 KitKat 19 4.3 Jelly Bean 18 4.2.x 17 4.1.x 16 4.0.3〜4.0.4 Ice Cream Sandwich 15 4.0〜4.0.2 14 3.2 Honeycomb 13 3.1 12 3.0 11 2.3.3〜2.3.7 Gingerbread 10 2.3〜2.3.2 9 2.2 Froyo 8 2.1 Eclair 7 2,0.1 6 2.0 5 1.6 Donut 4 1.5 Capcake 3 1.1 2 1.0 1 Android Studioのデフォルトでは、API10〜21をサポートするようにプロジェクトが作成されます。2.3.3までサポートするということですね。 ちなみにOSバージョンごとのシェアはAndroid DevelopersのDashbordsで公開されています。(2.2以降のバージョンのみですが)
コードネームの頭文字がAから順番につけられているので、それを押さえていれば大体どのあたりのバージョンなのか検討がつくかもしれません。
今までプログラムの全体像を頭の中でイメージし、後は勢いでコーディングして完成させるという作り方をしてきていました。大規模なプログラムを作ることがなかったので、今まではそれで何とかなっていたのですが、最近それも限界を感じています。
Androidのアプリを作るのに、画面がどう遷移してどういう処理が必要で・・・なんていうことを頭の中だけでは把握できません。
それに勢いだけでコーディングしていると、このクラスが一体何の働きをしているのかが分からなくなってきます。作成中はまだ大丈夫なのですが、時間が経つともうわけがわからなくなります。
1分間タイマーは勢いだけで作り上げましたが、もう機能修正とか追加とかやりたくありません。どこで何やっているか自分でも訳がわからないからです。
そんなわけで、設計方法を学ぼうかななんて思って行動を始めました。
頭の中だけでプログラムをイメージするのには限界があるので、少なくとも設計図を用意したい。設計図を作るには、どういうふうにプログラムを組み上げていくのがいいのか、その手法を知る必要がある。という感じです。
とりあえずUMLの書き方さえ知らないので、UMLの入門書を読んで、ついで実践UMLという本を図書館で借りてきて読みました。
とりあえずわかったのはこんな感じですかね。
UMLが書けることとクラス設計ができることは別の話 最初に完璧な設計書を用意するという考えは間違ってる とりあえずやってみないと始まらない UMLの書き方をマスターしたからといって、それだけでは設計書を作ることはできません。個人開発で使う分には、最低限自分が分かればいいので、細かいUMLの書き方をマスターしようとするのはちょっと脱線しすぎかもしれません。
プログラムの設計図を完璧に仕上げてからコーディングをしていくというのはウォーターフォール的発想だからやめろと実践UMLには書いてありました(意訳)。オブジェクト指向開発的には、もっとフレキシブルに設計とコーディングを行き来しながら開発していくんだそうで。
確かに、どういう作りにすればいいのかと完璧な設計を求めるあまりに、プログラムが完成しなければなんのための設計なんだという話になりますもんね。まあ今の私がそうなんですけど。
実践UMLを読んで感じたのは、内容がかなり濃い&難しいので、とりあえず前半くらいの内容を利用して実際に設計→コーディングのサイクルを回していくのがいいのだろうと思いました。どう作っていけばスマートなのかを考えだすとキリがないので、とりあえずやってみなければ始まらない。
アプリの機能、要件を定義して、そこからどういうクラスが必要なのかを検討して、実際に作ってみる。上手くいかなければ設計しなおして、やり直す。もっといい作り方がないかなとか追い求めると何もできなくなってしまうので、とりあえず作る。そんな方針で進めてみようと思います。
それと並行して設計方法についても勉強したいなと思っています。何かおすすめがあれば教えていただきたいです。
実践UML 第3版 オブジェクト指向分析設計と反復型開発入門
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で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.
久しぶりにAndroid Studioでサンプルアプリを作ろうとしたら、JDK7を使えと怒られてしまいました。
設定を確認すると、JDK6を使うように設定されていました。
Project Structureはcmd + ;で開きます。
JDKは1.8をインストールしていたはず・・・と思って確認すると、やっぱり1.8がインストールされていました。
コマンドプロンプトを開いてjava -versionでインストールされているJavaのバージョンが確認できます。(正確にはJREのバージョンの確認ですけど)
しかし、/System/Library/Java/JavaVirtualMachinesにはJDK6しかない。調べてみると、JDK1.7以降ではインストールされているディレクトリが異なる模様。
それぞれのJDKのディレクトリを確認するには、コマンドプロンプトで/usr/libexec/java_home -v バージョンで、JDKのバージョンごとのインストールされているディレクトリが確認できます。
とりあえずJDK7を使えというエラーメッセージだったので、JDK7のディレクトリを指定してやることでエラーメッセージが消えました。
ちなみに、JDK7はOracleのサイトからダウンロードできます。
Android Studio 0.8.12がCanary Channelでリリースされています。
Canary Channelでリリースといっても、今回はパッチ形式での配布ではないので通知がきていないかもしれません。今回のバージョンアップでは、新たにAndroid Studioをまるごとダウンロードする必要があります。(バグへの対応のため、パッチ形式による提供はできなかったそうです)
0.8.12での変更点 新しくなったAVDマネージャー 画面サイズが分かりやすく表示されているのがありがたいですね。見た目が今風になっているだけでなく、設定がしやすくなったように思います。
Gradle WrapperがHTTPSで通信するようになった Mavenのリポジトリ(JCenter)からライブラリを取得したりする際に、HTTPSで通信するようになったようです。セキュリティ面の強化ということなんでしょうかね。
レイアウトXMLエディターの初期画面をTEXTモードに 新しくレイアウトXMLファイルを作成した際に、エディタがグラフィカルモードではなくテキストモードで開かれるようになります。GUIでデザインなんかしないよという人にはありがたい機能かもしれません。
その他いろいろ string.xmlからTranslation Editorが開けるようになったり、新規プロジェクト作成時にプロジェクトビューがAndroid Project viewがデフォルトで選ばれるようになったり(今まではProject viewがデフォルト)しているようです。
詳細は0.8.12のリリースノートを参照してください。
以前のバージョンのAndroid Studioと共存させる方法 Macの場合の話ですが、今まで使っていたAndroid Studio.appの名前を変更するだけで、Android Studioの旧バージョンと新しいバージョンを共存させることができます。
分かりやすいようにバージョンを後ろに追記してやるのがいいと思います。名前がAndroid Studioと被らなければいいので、別にAndroid Studioあ.appとかでも問題ないです。
テストコードを配置するディレクトリ名は、以前はinstrumentalTestという名前でした。しかし現在ではandroidTestという名前になっています。
Googleで検索すると、未だに「instrumentalTestというディレクトリを作成しよう」という情報もあるので注意が必要です。
と言っても、最近のAndroid Studioは最初からテスト用のディレクトリを用意してくれるようになったので、自分でテスト用ディレクトリを用意する必要性もなくなっています。
ちなみに自分の使っているAndroi dStudioのテスト用ディレクトリ名が何なのかは、app/app.imlを確認すればわかると思います。
<sourceFolder ... isTestSource="true" />というタグを見れば、テスト用のディレクトリがandroidTestであることが分かります。
もし古いバージョンのAndroid Studioを使っている場合は、ここを見ることでディレクトリ名として何を使えばいいのかが分かります。
例えば<Button>タグのブロックを選択したりだとか、LinearLayoutの中身を選択したりだとか、そういう選択の仕方をする際に覚えておくと便利なショートカットです。
opt + ↓で選択範囲を1段階狭くし、opt + ↑で選択範囲を1段階広くします。
XMLだけでなく、Javaのコードでifブロックだけを選択したりするのにも利用できます。これでまた1つマウスの呪縛から解き放たれましたね。
Android Studioで使われているショートカットキーは、Preference > Keymapで確認することができます。
cmd + ,でPreferencesを開き、Keymapを選択すると、Android Studioで使われているショートカットキーを確認したり、自分でカスタマイズしたりすることができます。
ちなみにこのキーマップの設定ですが、「間違えて押してしまったショートカットキーで何か動作したけど、一体何をやっているのかわからない」というものを調べることにも使えます。
検索窓の隣にある虫眼鏡のアイコンを押すと、ショートカットキーから機能を検索することができます。逆引き検索ができるんですね。
この機能を利用することで、ショートカットキーが割り当てられている機能を探したり、何も割り当てられていないショートカットキーを探したりすることができます。
Page 16 of 19