CUIでのapk作成 ~ 環境設定編

#はじめに
ビルドだけするならEclipseは重すぎる、と言う理由から、
CIも視野にいれての前提となる環境に設定の調査を行いました。

#設定するサーバの環境の確認
 - AWS
 - CentOS

既知の情報は上記レベルなので、下調べが必要でした。

##32bitか64bitか
> $uname -a

サーバは64bitでしたので、以降はすべて64bitでの設定をおこなっています。

##ディスク容量の確認

>$ df

容量が大きすぎるフォルダを探すときに使う
>$ du | sort -nr

##ライブラリ周り
こちらはSDKをインストール後にant実行時にエラーが表示され、その対応を書いたものです

> $ yum list | grep libstdc++

> $ yum whatprovides libstdc++.so.6

> $ sudo yum install libstdc++48-4.8.2-7.87.amzn1.i686

#インストールするものの準備

- Java
- ANT
- SDK

##Java
java6のJDKを Oracle Java Archive からダウンロードします。
http://www.oracle.com/technetwork/java/archive-139210.html

![スクリーンショット 2014-07-08 13.23.06.png](https://qiita-image-store.s3.amazonaws.com/0/12362/dac3ca9a-d3cb-4c48-04d3-692ca09be447.png)

ダウンロードにはメールでの送信確認を含むユーザ登録が必要でした。

![スクリーンショット 2014-07-08 13.27.50.png](https://qiita-image-store.s3.amazonaws.com/0/12362/7bedd536-9e29-499f-b795-cf93f5082a21.png)

jdk-6u45-linux-x64.binをダウンロード
画面の **Accept Licence Agreement** を選択する必要があります。

##ANT

こちらから、Binary Distribution をつかいました。
http://ant.apache.org/bindownload.cgi

![スクリーンショット 2014-07-08 14.24.25.png](https://qiita-image-store.s3.amazonaws.com/0/12362/b2fef868-b0d2-d2dc-b714-a4f5ef6fed8e.png)

##SDK
Linux32&64bit を選びました。

![スクリーンショット 2014-07-07 21.43.22.png](https://qiita-image-store.s3.amazonaws.com/0/12362/eefb805e-230d-63d3-c137-a40ab6a9f76a.png)

#インストール
自分のホームディレクトリにandroidというディレクトリを作成して
今回の設定に関係するところをまとめています。

##Java
もとの環境には別のJavaがはいっているため、あまり干渉しないように設定をします

はいっているjavaの置き場所を確認
> $ which java

サイトからダウンロードしたファイルを実行します
>$ sh jdk-6u45-linux-x64.bin

###update-alternativesの設定
デフォルトで設定済みのjavaのバージョンを変えたいときなどに利用します。

設定を追加
>$ sudo update-alternatives --install /usr/bin/java java [ホームディレクトリ]/android/jdk1.6.0_45/bin/java 10

使いたいバージョンのjavaを設定する
>sudo update-alternatives --config java

バージョンから使用しているjavaを確認
>java -version

##Ant
解凍
> $ tar xvfz apache-ant-1.9.4-bin.tar.gz

###確認
Eclipseで作成したプロジェクトを変換する場合などに
次のコマンドを使います

>$ cd [プロジェクトフォルダ]の場所

>$ android update project -p ./[プロジェクトフォルダ]

ant.propertiesが作成されます

>$ cd [プロジェクトフォルダ]

正常に終わるかを確認します
>$ ant

##Android SDK
解凍
> $ tar xvfz android-sdk_r23-linux.tgz 

###PATHの設定
ホームディレクトリにある.bash_profileを編集します。

```
PATHの編集はsourceで読み込むことで即反映されますが
なれていない人はあまりおすすめしません。
もとの設定が残った状態のTerminalを設定後も閉じずに
別でterminalを開いて設定の反映を確認する方がより安全です。
```

.bash_profileからのPATHの記載があるところ以降の抜粋

```text:.bash_profile
 PATH=$PATH:$HOME/bin
 ANDROID_TOOLS=$HOME/android/android-sdk-linux/tools
 ANT_HOME=$HOME/android/apache-ant194
 JAVA_HOME=$HOME/android/jdk1.6.0_45
 PATH=$PATH:$ANDROID_TOOLS:$JAVA_HOME/bin:$ANT_HOME/bin
```

#Android SDKの追加パッケージをダウンロード
EclipseのSDK Manager で管理するパッケージのダウンロードをコマンドから行います。
ディスクの空きを気にするサーバであれば、下記のコマンドは実行せずに
>$ android update sdk

このコマンドのままだと全パッケージをダウンロードします。

##SDK Manager同様に追加パッケージを選択
オプションを確認します

追加できるパッケージのリストを表示
>$ android list sdk

Terminalへの表示は次のような感じになります。

```
(略)
Packages available for installation or update: 61
   1- Android SDK Tools, revision 23.0.2
   2- Android SDK Platform-tools, revision 20
   3- Android SDK Build-tools, revision 20
   4- Documentation for Android 'L' Preview SDK, revision 1
   5- SDK Platform Android 4.4W, API 20, revision 1
   6- SDK Platform Android L Preview, revision 1
   7- SDK Platform Android 4.4.2, API 19, revision 3
   8- SDK Platform Android 4.3, API 18, revision 2
   9- SDK Platform Android 4.2.2, API 17, revision 2
  10- SDK Platform Android 4.1.2, API 16, revision 4
  11- SDK Platform Android 4.0.3, API 15, revision 3
  12- SDK Platform Android 4.0, API 14, revision 3
  13- SDK Platform Android 3.2, API 13, revision 1
  14- SDK Platform Android 3.1, API 12, revision 3
  15- SDK Platform Android 3.0, API 11, revision 2
  16- SDK Platform Android 2.3.3, API 10, revision 2
  17- SDK Platform Android 2.2, API 8, revision 3
(略)
```

表示された中から使うものをあげると
>$ android update sdk -u -t 1,2,3,7,8,9,10,11,12,16

オプションについては --help をつけると確認できます。
>$ android --help update sdk

ダウンロードしてローカルにはいったパッケージの内容を確認します
>$ android list target

#ハマりどころ（参考までに・・・）
##設定によるもの
###ant debugでエラー

```
android/android-sdk-linux/build-tools/20.0.0/aapt:error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
```
64bit環境なので、なんで32bit？なのですが足さないと進まなかったので追加しました。

> $ rpm -ql libstdc++ | cat -n

> $ yum list | grep libstdc++

> $ yum whatprovides libstdc++.so.6

> $ sudo yum install libstdc++

> $ sudo yum install libstdc++48-4.8.2-7.87.amzn1.i686

ここのインストールはインターネットの情報を見ながらで判断したものの
理解できていないので気持ちが悪いところです。

##注意不足
###ディスクを使い切る
もとから容量がない状態で android update sdk を実行してディスクフル
###PATHの設定ミスでPATHからviが外れる
別のTerminalを開いていたのでwhichしたりで拾いましたが・・・

　　　
#参考URL

##duコマンド
http://open-groove.net/linux-command/du/

##JDKのインストール
http://www.whitemark.co.jp/tec/java/jdkInstallLin.html
##update-alternativesの使い方
http://radi0ant.hatenablog.com/entry/2011/12/29/015013

##libstdc++.so.6まわり
http://d.hatena.ne.jp/language_and_engineering/20130309/Linux64BitAndroidDevelopmentEnvironment
http://forums.tripwireinteractive.com/showthread.php?t=81822

#さいごに
サーバは他のサービス、設定に影響しない設定を意識したいので

 - 実行するユーザをわける：ビルド用に別ユーザを作成して環境変数などは.bash_profileなどにまとめる
 - バージョンの異なるコマンドはupdate-alternativesなどで切り替える

などで進めたいです。
それでもけっこう大雑把に設定している感が残ってしまいました。
後ほど追記すると思います。