ガラケー所持者が困るかもしれないAndroid Studio備忘録【随時更新】

スマホを持っていないIT企業戦士(笑)が突然Android Studioを渡されたときに陥りそうな罠に対して備えよう。

わからんけど解説とか流し読みで動かしてみよう。
という人間がひっかかったポイント。

スマホ未所持無関係のものも入れます。

引っかかったら都度追記

# <i class="fa fa-cogs"></i> 動作環境

* Windows7 Professional 64bit
* Android Studio 1.5.1
* [Java SE Development Kit 7u80]

エミュレーターが高速になるらしいAndroid Studio2がよかったのですが、
ZIP版しかなかったりで流石に不安なので1.5.1で。

# <i class="fa fa-graduation-cap"></i> 事前知識状態

* PHPerでPhpStorm 使ってる(関係なし)
* :beginner: Javaについて
  * Hello Worldを授業でやった  
    ただし環境構築経験無し
  * 静的言語
  * オブジェクト指向
  * 別のクラスはimportして使う
* :beginner: Androidについて
  * り りろんはしってる 
  * 無料なの
  * アプリ公開無料なの
  * 美味しそうなバージョン名
  * 端末テスト面倒くさい

今の内容は別にJavaもAndroidも関係ないですが。

# <i class="fa fa-scissors"></i> 省略

Android StudioとJavaのインストール。
環境変数**JAVA_HOME**で躓くのは既定路線。
解説は豊富にあるのでそちらで。

Android StudioはSDK付きのフルパッケージのインストーラーを使った。
Android StudioとJavaのbit数は合わせること。

# :question: 【不明】SDK Managerの準備

あるAndroidバージョンを開発する際に、最低限何が必要なのかはまだ不明です。
基本的には解説サイトで推奨されているものは、容量に問題がないかぎりは入れてしまっています。
消せないわけでもないので、あまり気にせず。

# <i class="fa fa-calculator"></i> HAXMの準備

intel x86 emulator accelerator(以下**HAXM**)を入れます。
こちらも解説は豊富にありますが、何を見たかを。
HAXMを導入するとエミュレーターの起動が早くなります。

適用準備(Android Studioの準備とHAXMのインストール)
<i class="fa fa-external-link"></i>[Intel HAXMのインストールと設定 - 0円で1から始めるAndroid開発記]
こちらがわかりやすい。
わかりにくいのが、Android StudioのSDK ManagerからインストールするHAXMは、「Intel x86 Emulator Accelerator (HAXM **installer**)」です。
SDK ManagerではInstalledと表示されますが、インストーラーのダウンロードが完了しただけです。
インストーラーの実行は手動になります。

インストーラーの設置場所は、Android SDKの場所の配下になるのですが、
これがいくつかの解説で

>Android SDKを保存したフォルダ内に、IntelHaxmのインストーラーが入っています。

<i class="fa fa-external-link"></i>[Intel HAXMのインストールと設定 - 0円で1から始めるAndroid開発記]


>Android SDKがインストールされたディレクトリをANDROIDSDK_HOMEとしたら、

>ANDROIDSDK_HOME\extras\intel\Hardware_Accelerated_Execution_Manager
>内の「IntelHaxm.exe」をダブルクリック。

<i class="fa fa-external-link"></i>[Androidエミュレータの高速化 - Archit!!]

と、場所がよくわからない…
SDKのインストール先は自由なのかもしれませんが、場所を忘れてしまって困りました。

<i class="fa fa-external-link"></i>[Android StudioにおけるAndroidSDKやJDKのパス設定 - Qiita]

こちらの記事のおかげで助かりました。
余談ですが、この記事をリンクしている記事が同様に構築メモ類が多いので、参考になるかもしれません。

自分の様に流し読みをして、**Settings**を開きながら無い！無い！と言わないように。
Fileメニューが、PhpStormではSettingsとDefault Settingsで内容はほぼ同じ。
Andoid StudioではSettingsとProject StructureとOther Settings(の中にDefault Settings とDefault Project Structure)
があり、参照すべきは(Default)Project Structureの方。

インストーラー実行時に、既にHAXMがプリインストールされていたことが判明しましたが、バージョンがかなり古かったので、そのまま上書きしてバージョンアップしました。

Mac版でよければこちら
<i class="fa fa-external-link"></i>[Androidエミュレータは遅い！重い！！Intel x86設定で高速化して使うべし | サクッとJava研修室]
Macということで見逃していたのですが、インストール後に読むと、Windows版と大きな違いはなく、画像ありでよくまとまっているのでおすすめです。

