Submit Search
Upload
広告ネイティブプラグインの辛かった話しよっか
•
3 likes
•
1,079 views
Ryota Murohoshi
Follow
2015/12/05(土)【年末だよ】 Unity お・と・なのLT大会【ポロリしてもいいのよ】 の発表資料です。 ほぼ、そのままですが、関連資料のリンクを追加しました。
Read less
Read more
Technology
Report
Share
Report
Share
1 of 81
Download now
Download to read offline
Recommended
Unity講座資料 共通
Unity講座資料 共通
Mattun
Game x agile
Game x agile
Jun Shimura
ARLT_10_Unityと昔のAR会
ARLT_10_Unityと昔のAR会
arcircle tmu
計算数学
計算数学
blackenedgold
ユニティチャンホイホイが生まれてしまった理由
ユニティチャンホイホイが生まれてしまった理由
kazuya noshiro
いまさら聞けないUnity小技
いまさら聞けないUnity小技
Yuichi Ishii
Zannen.me(残念.me)
Zannen.me(残念.me)
宏之 藤原
意外と苦労する、一部の画面のみ ランドスケープ表示を許容する方法 (potatotips 第17回)
意外と苦労する、一部の画面のみ ランドスケープ表示を許容する方法 (potatotips 第17回)
将之 小野
Recommended
Unity講座資料 共通
Unity講座資料 共通
Mattun
Game x agile
Game x agile
Jun Shimura
ARLT_10_Unityと昔のAR会
ARLT_10_Unityと昔のAR会
arcircle tmu
計算数学
計算数学
blackenedgold
ユニティチャンホイホイが生まれてしまった理由
ユニティチャンホイホイが生まれてしまった理由
kazuya noshiro
いまさら聞けないUnity小技
いまさら聞けないUnity小技
Yuichi Ishii
Zannen.me(残念.me)
Zannen.me(残念.me)
宏之 藤原
意外と苦労する、一部の画面のみ ランドスケープ表示を許容する方法 (potatotips 第17回)
意外と苦労する、一部の画面のみ ランドスケープ表示を許容する方法 (potatotips 第17回)
将之 小野
UnityでC#6.0が使える未来がそろそろ来そう!
UnityでC#6.0が使える未来がそろそろ来そう!
Ryota Murohoshi
【Unity】気づいたら加わっていたあいつ【もくもく】
【Unity】気づいたら加わっていたあいつ【もくもく】
Ryota Murohoshi
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
Ryota Murohoshi
「var禁止」禁止
「var禁止」禁止
Ryota Murohoshi
Javaのバージョニング問題の話しよっか
Javaのバージョニング問題の話しよっか
Ryota Murohoshi
LINQ、Select連弾ってやります?
LINQ、Select連弾ってやります?
Ryota Murohoshi
C#のList_TがIListを実装している件
C#のList_TがIListを実装している件
Ryota Murohoshi
どうしてこのコードエラーになるんですか?
どうしてこのコードエラーになるんですか?
Ryota Murohoshi
UnityでC#を勉強しはじめた私の主張
UnityでC#を勉強しはじめた私の主張
Ryota Murohoshi
普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin
Ryota Murohoshi
T4使ってみた
T4使ってみた
Ryota Murohoshi
UnityでのLINQ活用例
UnityでのLINQ活用例
Ryota Murohoshi
私とUnityとLINQと
私とUnityとLINQと
Ryota Murohoshi
「LINQ」っていう名前だけでも 覚えて帰ってください!
「LINQ」っていう名前だけでも 覚えて帰ってください!
Ryota Murohoshi
JXUGのLTだけれどもUnity+iOS+LINQの話をしようと思う!
JXUGのLTだけれどもUnity+iOS+LINQの話をしようと思う!
Ryota Murohoshi
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
Ryota Murohoshi
共変戻り値型って知ってますか?
共変戻り値型って知ってますか?
Ryota Murohoshi
明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?)SAM変換と拡張関数
明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?)SAM変換と拡張関数
Ryota Murohoshi
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
iPride Co., Ltd.
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
iPride Co., Ltd.
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
osamut
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
furutsuka
More Related Content
More from Ryota Murohoshi
UnityでC#6.0が使える未来がそろそろ来そう!
UnityでC#6.0が使える未来がそろそろ来そう!
Ryota Murohoshi
【Unity】気づいたら加わっていたあいつ【もくもく】
【Unity】気づいたら加わっていたあいつ【もくもく】
Ryota Murohoshi
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
Ryota Murohoshi
「var禁止」禁止
「var禁止」禁止
Ryota Murohoshi
Javaのバージョニング問題の話しよっか
Javaのバージョニング問題の話しよっか
Ryota Murohoshi
LINQ、Select連弾ってやります?
LINQ、Select連弾ってやります?
Ryota Murohoshi
C#のList_TがIListを実装している件
C#のList_TがIListを実装している件
Ryota Murohoshi
どうしてこのコードエラーになるんですか?
どうしてこのコードエラーになるんですか?
Ryota Murohoshi
UnityでC#を勉強しはじめた私の主張
UnityでC#を勉強しはじめた私の主張
Ryota Murohoshi
普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin
Ryota Murohoshi
T4使ってみた
T4使ってみた
Ryota Murohoshi
UnityでのLINQ活用例
UnityでのLINQ活用例
Ryota Murohoshi
私とUnityとLINQと
私とUnityとLINQと
Ryota Murohoshi
「LINQ」っていう名前だけでも 覚えて帰ってください!
「LINQ」っていう名前だけでも 覚えて帰ってください!
Ryota Murohoshi
JXUGのLTだけれどもUnity+iOS+LINQの話をしようと思う!
JXUGのLTだけれどもUnity+iOS+LINQの話をしようと思う!
Ryota Murohoshi
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
Ryota Murohoshi
共変戻り値型って知ってますか?
共変戻り値型って知ってますか?
Ryota Murohoshi
明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?)SAM変換と拡張関数
明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?)SAM変換と拡張関数
Ryota Murohoshi
More from Ryota Murohoshi
(18)
UnityでC#6.0が使える未来がそろそろ来そう!
UnityでC#6.0が使える未来がそろそろ来そう!
【Unity】気づいたら加わっていたあいつ【もくもく】
【Unity】気づいたら加わっていたあいつ【もくもく】
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
「var禁止」禁止
「var禁止」禁止
Javaのバージョニング問題の話しよっか
Javaのバージョニング問題の話しよっか
LINQ、Select連弾ってやります?
LINQ、Select連弾ってやります?
C#のList_TがIListを実装している件
C#のList_TがIListを実装している件
どうしてこのコードエラーになるんですか?
どうしてこのコードエラーになるんですか?
UnityでC#を勉強しはじめた私の主張
UnityでC#を勉強しはじめた私の主張
普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin
T4使ってみた
T4使ってみた
UnityでのLINQ活用例
UnityでのLINQ活用例
私とUnityとLINQと
私とUnityとLINQと
「LINQ」っていう名前だけでも 覚えて帰ってください!
「LINQ」っていう名前だけでも 覚えて帰ってください!
JXUGのLTだけれどもUnity+iOS+LINQの話をしようと思う!
JXUGのLTだけれどもUnity+iOS+LINQの話をしようと思う!
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
共変戻り値型って知ってますか?
共変戻り値型って知ってますか?
明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?)SAM変換と拡張関数
明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?)SAM変換と拡張関数
Recently uploaded
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
iPride Co., Ltd.
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
iPride Co., Ltd.
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
osamut
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
furutsuka
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
danielhu54
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
Shota Ito
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
Atomu Hidaka
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
Recently uploaded
(9)
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
広告ネイティブプラグインの辛かった話しよっか
1.
広告ネイティブプラグインの 辛かった話しよっか 2015/12/05(土)(【年末だよ】Unity(お・と・な(のLT大会(2015【ポロりしてもいいのよ】 @RyotaMurohoshi
2.
みなさん! カン!or!コップをお持ち下さい
3.
乾杯!
4.
さて、本日写真撮影ですが
5.
どんどんしちゃってください どんどんつぶやいてください
6.
みなさんゲーム開発は好きですか?
7.
作ったゲームを 遊んでもらうのは好きですか?
8.
嫌いな奴はこの場にいないよね
9.
だけどゲーム開発で飯を食べるのならば、 お金も稼がなくてはいけないですよね
10.
食うためにやっぱり必要なのは
11.
課金 or 広告
12.
そのために必要になのが、
13.
ネイティブプラグイン! 課金用の各プラットフォームのプラグインとか 広告各社が提供するモバイル広告ネイティブプラグインとか
14.
ここで突然ですが
15.
Unityモバイル広告ネイティブプラグイン 辛いことあるある! 誇張なし、全部俺がリアルに経験した辛い事!
16.
ドキュメント めっちゃ少ない
17.
iOS・Androidプログラマ向けで、 全然優しくないドキュメント 座標系とか、前提知識とか。もうちょっと優しくても
18.
ドキュメントに記載されている ファイルが無いorファイル名が違う
19.
あきらかに足りないビルド手順
20.
確実に足りないビルドオプション
21.
乙女系のエッチィ奴で、 iOS審査リジェクト!
22.
そもそもunitypackageが開けない!
23.
広告の実装、 『何でこれできないの』って感じの 非エンジニアからの視線 気持ちはわかるけど、これSDKのバグなんだよ!これ!
24.
そしてそして
25.
_人人人人人人_ > 突然の死 <  ̄Y^Y^Y^Y^Y^Y^ ̄
26.
サンプル単独では動くけど、 本番だけエラーになる Android広告ネイティブプラグイン
27.
二つ合わせるとエラーが起こる Android広告ネイティブプラグイン
28.
相性が悪い・混ぜるな危険 Android広告ネイティブプラグイン
29.
お金を稼ぐために大事な大事な 広告ネイティブプラグインですが 辛いことも多い、とても多いorz
30.
だいぶ前置きが長くなりましたが
31.
この世には単独では正しく動作するのに、 他のネイティブプラグインと混ぜると エラーが起こるようになるやつがあります!
32.
私が体験したそんなプラグインの エラーの理由 それに関連するお願いをさせていただきます
33.
なぜこんなことになるのか?
34.
複数のAndroidネイティブプラグインが存在する場合、 Ac#vity中のレイアウトXMLのID等が 広告のjar生成時とUnityでのビルド時でずれるため
35.
よくあるダメな ネイティブプラグインの例
36.
ダメな例だからね 真似しないでね!
37.
38.
それぞれをUnityプロジェクトの適切な場所に追加 • AndroidManifest(適切に編集したもの) • 画像を表示するAc1vity(Java)をビルドしたjar •
レイアウトxmlと画像ファイル Ac#vityはAndroidの画面を司るやつ
39.
で、これをビルドしてapkを作りましょう apk:Androidのビルド成果物
40.
Unityはapkをつくるため 一度Androidプロジェクトを生成します ここでつくるRクラスがポイント! ↑yourgame.packagename.Rクラス
41.
Unityがつくるyourgame.packagename.Rクラス package your_game.package_name; public final
class R { /*中略*/ public static final class layout { public static final int activity_plugin_x=0x7f030000; } /*中略*/ } ネイティブプラグインのレイアウトXMLファイルのIDが含まれる。値は、0x7f030000
42.
このレイアウトのIDが, 2個以上ネイティブプラグイン にあるとずれることがある!!!
43.
ではネイティブプラグインを2個にしよう
44.
45.
PluginXに加えて、 PluginYを追加した!
46.
Unityがつくるyourgame.packagename.Rクラス package your_game.package_name; public final
class R { /*中略*/ public static final class layout { public static final int activity_plugin_x=0x7f030000; public static final int activity_plugin_y=0x7f030001; } /*中略*/ } ac#vity_plugin_xは0x7f030000、ac#vity_plugin_xは0x7f030001
47.
はい、ここポイント!
48.
レイアウトファイルに割り振られた0x7f030001みたいなID、 プラグインが2個になったら Unityが割り振ったIDとjarの中のIDの値がずれる!
49.
で、ネイティブプラグインのjarを ビルドする時何がおこるか・何をしているか 広告会社さんがやっていることですね
50.
ダメなネイティブプラグインのjarの中のAc&vityの例(Java) package com.mrstar.pluginy; /*中略*/ public class
PluginYActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_plugin_y); // ここがやばい!!! /*中略*/ } }
51.
これをコンパイルしたのがやばい!
52.
R.layout.ac*vity_plugin_y、 ビルドすると整数値がjarに埋め込まれる PluginYビルド時は、0x7f030000(16進整数リテラル) public'sta+c'final'intな値は、classに直接埋め込まれる
53.
あれ?
54.
Unityがつくるyourgame.packagename.Rクラス(再掲) package your_game.package_name; public final
class R { /*中略*/ public static final class layout { public static final int activity_plugin_x=0x7f030000; public static final int activity_plugin_y=0x7f030001; } /*中略*/ } ac#vity_plugin_xは0x7f030000、ac#vity_plugin_xは0x7f030001
55.
ac#vity_plugin_yというレイアウトXMLのIDが jarを作った時は0x7f030000、Unityで使うときは0x7f030001
56.
複数ネイティブプラグインがあると こんな感じでIDがずれる! ていうか単独の時もけっこう綱渡り!
57.
何が悪いか?
58.
jarの中に、リソースを示す xxx.yyy.R をベタ書きすること!
59.
単独では動いても ネイティブプラグインが複数あると 死ぬことがある!
60.
広告会社の作った ネイティブプラグイン100%悪い!!! 自己中なプラグイン! 「俺が動けばいいっしょ!」なプラグイン
61.
もっと詳しい解説は 今度ブログで書きます!
62.
お願いが二つあります!
63.
ひとつめのお願い
64.
みなさんがAndroidネイティブプラグインを作るとき 絶対にJavaのコードにR.layoutとかを直書きしないで下さい! これを使わずにいい感じにする方法あります!
65.
ふたつめのお願い
66.
今回の内容をまとめた記事を月曜日に公開します シェアしてくれませんか?
67.
こういうネイティブプラグインを作っている人に届くように これからネイティブプラグインを作る人に届くように
68.
みなさんゲーム開発は好きですか?
69.
1分1秒でも多く、 ゲームをおもしろくしたいですよね?
70.
なるべくなら広告の実装などに 手間取りたくないですよね?
71.
ゲームを面白くするのと広告の不具合対処 徹夜するならどっちでしたいですか?
72.
ゲームを楽しくするために 頑張りたい!時間をかけたい!
73.
忘れもしない今年のGW ずっと広告SDKと戦っていました
74.
つらかった
75.
だいぶ時間を持っていかれてしまいました リリース前の大事な時期に、あれがなかったら 何か違ったんじゃないかなってネガティブになることもあります
76.
駆逐したい!!!
77.
こんな不具合に俺たちの 時間がうばれれるのはおかしい!
78.
だいぶ遅くなってしまったけど よかったらシェアしてください!
79.
aar使おうぜ!!!
80.
広告ネイティブプラグインの 辛かった話しよっか @RyotaMurohoshi
81.
追記!:!記事公開しました! h"p://qiita.com/RyotaMurohoshi/items/3b95daeb8eaa6b487a20
Download now