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

naichi's lab

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

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

Unity AdMob Google Analytics Error

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

これも成功したーーーー

めでたしめでたし。

【unity】unityプロジェクトにFirebase Analyticsを入れてみる(失敗)

Unity Firebase Firebase Analytics

f:id:naichilab:20161127032041p:plain

Firebase、気になってたので試してみる。

やったことをメモ

はじめに

つい最近(11/24だから3日前)、unity用のパッケージが出たらしい。
googledevjp.blogspot.jp

なんてタイムリーな。

環境

  • 書いた日:2016/11/27
  • Unity 5.5.0b4
  • firebase_unity_sdk 1.0.1

手順

基本はここに書かれてる通りにするだけ
https://firebase.google.com/docs/unity/setup

自分は Firebase Analytics しか使わないけど他も同じだと思う。

  1. Firebase上でアプリを追加

    • iOSアプリ

      f:id:naichilab:20161127025143p:plain:w320
      作成すると GoogleService-Info.plist がダウンロードされる。

    • Androidアプリ

      f:id:naichilab:20161127031247p:plain:w320
      作成すると google-services.json がダウンロードされる。

  2. ここから Firebase Unity SDK をダウンロードする。

    2016/11/27現在、firebase_unity_sdk_1.0.1.zip だった。
    中身はunitypackageの詰め合わせ
    f:id:naichilab:20161127025522p:plain:w320

  3. Unityプロジェクトを開いた状態で、 FirebaseAnalytics.unitypackage をダブルクリックして取り込む。

    なんかたくさんあるけど全部。
    f:id:naichilab:20161127025939p:plain:w320

  4. GoogleService-Info.plist をUnityフォルダにコピー

    どこでもいいって書いてあったので Assets/Plugins/iOS/Firebase/ に入れた。
    f:id:naichilab:20161127030700p:plain

  5. google-services.json をUnityフォルダにコピー

    どこでもいいって書いてあったので Assets/Plugins/Android/Firebase/ に入れた。
    f:id:naichilab:20161127031438p:plain

え、これだけ・・・

プッシュしてUnityCloudBuildの結果待ち。

ビルドエラー

f:id:naichilab:20161127033615p:plain:w480

