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

naichi's lab

3日後の自分(他人)への書き置き

GGJ2017 精華町 けいはんなプラザ会場に参加してきました

f:id:naichilab:20170123021716j:plain

タイトルの通り、GGJ2017に参加してきました。

記憶が新しいうちに感じたこととかをメモ。

GGJ(Global Game Jam)は一言で言うと全世界同時開催のゲームジャム。 知らない人たちが互いに集まって即興でチームを作り、48時間でゲームを作ります。

29時間で作ったゲーム紹介

心電図パニック

f:id:naichilab:20170122211625p:plain:w320f:id:naichilab:20170122211656p:plain:w320

心電図パニック Electrocardiogram panic | Global Game Jam®

Mac版は上記サイトからダウンロードできます。

  • 夜間病棟に勤務する医者となって次々運び込まれる急患をひたすら助けるゲーム。
  • すごい勢いでやってくる患者
  • 放っておくとすぐに心臓が止まるので助けてあげよう
  • オンラインランキング対応

これをプログラマ2人、デザイナ3人の5人で作りました。

土曜日の10時にチーム分けされて、翌日15時に完成なので29時間ですね。 いやー楽しかった。

覚えてることメモメモ

21日 07:00〜

9時半集合だけど7時に出発しないと間に合わない。 京都駅から直通バスがあるって見つけたからタクシーでバス停まで行ったら土日は運行してないとのこと。 マジかよ、調べ直して近鉄で行けることを発見。

近鉄で揺られること40分ぐらい。さらにバスで15分ぐらい。

途中にかなりでかい工場やオフィス、国会図書館とか見かけた。 学研都市って何かわかんないけどなんだかワクワクする感じ。

でもやっぱ遠いぞけいはんなプラザ。

21日 09:00〜

会場になんとか到着。

f:id:naichilab:20170123010638j:plain:w320
とんがってるのは世界一巨大な日時計らしい。
夜はレーザー光線が出る。 なんでや。

ホテルや貸会議室がくっついたような行政施設?かな。

ロビーで待っていると プログラマのみ 先に部屋に通される。

何事かと思ったら、かなりプログラマが不足しているらしく、チーム分けの作戦会議がしたかったらしい。

6人(ぐらい)中、ゲーム作ったことある人が3人いたので3チームに別れることに決定。

そのままチームリーダーに任命されてしまった。ABCチームのうち、Bチーム。

21日 09:30〜

他の参加者も部屋に通される。 どうもチーム分けは事前にされていたようで?運営の人が名前呼びながらテキパキとチームを振り分けていく。すげー手際いい。

あっという間に自分のいた机に5人が座った。

自分を含めて男性3人、女性2人
プログラマの人を除き全員Mac、学生は学校で全員購入するそうな。さすがデザイン系。

全体的に学生は多く、特に精華大学の学生だけで9人ぐらい(全員デザイナ)いた。

そのあと運営の方から自己紹介や開催の経緯説明、精華町町役場の方から精華町の紹介などがありました。

f:id:naichilab:20170123011005j:plain:w320
精華町のイメージキャラクター 京町セイカちゃん
めっちゃおしてますね
https://twitter.com/kyomachi_seika

21日 09:45〜

GGJお約束のお題発表。ビデオを見る。GoldスポンサーのUnityの宣伝がふんだんに入ってた。

お題は WAVES 。波。

21日 10:00〜

ここからは各チームごと、チームリーダーに一任された。

とりあえず自己紹介はじめる。

  • 自分はプログラマで趣味でUnity使ってることを説明。あと 太陽人間の宣伝。
  • 他にプログラマが一人。SEやっててゲーム開発は趣味とのこと。
  • あとは学生が3人。全員同じ学科(キャラクターデザイン化)で2回生と3回生。
    • イラスト見せてもらった。うますぎ。

21日 10:30〜

付箋を使いながらブレスト。2~30枚が出たかな?

WAVE、、、波、、、波形(グラフ)、、、心電図、、、心肺停止、、、心臓マッサージ!!

訳わかんないけどこんな感じで方向性決定。

ここからはA3模造紙に画面レイアウトをざっくり書いてみてアイデアを詰めていく。

絶対面白いわ!って楽しそうにする学生。いいねいいね。

21日 11:30〜

運営の人からWikiやSlackの説明を受け、チームメンバー全員に設定。自分以外Slackは初めてだった。

