読者です 読者をやめる 読者になる 読者になる

PlaygroundOSSを使ってAndroidのアプリ作成

動いたので最初から

Playgroundとは

「Playground」は、マルチプラットフォームな2D/2.5Dゲームを効率的に開発するためのフレームワークです。KLabのゲームタイトルでは株式会社ブシロード(本社:東京都中野区、代表取締役社長:木谷高明)と共同開発した「ラブライブ!スクールアイドルフェスティバル」と、グローバル向けに開発した「Rise to the Throne(ライズ・トゥ・ザ・スローン)」(※1)に使用されています。

とりあえずスクフェスに使われているゲームエンジン。 決してXcodeの中にあるPlaygroundではない

0.研究環境&対象OS

Mac OS X 10.9.5
Android Studio 1.0 RC1
Android NDK 9d
=============
Nexus5
Android 5.0 Lollipop

ADTは今年のI/O的に積極的にさけた方が良いと思っているので
早くAndroidStudio対応Docくだしあ><

1.いろいろインストール

Android NDK r10以降で行うとこける事がわかったのでr9代ので行う。とはいえ公式サイトには最新版のリンクしか無いので
/*
今は繋がらない
以下のサイトを参考にした。Where do I find old versions of Android NDK? - Stack Overflow

URL 今は繋がらない
https://dl.google.com/android/ndk/android-ndk-r9d-derwin-x86_64.zip


こっちは繋がった 2015/03/20
https://dl.google.com/android/ndk/android-ndk-r9e-darwin-x86_64.tar.bz2

2015/6/11
今現在、NDK r9を落とせる場所が見当たらないです……

で、NDK r9dをダウンロード。
Path を通す

export ANDROID_NDK_ROOT="/{落とした場所}/android-ndk-r9d"
PATH=$PATH:$ANDROID_NDK_ROOT

上の2行を.profileというファイル名で~/の中にかいておく。
公式DocではSDKのインストールをしていたがAndroidStudioを使のでいらないと思う。(最近は別にインストールするのか?)
とりあえず

$ ndk-build -v
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for x86_64-apple-darwin

こんな感じなら問題ない

2.cloneする

とりあえずgitは入れておこう

$git clone https://github.com/KLab/PlaygroundOSS.git

3.buildする

中に入って

cd PlaygroundOSS/Engine/porting/Android/GameEngine-android/

権限かえて

$chmod +x ./build.py

build実行

$./build.py --rebuild --project SampleProject

とりあえずSampleProjectと言う名前にしておくと良い)

4.AndroidStudioで開く

AndroidStudio 起動

最初の画面で
Import project

  • > /{落とした場所}/PlaygroundOSS/Engine/porting/Android/GameEngine-androidを選択

当然いい感じに開ける。しかし現状問題ばかりなのでいろいろ修正する。

1. build.gradleの変更
    dependencies {
        classpath 'com.android.tools.build:gradle:0.6.+'
    }

gradleのバージョンが古いと怒られるので

    dependencies {
        classpath 'com.android.tools.build:gradle:0.14.+'
    }

に変更する

    compileSdkVersion 17
    buildToolsVersion "18.1.0"

古いので

    compileSdkVersion 21
    buildToolsVersion "21.0.0"

最新版に書き換える

ここで、jniDirなんて知らないと怒られる。Gradle+Androidプラグイン(0.7以降)でNDKプロジェクトをビルドする - やらなイカ?
上のサイトの方でいい感じに対応が書かれているがPlaygroundのファイル構造が対応していないので
全部を書き換えるのは面倒である。

と言う事で

    task ndkBuild(type:Exec) {
        commandLine 'ndk-build', '-j'
    }

    task ndkClean(type:Exec) {
        commandLine 'ndk-build', 'clean'
    }

    task libsClean(type:Exec) {
        commandLine 'rm', '-rf', 'libs/armeabi', 'libs/armeabi-v7a', 'libs/x86', 'libs/mips'
    }

    if(new File(projectDir, "jni").exists()){
        tasks.withType(JavaCompile) {
            compileTask -> compileTask.dependsOn ndkBuild
        }

        tasks.withType(com.android.build.gradle.tasks.PackageApplication) {
            pkgTask -> pkgTask.jniDir new File(projectDir, 'libs')
        }

        clean.dependsOn 'ndkClean'
        clean.dependsOn 'libsClean'
    }

を以下だけ残して削除する。以下の分が無いとlibsを読み込んでくれない

    tasks.withType(com.android.build.gradle.tasks.PackageApplication) {
        pkgTask ->
            pkgTask.jniFolders = new HashSet<File>()
            pkgTask.jniFolders.add new File(projectDir, 'libs')
    }

5.Assetsの追加

TODO Windows上の作業を書き込む

$cd /PlaygroundOSS/Tutorial/01.SimpleItem/.publish/android/
$zip -r -0 /PlaygroundOSS/Engine/porting/Android/GameEngine-android/assets/AppAssets.zip ./*
$md5 AppAssets.zip |  cut -d "=" -f 2 | sed -e 's/ //g' > /Playground0SS/Engine/porting/Android/GameEngine-android/assets/version ./*

assetsと言うフォルダを作成し、中にAppAssets.zipとversionと言うファイルを入れる。
versionの中にはAppAssets.zipのmd5を書き込む
(AppAssetsを更新したらversionの中も書き込まなければ読み込まれない)

6.実行

何とも無ければ動く。
ndk-buildはコマンドラインで直接実行する。

$ndk-build -j