# <i class="fa fa-power-off"></i> エミュレーターの起動の注意点

ここまでは特にガラケーの有無は関係なかったです…。

アプリの実行は、ボタンでは以下の<i class="fa fa-play text-success"></i>で実行します。
![run.JPG](https://qiita-image-store.s3.amazonaws.com/0/62354/40964bb4-17d9-418d-a4b5-6895d0291447.jpeg)


そのまま先に押しても大丈夫なのですが、実行には先にエミュレーターを起動しなければいけません。(起動操作は割愛)

**エミュレーターの起動というものがよくわかっていない。**

とりあえずのファイル準備から起動までを
<i class="fa fa-external-link"></i>[Androidのお勉強 第一回　環境構築と画面遷移 - Qiita]
を参考にしていたのですが(ただしエミュレーターはGenymotionではなく標準機能を使っていた)、アプリのインストールがうまくいかない。
エミュレーターは起動しているのに…

![black50.jpg](https://qiita-image-store.s3.amazonaws.com/0/62354/ed06aef4-7bdf-377a-397a-4eddeee15466.jpeg)

なんて思っていましたが、これはまだAndroidの起動が完了していません。
**エミュレーターの起動≠エミュレートしたAndroidの起動 です**
予測ではまだ電源オフ状態です。
特にHAXMを入れていないとこの状態が10分以上続くことがあるので、
**画面が変わらないし終わったのかな？**と勘違いしやすいです。
この辺は記事ではなく動画で見ていればよかったかもしれません。
この辺り、真っ暗なので動いているかわからないのですが、
心配な人はタスクマネージャーなどからエミュレーターの頑張り(CPU使用率)などを見つめて応援しましょう。
~~メモリ4Gだと重くてネットサーフィンもできません(スマホでのネットサーフィンも当然できません)~~

しばらく待つと…
![android50jpg.jpg](https://qiita-image-store.s3.amazonaws.com/0/62354/d163928f-2d76-325f-3b9c-902ad7627951.jpeg)

androidとロゴが出てきました。**まだ起動は完了していません。**
これは、電源が入ってOSを起動している状態…でしょうか。
遅いでしょうが、ロゴ色が変化していくはずなので、
真っ黒のときと違って「あぁ、動いてはいるんだな」となりますね。

さらにしばらく待って…

![rundroid50.jpg](https://qiita-image-store.s3.amazonaws.com/0/62354/899e92f1-8c21-437e-197b-a3d417a567e2.jpeg)

ホーム画面が表示されました。
以上でエミュレーターによるAndroidの起動が完了です。(場合によってはオンラインになるのにもう少し時間がかかるかもしれません)
画面を見たときは感動したんですが、
**おめでとうございます。あなたのスマホ電源投入処女はエミュレーターです。**
と言われた気がして勝手に悲しくなりました。

これでAndroid Studioからアプリをラン(エミュレーターにインストール)できるわけです。

ここまでこぎつくまで私は
「エミュレーターとはアプリのみをエミュレートするものだ」
と思っていましたが、Androidそのものをエミュレートするんですねぇ…
道理で重いわけだ。

## Nuexus S API 7 の場合の注意点

さて、前章画面は**Nexus S API 23**のものなのですが、
これではアプリの実行がうまく行きました。
しかし、他のAPIでも試してみようとしたとき、また一つ詰まったので紹介。
これも実機を触ったことがある人には当たり前なのかもしれません。

また、他のデバイスは全然試してないので他にも同じものがあるかもしれません。

![rock750.jpg](https://qiita-image-store.s3.amazonaws.com/0/62354/8aad2471-8309-7239-0682-c7076db3427f.jpeg)

起動後の画面です。
余談ですが、これはCPUがarmでHAXMが効きませんが、起動は高速でした。

起動したのでさっそくRUNボタン<i class="fa fa-play text-success"></i>を押します。

起動中のNexusを選択してしばらく待つと‥

`02-09 05:05:18.487 209-216/? E/AndroidRuntime: ERROR: thread attach failed`

というエラーが出て、アプリが実行されません…
ネットで調べてみても、`adb.exe`を再起動すれば行けるとかあったのですが、効かず。

途方に暮れてエミュレーターをフリックして遊ぶかと操作したら解決しました。
何が問題だったかと言うと、端末がロック状態だったのがいけなかったみたいです。

鍵アイコンを右にスワイプ？して解除すると…

![unrock750.png](https://qiita-image-store.s3.amazonaws.com/0/62354/6fc57e85-ba30-e140-be36-cf12da1fa681.png)

裏ではしっかりアプリが動いていました。

ロックされていたらアプリは動かない。
ガラケーでも当たり前でしょうけど、全然わからなかった…

# <i class="fa fa-code-fork"></i> VCSからのインポート

Eclipseで作ったらしいアプリがあるらしく、それをインポートしようとしたのですが、場所に困った。

恐らく、ディレクトリツリーをProjectに切り替え、
**app/src/main**
がアプリ本体だと思われます。
Abdroidツリーがどうやって決まっているのかはまだ謎です。

そして、インポート時の注意としてPhpStormのときにいつもしているように、空のプロジェクトを作ってそこにインポートしようとしたのです。
ですが、Android Studioでは空プロジェクトでも雛形ができていました。
まぁ、良い目印だろうとファイルのインポート先の場所も最初からある**AndroidManifest.xml**が重なる様に設定したのですが、
インポート前からあるファイルは(特に設定をいじらなければ)上書きインポートされないようで、最初からあるAndroidManifest.xmlなどを削除しないと、ファイルをうまく持ってこれませんでした。

# <i class="fa fa-building"></i> 解析反映 リソースの更新

空の状態からレイアウトを作ってJavaファイルを書いていると

```java
setContentView(R.layout.activity_main);
```

の`R`や`activity_main`が赤文字で警告になります。
曰くgotoできなかったりで未定義であると。

> プロジェクトに設置したリソースをプログラムの中から利用するため、各リソースにはリソースIDが割り当てられます。リソースIDは「R.java」と言う名前のファイルで管理されます。
>
「R.java」ファイルは初めてプロジェクトをビルドした時に作成され、その後ビルドが行われるたびに自動的に更新されていきます。その為、ユーザーはリソースの追加だけを行っておけばリソースに対するIDの管理などは行う必要がありません。 

<i class="fa fa-external-link"></i>[R.javaファイルとリソースID - リソース管理 - Android入門]

つまり、最初はビルドしていないので`R.java`がそもそもなくて`R`がエラー。
レイアウトなどでIDを追加しても、`R.java`に反映されていないので`R.layout.hoge`でエラー。と。

インタプリタ言語(とその言語のIntelliJ IDEAとか)を触っていると ん?となるかもしれません。
いや、IDEなんだからそこは補完しよろ、とも一瞬思っちゃいましたが。

ビルド?は以下のボタンで行うようです。
![gradle.png](https://qiita-image-store.s3.amazonaws.com/0/62354/975af4af-92c7-50a5-f96e-47e09ffbfdca.png)


Gradleとの同期、ということでビルドないない言ってましたが、**Gradle**がビルドツールですと。
jsでいうgulp、と考えればいいのでしょうか。

ワンクリックで済みますし、エラーはビルド時点で通知してくれるので、
エラーチェックにはエミュレーターを毎度起動しないと行けないのか…
と戦々恐々してた身にはいい感じに気持よく使えそうです。
やっぱりコンパイルは安心感がありますね。

ビルドが済むと、即座に反映され、エラーが消えてgotoも出来るようになりました。

[Java SE Development Kit 7u80]:http://www.oracle.com/technetwork/jp/java/javase/downloads/jdk7-downloads-1880260.html

[Intel HAXMのインストールと設定 - 0円で1から始めるAndroid開発記]:http://andro.hatenablog.com/entry/2014/11/19/183146

[Androidエミュレータの高速化 - Archit!!]:http://d.hatena.ne.jp/architshin/20131028/1382939157

[Androidエミュレータは遅い！重い！！Intel x86設定で高速化して使うべし | サクッとJava研修室]:http://saku-java.be-ourselves.jp/2014/05/18/intel-x86-android-emulator-setting/


[Android StudioにおけるAndroidSDKやJDKのパス設定 - Qiita]:http://qiita.com/hidekuro/items/d2aadb907c617a4554db

[Androidのお勉強 第一回　環境構築と画面遷移 - Qiita]:http://qiita.com/yu_eguchi/items/b7cf67346c323ffca2c8

[R.javaファイルとリソースID - リソース管理 - Android入門]:http://www.javadrive.jp/android/xml_layout/index2.html