さらに運営の人がSilverスポンサーのGitHubも利用を勧められたので(勧められなくても使うけど)、 全員にGitHubアカウントを取得してもらいSourceTreeもインストール。こっちも自分以外使うのは初めて。

作ったプライベートリポジトリに全員を招待。

21日 12:00〜

近くにあるでかいスーパー(アピタだったか?)のフードコートでご飯。

f:id:naichilab:20170123011632j:plain:w320
ゆっくり食べられる最後のご飯かなーとか考えてた。

21日 13:00〜

SlackやGit設定を全員分完了。

もう一人のプログラマはキャラクタの移動処理とかを作り始めてもらう。
自分はゲーム全体の流れを作るためにゲームマネージャやシーン制御クラス、音関係のマネージャクラスとかを過去プロジェクトから流用して雛形を作った。

デザイナの3人には背景、メインキャラクター、患者に分かれてラフ作成開始してもらった。

背景に関しては30分もしないうちにラフが出てきてビビる。

リソース作成早すぎてプログラムまにあわねーぞこれは。

21日 15:00〜

それぞれのチームのコンセプト発表


いつのまにか動画撮影&公開されてた

発表するいい練習になるだろうと学生をそそのかして発表させる。超緊張してるw

となりのAチームはハゲについて熱く語ってましたね・・・Cチームは2人対戦ゲームになるとのこと。
楽しみ。

ここで宿泊者には部屋の鍵が配られる。

f:id:naichilab:20170123012444j:plain:w320
精華町さんびっくりするほど太っ腹。
これだけ快適だと来年は規模拡大するだろうし宿泊者や社会人は有料になるのかなーとか考えてた。

発表後は引き続きプログラムや素材作成

f:id:naichilab:20170123012358j:plain:w320
作業風景

続々とできあがる画像素材たち。
ぜんぜん進まないプログラム。

あーこれは徹夜かなって感じ。

ゲームの細かいところだとかはすぐに声を掛けてプチミーティングを開く。悩んでる暇も無いのでその場その場で決めていく。

チーム名とか、翌日までに決めればいいようなものは付箋に書き出して壁に貼っておいた。余裕のある人にやってもらう予定。

プログラマ間で共有するやることリストはGitHubのプロジェクト機能でカンバン管理することにした。

f:id:naichilab:20170123012249p:plain:w320
まぁまぁ役立ったかな?

21日 17:00〜

すがやみつる先生が応援に来てくださった。
清華大学から参加している9名の学生は、すべて先生の教え子らしい。
学生との会話を聞いているととても慕われてらっしゃるのが伝わってきました。


ドーナツごちそうさまでした。

21日 19:00〜

運営の方から差し入れのたこ焼き

f:id:naichilab:20170123013235j:plain:w320
各チームに3パックずつ。
近所のスーパーの売り切りセールで買い占めてきたとのことw ごちそうさまでした。

このころUnityCloudBuildも設定。

f:id:naichilab:20170123013436p:plain:w320 これでWin/Mac用ビルドが常に届く。 チームメンバー全員にUnityアカウントも作ってもらい、アクセスできるようにした。 あんま使わなかったけどね。

この日は夜中3時ぐらいまで作業した。

  • 背景やあらかたのUI素材は完成
  • リザルト画面素材も完成
  • プレイヤー(医者)素材は完成
  • プログラムは医者の移動と患者の生成ぐらいは完成
    • ゲームロジックやUIの制御とかは全く。やばい。

相変わらずプログラマの進捗ピンチ

とりあえずデザイナのみんなには明日引き続き作業してもらいたいことを説明して解散。

もう一人のプログラマの人とは同じ部屋だったのでもう少し進める。

結局5時までやった。

  • 患者の生成と退場処理完成
  • UI要素の制御もある程度組んだ

なんとかなりそうな目処が立ったので寝る。

22日 07:00〜

朝7時に部屋から会場に向かうと、まだ人は少なかった。

f:id:naichilab:20170123013823j:plain:w320

朝ごはんは雲丹亭ラーメン。

f:id:naichilab:20170123014042j:plain:w320

朝食後はひものさんと早朝の変なテンションでじゃがりこタワー作った。


訳がわかんねぇな。

22日 10:00〜

ベータ版をプレゼン。

UIとかはまだまだだけどだいたいのゲームロジックは完成。
なんとかなりそうだ。

