Andorid サーバーコンパイル　

しばらくSpringにはまっていたのですが、1年くらい前からやろうと思ってたのでちょっとづつ進めようと思います。
Unityだとアセットローダーみたいな機能が付いているのですが、AndoridSDKだとその辺の機能が弱いので、もっと簡単に動的に機能をガシガシ追加したいですね。

1.事前準備
2.サーバーでのアンドロイドアプリのコンパイル
(3.アプリ内でのクラスロード)
　*これが鬼門すぎるw

# 1.事前準備
既に入っている方も多いと思いますがコンパイル時のエラーで対処したので一応入れておきます。

## 1.1 libstdcのインストール
```text
yum install libstdc++.x86_64
yum install libstdc++-devel.x86_64
yum install compat-libstdc++-33.x86_64
yum install libstdc++.i686
```
## 1.2 JDKインストール
tools.jarが必要なので事前にJDKを入れてパスを通しておきます。

```
yum install java-1.8.0-openjdk-devel.x86_64
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-0.b17.el6_7.x86_64/
```
## 1.3 apacheインストール
```
yum install httpd.x86_64
```

# 2.サーバーでのアンドロイドアプリのコンパイル
## 2.1 Andorid SDK　ダウンロード
Linux版のSDKダウンローダーが使えます。
android list sdkとかやってみましょう。

```
# download platform tools
curl --location http://dl.google.com/android/android-sdk_r22.3-linux.tgz | tar -x -z -C $HOME
export ANDROID_HOME=$HOME/android-sdk-linux
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools

# show list
android list sdk --all

# 1- Android SDK Tools, revision 24.4.1
android update sdk -a -u -t 1
# 1- Android SDK Platform-tools, revision 23.0.1
android update sdk -a -u -t 1
# 9- Android SDK Build-tools, revision 21.1.2
android update sdk -a -u -t 9
# 27- SDK Platform Android 5.1.1, API 22, revision 2
android update sdk -a -u -t 27

```

## 2.2 Andorid SDKの場所を指定
local.propertiesでサーバー上のAndroidSDKの場所を指定してあげます。

```text:local.properties
cd /home/vagrant/MyAndroid/MyAndroid
vi local.properties
->sdk.dir=/Applications/adt-bundle-mac/sdk
+>sdk.dir=/home/vagrant/android-sdk-linux/
```

これをやらないと下記のようなエラーで怒られます。

```text:エラー
* Where:
Build file '/home/vagrant/MyAndroid/MyAndroid/app/build.gradle' line: 17

* What went wrong:
A problem occurred evaluating project ':app'.
> SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable.
```

app/build.gradle内の
    compileSdkVersion 22
    buildToolsVersion "21.1.2"
とバージョンを合わせてあげましょう

```
# check installed sdk
[vagrant@kalturaadmin MyAndroid]$ ls /home/vagrant/android-sdk-linux/build-tools/
19.1.0  21.1.2 
[vagrant@kalturaadmin MyAndroid]$ ls /home/vagrant/android-sdk-linux/platforms/
android-19  android-22
```

## 2.3 サポートライブラリ追加
appcompat-v7がないエラーがでるので、Android Support RepositoryとAndroid Support Libraryを追加します。

```text:エラー
> Could not resolve all dependencies for configuration ':app:_debugCompile'.
   > Could not find com.android.support:appcompat-v7:22.2.1.
     Searched in the following locations:
         https://jcenter.bintray.com/com/android/support/appcompat-v7/22.2.1/appcompat-v7-22.2.1.pom
         https://jcenter.bintray.com/com/android/support/appcompat-v7/22.2.1/appcompat-v7-22.2.1.jar
     Required by:
         MyAndroid:app:unspecified

   > Could not find com.android.support:design:22.2.1.
     Searched in the following locations:
         https://jcenter.bintray.com/com/android/support/design/22.2.1/design-22.2.1.pom
         https://jcenter.bintray.com/com/android/support/design/22.2.1/design-22.2.1.jar
     Required by:
         MyAndroid:app:unspecified
```
```text:インストール
# 144- Android Support Repository, revision 25
android update sdk -a -u -t 144
# 145- Android Support Library, revision 23.1.1
android update sdk -a -u -t 145
# check installed
ls /home/vagrant/android-sdk-linux/extras/android/support
```

## 2.4 コードのビルド
```text:
rm -fR MyAndroid
git clone https://github.com/MariMurotani/MyAndroid.git
cd MyAndroid
./gradlew build
```
BUILD SUCCESSFULがみれたら終了です。

## おまけ
apacheにVirtualHostを作成してコンパイルしたリソースがダウンロードできるようにとりあえず設定します。
今回はテストなのであんまり気にしません、

```text:host8888.conf
<VirtualHost *:8888>
	DocumentRoot /home/vagrant/MyAndroid/MyAndroid/app/build/
	ServerName localhost
</VirtualHost>

<Directory "/home/vagrant/MyAndroid/MyAndroid/app/build/">
	Options Indexes FollowSymLinks Includes
	Order deny,allow
	Deny from all
	Allow from all
</Directory>
```

http://192.168.3.3:8888/intermediates/classes/release/com/example/mari/myandroid/TestDinamicLoad.class