101: [Unity] Assets/PlayServicesResolver/Editor/AdMobDependencies.cs(14,9): error CS0433: The imported type `Google.JarResolver.PlayServicesSupport' is defined multiple times
102: [Unity] /BUILD_PATH/rirunaichi.sun-human.debug-for-release-ios/Assets/PlayServicesResolver/Editor/Google.JarResolver.dll (Location of the symbol related to previous error)
103: [Unity] /BUILD_PATH/rirunaichi.sun-human.debug-for-release-ios/Assets/PlayServicesResolver/Editor/JarResolverLib.dll (Location of the symbol related to previous error)

JarResolverが2つあるとな。
たぶんもともとAdMob入れてたしやろなぁ。

たしかに2つある。

f:id:naichilab:20161127033706p:plain

コミット履歴を見る限りAdMobのと競合で間違いなさそうだ・・・

f:id:naichilab:20161127033923p:plain

安直に片方消してみる。さよなら JarResolverLib

ってなんか Install Android SDK Package ってのが動き出した 。いつからいた???

f:id:naichilab:20161127034122p:plain:w480

うおー怖い。

f:id:naichilab:20161127034334p:plain

ビルド壊れる予感がプンプンするぜ。

f:id:naichilab:20161127034401p:plain

Gitに身を委ねて全部OK、OK、、、

再度プッシュしてUnityCloudBuildの結果待ち。

結果

Android

ビルドは通った。

けど実機で実行するとアイコン押した瞬間に落ちる。

エラー内容

11-28 01:35:18.705: E/AndroidRuntime(6561): java.lang.NoSuchMethodError: No static method zzb(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; in class Lcom/google/android/gms/common/internal/zzaa; or its super classes (declaration of 'com.google.android.gms.common.internal.zzaa' appears in /data/app/com.rircreate.sunhuman-2/base.apk)
11-28 01:35:18.705: E/AndroidRuntime(6561):     at com.google.firebase.provider.FirebaseInitProvider.zza(Unknown Source)
11-28 01:35:18.705: E/AndroidRuntime(6561):     at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source)
11-28 01:35:18.705: E/AndroidRuntime(6561):     at android.app.ActivityThread.installProvider(ActivityThread.java:5811)
11-28 01:35:18.705: E/AndroidRuntime(6561):     at android.app.ActivityThread.installContentProviders(ActivityThread.java:5403)
11-28 01:35:18.705: E/AndroidRuntime(6561):     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5342)
11-28 01:35:18.705: E/AndroidRuntime(6561):     at android.app.ActivityThread.-wrap2(ActivityThread.java)
11-28 01:35:18.705: E/AndroidRuntime(6561):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1528)
11-28 01:35:18.705: E/AndroidRuntime(6561):     at android.os.Handler.dispatchMessage(Handler.java:102)
11-28 01:35:18.705: E/AndroidRuntime(6561):     at android.os.Looper.loop(Looper.java:154)
11-28 01:35:18.705: E/AndroidRuntime(6561):     at android.app.ActivityThread.main(ActivityThread.java:6077)
11-28 01:35:18.705: E/AndroidRuntime(6561):     at java.lang.reflect.Method.invoke(Native Method)
11-28 01:35:18.705: E/AndroidRuntime(6561):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
11-28 01:35:18.705: E/AndroidRuntime(6561):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)

iOS

ビルド通らず。

[Unity] Error running cocoapods. Please ensure you have at least version  1.0.0.  You can install cocoapods with the Ruby gem package manager:

cocoapodsがないとかなんとか・・・

ちとこれ以上調べてられないのでロールバックして終了〜

まとめ

いきなり現行プロジェクト(AdMobとかAdfurikunとか入ってる)に突っ込むのは無謀だったかも。

そのうちシンプルなプロジェクトで再挑戦する。

噂のPop会に参加してみた

日記

噂のPop会に潜入取材してきましたよ。

そもそもPop会って?

アプリ開発会の首領、Popさん率いる闇の会合

Popさんって誰?

Cocos2dxを操り趣味開発(たぶん)のはずなのにすごい勢いでリリースしていく開発ガチ勢、凄腕プログラマー。 素材は全部Excelのオートシェイプで描いてるって噂・・・マジか。

最新作、マジックメーカー楽しいよ!

、、、だと思ってましたが違いました。

そのところ実際はめっちゃ真面目にアプリについて語り合うSkype会議でした。

何するの?

基本は毎週土曜にやってるSkype会議らしいです。

進捗報告会

あらかじめGoogleDriveにapkをアップロードしておき、各々ダウンロード。

プレイしながら ここがいい ここがわるい とガチで意見を出し合います。

急な参加でしたが無理言って 太陽人間(開発中のアプリ) をプレイしてもらいました。

リアルタイムで埋まっていく感想シート...!!!

f:id:naichilab:20161126232253p:plain

みんな むすこ 好きそうでなによりw

案の定、残課題としてタスク積んである箇所はバシバシ指摘もらいましたw

それ以外にも気づいてなかった箇所もいくつか指摘もらえてかなりの収穫。

これはいい刺激。

apkを見せる(プレゼンする側になる)のは隔週

参加者が多くて毎週全員のを見てると時間がかかり過ぎるそうで、 apkを見せるのは隔週ぐらいで回してるそうです。

見せない週は他の人のゲームを遊んで意見を書く側に徹するってことですね。

まとめ

Popさんのモチベーション保ってる秘密を垣間見た気がします。

参加し続けると以下のような効果を得られる気がします。

  • 開発者自身が気づけないところに気づかせてもらえる
  • 次回までに進捗を出さないといけない適度なプレッシャーで開発が進む

きになる人はぜひ・・・!

ぜひ!

【unity】AdMob導入済みプロジェクトにアドフリくん入れたらビルドエラー already added: Landroid/support/v4/〜

タイトルの通り。

すでにAdMobを導入済みのUnityプロジェクトに、 アドフリくんSDKを入れたらビルドエラーするようになった。(Unity Cloud Build)

環境

  • Mac OS X El Capitan 10.11.6
  • Unity 5.5.0b4
  • adfurikunSDK_Unity_2_7
    • 導入時、adfurikunPlugin_nogooglelibの方のunitypackageを使った。

エラー内容

200: [Unity] Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat;
201: [Unity] Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoIcsImpl;
202: [Unity] Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoJellyBeanMr2;
203: [Unity] Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoStubImpl;
204: [Unity] Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
205: [Unity] Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompatIcs;
206: [Unity] Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompatJellyBeanMr2;
207: [Unity] Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/app/ActionBarDrawerToggle;
208: [Unity] Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/app/ActionBarDrawerToggle$1;
209: [Unity] java.lang.RuntimeException: Translation has been interrupted
210: [Unity] Caused by: java.lang.InterruptedException: Too many errors

対応

どうもGooglePlayServiceの support/v4 ってのが重複してるような気がした。

アドフリくんSDK導入時のコミット履歴をみたら、 Assets/Plugins/Android/libs/android-support-v4.jar ってのがあったのでそれを削除してみる。

f:id:naichilab:20161122235954p:plain

お、ビルド成功した。

f:id:naichilab:20161123001538p:plain

ヘッダーらへんの2つがアドフリくん。 2つ出てるのはカスタムサイズのやつを試してるから。

真っ白なのはなんでやろ?まぁ待ってみるか。

【unity】Androidビルドすると Trying to add file "Temp/StagingArea/〜" ってエラー

タイトルの通り

Trying to add file "Temp/StagingArea/Data/316f956b856b45c448987b5018ec3ef4.assets.resS" which does not exist on disk.
UnityEditor.HostView:OnGUI()

たくさんエラーはいてビルドできない。

f:id:naichilab:20161122225155p:plain

環境

  • Mac OS X El Capitan 10.11.6
  • Unity 5.5.0b4

見つけた

Unity Issue Tracker - [Android] After building the project, errors about missing temp files appear in console

Unity 5.5.0b11で直ったとな・・・

マジかアップデートしなあかんのか・・・

【Mac】Slack.appのフォントが細くなって読みづらい時の直し方

Mac Slack

f:id:naichilab:20161029003340p:plain

MacのSlackアプリを使ってるんだけど数日前からいきなりフォントが変わった。

見た目はこんな感じ。

f:id:naichilab:20161029003241p:plain

なんか細い。

めっちゃ読みづらい。

ブラウザ版はこんな感じ

f:id:naichilab:20161029003723p:plain

そう、数日前までアプリもこんな感じだったのだけど。

環境

  • Mac OS X El Capitan 10.11.6
  • Slack Version 2.0.3
  • Google Chrome 54.0.2840.71

ぐぐった

ぐぐるとそれっぽい記事が出てくる。

qiita.com

ブラウザのフォント設定?

そんなの触ってないけど変わったのかね。

対応

Chromeのフォント設定をいじってみる。

現状

f:id:naichilab:20161029004056p:plain

変更後

f:id:naichilab:20161029004407p:plain

Serif フォントを ヒラギノ角ゴ ProN に変更してみた。

結果

f:id:naichilab:20161029004458p:plain

お、よくなった。

なんで変わってたんだろ。。。

おまけ

Slackアプリを再起動したら更新きてた。

f:id:naichilab:20161029004647p:plain

いれとこ。

【Unity5.5】新しいスプラッシュスクリーンの初期状態メモ

Unity5.5βで新しく追加されたスプラッシュスクリーン。

いろいろ触ってたらスマホで全く表示されなくなり、 もとどおりにしようとしても真っ暗な画面しかでなくなった。

クリーンなプロジェクトと見比べながら戻したのでメモ。

たぶんスマホで表示されないのは関係ない気がするなぁ。

環境

  • Unity 5.5.0b4
  • Mac OS X El Capitan 10.11.6

おかしくなった状態

Player Settings -> Splash Image

f:id:naichilab:20161018000118p:plain

Previewする分には動いてるんだけどね・・・

f:id:naichilab:20161018000531g:plain

スマホだと全く表示されない。

デフォルトの状態

Player Settings -> Splash Image

f:id:naichilab:20161017235755p:plain

Preview するとこんな感じ

f:id:naichilab:20161018001002g:plain

戻す

まとめてリセット機能みたいなのは無さそうなので デフォルトのスクショを見ながらぽちぽちと直した。