22日 12:00〜

運営からピザの差し入れ

f:id:naichilab:20170123014229j:plain:w320
ごちそうさまでした。ジャムも佳境って感じですねぇ

BGMやSEを実装し、開発も佳境へ。

午後はなるべく難易度調整に時間を割く、
プログラマが調整し、デザイナ全員でテストプレイ。

全員にSourceTree(Git)とUnityをインストールしておいたので、
プログラマがPush、デザイナはPullして即座にUnityエディタでプレイ。
ってことができた。これはなかなかいい感じだった。

みるみるゲームとして遊べる形になっていく。

終了30分前から急遽オンラインランキングを実装することにした。
NCMB使えば楽勝!

22日 15:00

そうこうしているうちに締め切り。

f:id:naichilab:20170123014654j:plain:w320
モニターに映し出されるカウントダウン

お疲れ様でした!

ここからGGJ本家サイトへの登録作業。地味だけど大事な作業。

22日 16:00〜

全チーム完成品のお披露目!

今回は全チームちゃんとゲームとして動くところまでできていました。みんなすごい。

これで冒頭に紹介したゲームができあがりです。

22日 17:00〜

試遊会&懇親会

f:id:naichilab:20170123015232j:plain:w320
f:id:naichilab:20170123015233j:plain:w320
f:id:naichilab:20170123015234j:plain:w320
懇親会の最後にはちゃっかり京ゆにの宣伝もさせてもらいました!

最後まで和気藹々と、談笑の絶えない会場でした。

最後に全員で記念撮影してお開き!

皆さんお疲れ様でした!

参加してみて

やっぱりゲームを作るのは楽しい!
しんどいけれど、とんでもなく多くの経験値を得られるすばらしいイベントでした。

プログラマが二人いたおかげで、適度に作業分担しつつ作りきることができ助かりました。

0からキャラクターを生み出せるデザイナ(で呼び方あってる?)さんのすごさ、自分には絶対無理なので尊敬しっぱなしでした。SlackだのGitだのSourceTreeだのと初めて聞くツールにも関わらず使ってみる姿勢は好印象でした。Gitとかプログラマでもなかなか難しいツールなんやけど使ってくれてありがとう。

前回(一昨年)のゲームジャムはメインプログラマを担当したけれど全く時間が足りず大変な思いをした。それから2年、着実に書いたソースは残っているので管理クラス等を流用することでかなり新規実装の負担を減らすことができたと思う。

あとはゲームジャムというとプログラマ8割!みたいなイメージでしたが、今回はデザイナ6割というプログラマから見たら(いつもグラフィックリソースに困るから)夢のような環境でした。

このようなすばらしい企画を実行してくださった精華町町役場の皆さん、運営側の皆さん、ありがとうございました。そしてお疲れ様でした。

また来年も開催されるのであれば是非参加したいと思います。
また機会があればよろしくおねがいします!

【読んだ】スペシャリストが解説する Amazon Web Services 知っておきたい基礎知識 IT Leaders選書

読んだ本の感想メモ。

読んだ本

スペシャリストが解説する Amazon Web Services 知っておきたい基礎知識 IT Leaders選書

スペシャリストが解説する Amazon Web Services 知っておきたい基礎知識 IT Leaders選書

なぜ読んだ?

  • AWS触る機会が増えそう
  • AWSの知識ゼロ
  • AWSのことググっても情報多すぎ!
  • 広く浅く、基礎知識つけたい
  • 知人に聞いたら紹介してくれた

どんな本?

  • AWSの知識ゼロの状態で広く浅く基礎知識をつけるのにうってつけ
  • たぶんこういう記事の集約本?
  • 各サービスをちょうどいい分量で紹介している
    • サービスごとに0.5P~3Pほどで読むのに苦じゃない分量
    • このサービスはこういうもので、これを使えばこんなことができるよね!みたいな説明
    • セットアップ方法や設定方法とかは無い
      • 各サービスの詳しい使い方はググるなりマニュアル読むなり必要
  • サービスのカテゴリごとに章立てしてあり、とてもわかりやすかった。
  • 通して読んでも2〜3時間あれば読めるぐらい

まとめ

AWS使ってみたいけどいっぱいあって何が何だか・・・って人にオススメ

スペシャリストが解説する Amazon Web Services 知っておきたい基礎知識 IT Leaders選書

スペシャリストが解説する Amazon Web Services 知っておきたい基礎知識 IT Leaders選書

hubotメモ

今更ながらhubot触ってみる。

下記記事を参考にしながら進める。 Hubot / ChatOps とは - Qiita

ただのメモ書き

メモ

nodejsのインストール

  • macだとnodebrewってのが主流?
    • nodebrewで入れた

新規でhubotを作成

yo hubot

新規でhubotスクリプトを作る

$ mkdir hubot-hoge
$ cd hubot-hoge
$ yo hubot:script

あとは質問に答えるだけ。

スクリプトをローカルで確認

HUBOT_SHELL_USER_NAME='naichi' PATH="./node_modules/hubot/node_modules/.bin:$PATH" $(npm bin)/hubot -a shell -n hubot -r src

herokuにデプロイ

git管理してから

heroku create
git push heroku master
heroku config:set \
HUBOT_SLACK_TOKEN=xxxx-11111111111-aaaaaaaaaaaaaaaaaaaaaa

リスナー登録

  • robot.respond /hello/, (res) ->
    • hubot hello のようなメンションを受け取るリスナーを登録する
  • robot.hear /(.+)から選んで/, (msg) ->
    • パターンそのままを受け取るリスナーを登録する

npm install

$ npm install --save cheerio

-g をつけなければそのフォルダにだけインストールされるみたい。

githubからnpm install

$ npm install --save naichilab/hubot-7days-later

上記npm install をした上で、external-scripts.json に追記する

[
  "hubot-diagnostics",
  "hubot-help",
  "hubot-heroku-keepalive",
  "hubot-google-images",
  "hubot-google-translate",
  "hubot-pugme",
  "hubot-maps",
  "hubot-redis-brain",
  "hubot-rules",
  "hubot-shipit",
  "hubot-7days-later"
]

環境変数

process.env.HOGEHOGE

参考:設定を読み込む Hubot スクリプトをつくろう - Qiita

test

npm install -g grunt-cli しておく

grunt test で単発実行

grunt test:watch でファイル監視&自動実行

【unity、Cloud Build】unityプロジェクトにGoogleAnalyticsを導入してCloud Buildを通すとこまで

f:id:naichilab:20161130021717p:plain:w320

先日の記事でFirebaseの導入に失敗したので代わりにGoogleAnalyticsを入れる。

はじめに

AdMob導入済みの

この記事の最後にも書きますが、 Cloud Buildが見事にエラーしまくるのでGit等のコミット(バックアップ)はこまめにね!!!

環境

  • やった日 : 2016/11/30
  • Google Mobile Ads Unity Plugin v3.1.2 (ビルドエラー対応で更新 3.0.5 -> 3.1.2)
  • GoogleAnalyticsV4.unitypackage (v0.5-beta) (この記事で新規追加)
  • Unity 5.5.0f2

手順

基本的に下記ページに従う

Google Analytics Plugin for Unity - Developer Guide  |  Analytics for Unity  |  Google Developers

  1. あらかじめGoogleAnalyticsにプロパティを用意しておく

    3つ用意した。

    • 太陽人間iOS
    • 太陽人間Android
    • 太陽人間Other
  2. 下記リポジトリからunity用プラグインのダウンロード

    https://github.com/googleanalytics/google-analytics-plugin-for-unity/releases

    GoogleAnalyticsV4.unitypackageをダウンロードした。

  3. [Android]AndroidManifestへのタグ追加はAdMob導入ですでに済んでいたので不要

  4. [iOS]AdSupportとかの参照追加とかも、AdMobとかですでにやってありそうだったので無視

    ちゃんと参照追加しましょう。 これがiOSビルドのエラー2(後述)を引き起こすので注意。

  5. GAv4 プレハブの配置と設定

    f:id:naichilab:20161128232255p:plain

    Send Launch Event にチェックを入れておくと起動するだけでデータが飛ぶみたい?

起動

Prefabをシーンに置いたまま、Unityエディタ上で起動してみると

Google Analytics -> レポート -> 作ったプロパティのビュー -> リアルタイム

f:id:naichilab:20161128232525p:plain

表示された!

どの画面を見ているかを取得

ここの内容です -> Google Analytics Plugin for Unity - API Reference  |  Analytics for Unity  |  Google Developers

今のプロジェクトでは SceneSwitcher ってクラスで画面遷移を制御してる。

そいつに GoogleAnalyticsV4のインスタンスをもたせて

 public class SceneSwitcher : MonoBehaviour, ISceneSwitcher
    {
        public GoogleAnalyticsV4 googleAnalytics;

画面切り替えのタイミングで LogScreen メソッドを呼び出す

googleAnalytics.LogScreen ("Field");

実行してみる。

f:id:naichilab:20161128233249p:plain

おー、簡単にどの画面開いてるか取れるようになった。

こりゃ楽しい。

CloudBuild上でエラーの嵐

エディタ上ではここまでで動くんだけど、Cloud Buildが Android / iOS ともに壊れてひどい目にあった。

よなよな対応して直すのに2日かかった...
それぞれの対応法は長くなるので全て別記事!

Androidのエラー

Unable to convert classes into dex format.

blog.naichilab.com

iOSのエラー1

'pod' command not found

blog.naichilab.com

iOSのエラー2

Undefined symbols for architecture armv7:

blog.naichilab.com

おわりに

いやー大変だった・・・

けどこれで AdMob + Google Analytics + アドフリくん を含んだ形でCloud Build通るようになったし一段落かな・・・

【unity、iOS、CloudBuild】Google Analyticsを入れたらビルドエラー(Undefined symbols for architecture armv7:)

f:id:naichilab:20161130021717p:plain:w320

blog.naichilab.com

上記前回の記事の続き。

cocoapodsのエラーは消えたけど別のエラーが出てきた。

エラー内容

Cloud Buildのコンパクトログではこんな感じ

241:        [xcode]       -[GAISqlStore errorMessage] in libGoogleAnalyticsServices.a(GAISqlStore.o)
242:        [xcode]   "_NSSQLiteErrorDomain", referenced from:
243:        [xcode]       -[GAIDataStore performBlockAndWait:withError:] in libGoogleAnalyticsServices.a(GAIDataStore.o)
244:        [xcode]       -[GAISqlStore errorMessage] in libGoogleAnalyticsServices.a(GAISqlStore.o)
245:        [xcode]   "_NSSQLiteErrorDomain", referenced from:
246:        [xcode]       -[GAIDataStore performBlockAndWait:withError:] in libGoogleAnalyticsServices.a(GAIDataStore.o)
247:        [xcode] clang: error: linker command failed with exit code 1 (use -v to see invocation)
248:        [xcode] ** BUILD FAILED **

なんかパッとしないエラーだったのでフルログを見てみると

11729:        [xcode] Undefined symbols for architecture armv7:
11730:        [xcode]   "_sqlite3_prepare_v2", referenced from:
11731:        [xcode]       -[GAISqlStore prepareSql:] in libGoogleAnalyticsServices.a(GAISqlStore.o)
11732:        [xcode]   "_sqlite3_errmsg", referenced from:
11733:        [xcode]       -[GAISqlStore errorMessage] in libGoogleAnalyticsServices.a(GAISqlStore.o)
11734:        [xcode]   "_sqlite3_close", referenced from:
11735:        [xcode]       -[GAISqlStore closeDatabase] in libGoogleAnalyticsServices.a(GAISqlStore.o)
11736:        [xcode]   "_sqlite3_open_v2", referenced from:
11737:        [xcode]       -[GAISqlStore openAndValidateDatabase] in libGoogleAnalyticsServices.a(GAISqlStore.o)
11738:        [xcode]   "_sqlite3_column_int", referenced from:
11739:        [xcode]       -[GAISqlStore rowCountForTableWithName:] in libGoogleAnalyticsServices.a(GAISqlStore.o)
11740:        [xcode]   "_inflateInit2_", referenced from:
11741:        [xcode]       +[GAICompressionUtil gai_dataByInflatingBytes:length:isRawData:] in libGoogleAnalyticsServices.a

お、それっぽいメッセージ( Undefined symbols for architecture armv7: )出てる。

ぐぐる

あれやこれやと調べていくと、 XCodeProject上でライブラリの参照が足りてないことが原因でした。

  • CoreData.framework
  • libz.tbd
  • libsqlite3.tbd

ローカルのXCodeで上記を追加したらビルド成功したので間違いなさそう。

f:id:naichilab:20161130235925p:plain

次はこれらを自動参照するようにせねば。

ライブラリの自動参照設定

Unity Cloud Buildではいちいち手動で参照設定できないので自動化する。

blog.naichilab.com

上記記事で書いたスクリプトを使い続けてるんだけど、そこに追記する。

下記を追加

     //フレームワーク追加
        List<string> frameworks = new List<string> () {
            "CoreData.framework",
            "libz.tbd",
            "libsqlite3.tbd"
        };

        foreach (var framework in frameworks) {
            pj.AddFrameworkToProject (target, framework, false);
        }

ビルド

成功した!!

GoogleAnalyticsのマニュアルみると・・・

Google Analytics Plugin for Unity - Developer Guide  |  Analytics for Unity  |  Google Developers

しっかり書いてあった!!!

f:id:naichilab:20161201000652p:plain

ごめんなさいごめんなさい。

【unity、iOS、CloudBuild】AdMobやGoogleAnalyticsを入れたらビルドエラー('pod' command not found)

f:id:naichilab:20161130021717p:plain:w320

タイトルの通り。

Google AnalyticsをUnityで使おうとして入れたんだけど、 CloudBuildが通らなくなった。

環境

  • Google Mobile Ads Unity Plugin v3.1.2
  • GoogleAnalyticsV4.unitypackage (v0.5-beta)
  • Unity 5.5.0f2

エラー内容

[Unity] Player export failed. Reason: 'pod' command not found; unable to generate a usable Xcode project. You can install cocoapods with the Ruby gem package manager:

cocoapods がないって言ってる。

状況

下記記事の通り対応した直後。 GoogleAnalyticsPlugin を入れた後で GoogleMobileAdsPlugin を入れてごにょごにょした状況。

blog.naichilab.com

すでに訳わからん状況からのスタート。

ぐぐる

それっぽいフォーラムを発見。

answers.unity3d.com

対応

1. いったんUnityのプラットフォームをiOSに変更。

プラットフォーム変更することでResolverが走るかな?と思ったけど何も起こらなかった。
このまま進める。

2. Assets/GoogleMobileAds/Editor/AdMobDependencies.cs から下記を削除

        Type iosResolver = Google.VersionHandler.FindClass(
            "Google.IOSResolver", "Google.IOSResolver");
        if (iosResolver == null) {
            return;
        }
        Google.VersionHandler.InvokeStaticMethod(
            iosResolver, "AddPod",
            new object[] { "Google-Mobile-Ads-SDK" },
            namedArgs: new Dictionary<string, object>() {
                { "version", "7.13+" }
            });

3. ローカルビルド

XCode再インストールしようとしてできてないのでパス…

3. CloudBuildでビルド

エラーが変わった・・・

241:        [xcode]       -[GAISqlStore errorMessage] in libGoogleAnalyticsServices.a(GAISqlStore.o)
242:        [xcode]   "_NSSQLiteErrorDomain", referenced from:
243:        [xcode]       -[GAIDataStore performBlockAndWait:withError:] in libGoogleAnalyticsServices.a(GAIDataStore.o)
244:        [xcode]       -[GAISqlStore errorMessage] in libGoogleAnalyticsServices.a(GAISqlStore.o)
245:        [xcode]   "_NSSQLiteErrorDomain", referenced from:
246:        [xcode]       -[GAIDataStore performBlockAndWait:withError:] in libGoogleAnalyticsServices.a(GAIDataStore.o)
247:        [xcode] clang: error: linker command failed with exit code 1 (use -v to see invocation)
248:        [xcode] ** BUILD FAILED **

長くなるので次の記事

blog.naichilab.com

【unity、Android】AdMob導入済みプロジェクトにGoogleAnalyticsを入れたらビルドエラー(Unable to convert classes into dex format)

f:id:naichilab:20161130021717p:plain

AdMob導入済みプロジェクトのGoogle Analyticsを入れたらビルドが通らなくなった。

iOSもエラーしてるけどまずはAndroidビルドエラーを解決したい。

環境

  • Google Mobile Ads Unity Plugin v3.0.5
    • 半年前ぐらいに入れた今では古いやつ
  • GoogleAnalyticsV4.unitypackage (v0.5-beta)
  • Unity 5.5.0f2

エラーメッセージ

CommandInvokationFailure: Unable to convert classes into dex format.
/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/bin/java -Xmx2048M -Dcom.android.sdkmanager.toolsdir="/Users/naichi/Library/Android/sdk/tools" -Dfile.encoding=UTF8 -jar "/Applications/Unity/PlaybackEngines/AndroidPlayer/Tools/sdktools.jar" -

stderr[
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzlu;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzlv;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzlw;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzlx;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzly;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzlz;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzma;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzmb;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzmc;

UNEXPECTED TOP-LEVEL EXCEPTION:
java.lang.RuntimeException: Translation has been interrupted
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:613)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:311)
    at com.android.dx.command.dexer.Main.run(Main.java:277)
    at com.android.dx.command.dexer.Main.main(Main.java:245)
    at com.android.dx.command.Main.main(Main.java:106)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at SDKMain.main(SDKMain.java:129)
Caused by: java.lang.InterruptedException: Too many errors
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:605)
    ... 9 more
]

Lcom/google/android/gms/internal/zzlu みたいなのが重複してるっていってるけどなんのことやら。 どこにいるんだこれは。

ググる

なんかGoogle AnalyticsのResolverは古いからAdMobプラグインのやつで上書きしろっていってる。 まじかよ・・・?

AdMob and Google Analytics packages conflict · Issue #299 · googleads/googleads-mobile-unity · GitHub

確かにAdMobプラグインをだいぶ前に入れた後、つい最近GoogleAnalyticsプラグインを入れた。

試す

1. Assets/PlayServicesResolver/* を消す

2. 最新のAdMobプラグインをダウンロード

Releases · googleads/googleads-mobile-unity · GitHub

3.1.2まで上がってた

3. ダウンロードしたAdMobプラグインをインポート

f:id:naichilab:20161130014607p:plain

かなり変わってるな・・・

これ聞かれたけどOK押した f:id:naichilab:20161130014728p:plain

4. Assets/GoogleMobileAds/Editor/AdMobDependenies.cs に下記を追加

似たような箇所があるけど修正じゃなくて追加

Google.VersionHandler.InvokeInstanceMethod(
    svcSupport, "DependOn",
    new object[] { "com.google.android.gms", "play-services-analytics",
            "LATEST" },
    namedArgs: new Dictionary<string, object>() { 
       {"packageIds", new string[] { 
        "extra-google-m2repository",
        "extra-android-m2repository"} } 
    });

5. エディタ上で実行->エラー

KeyNotFoundException: The given key was not present in the dictionary.
System.Collections.Generic.Dictionary`2[System.String,System.Collections.Generic.HashSet`1[System.String]].get_Item (System.String key) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Collections.Generic/Dictionary.cs:150)
Google.JarResolver.PlayServicesSupport.ResolveDependencies (Boolean useLatest)
GooglePlayServices.ResolverVer1_1.DoResolutionNoAndroidPackageChecks (Google.JarResolver.PlayServicesSupport svcSupport, System.String destinationDirectory, Google.JarResolver.OverwriteConfirmation handleOverwriteConfirmation)
GooglePlayServices.ResolverVer1_1+<DoResolution>c__AnonStorey1.<>m__0 ()
GooglePlayServices.ResolverVer1_1.DoResolution (Google.JarResolver.PlayServicesSupport svcSupport, System.String destinationDirectory, Google.JarResolver.OverwriteConfirmation handleOverwriteConfirmation, System.Action resolutionComplete)
GooglePlayServices.PlayServicesResolver.Resolve (System.Action resolutionComplete)
GooglePlayServices.PlayServicesResolver.AutoResolve ()
UnityEditor.EditorApplication.Internal_CallUpdateFunctions () (at /Users/builduser/buildslave/unity/build/artifacts/generated/common/editor/EditorApplicationBindings.gen.cs:197)

6. Unity終了

7. 古いライブラリ削除

  • Assets/Plugins/Android/play-services-*.aar を全部削除

    f:id:naichilab:20161130020519p:plain

  • ProjectSettings/ から下記2ファイルを削除

    • GoogleAarExplodeCache.xml
    • GoogleDependencyAdMobUnity.xml

    f:id:naichilab:20161130020703p:plain

8. Unity再起動

一度再起動しても Assets/Plugins/Android/play-service-* が出てこなかったのでもう一度再起動。

f:id:naichilab:20161130021256p:plain

お、綺麗にバージョンが揃った。

最初はどれか9.4が混ざってたきがする。

9. ローカルビルド

成功したあああああああああ

10. CloudBuild

これも成功したーーーー

めでたしめでたし。