SlideShare a Scribd company logo
1 of 81
Download to read offline
広告ネイティブプラグインの
辛かった話しよっか
2015/12/05(土)(【年末だよ】Unity(お・と・な(のLT大会(2015【ポロりしてもいいのよ】
@RyotaMurohoshi
みなさん!
カン!or!コップをお持ち下さい
乾杯!
さて、本日写真撮影ですが
どんどんしちゃってください
どんどんつぶやいてください
みなさんゲーム開発は好きですか?
作ったゲームを
遊んでもらうのは好きですか?
嫌いな奴はこの場にいないよね
だけどゲーム開発で飯を食べるのならば、
お金も稼がなくてはいけないですよね
食うためにやっぱり必要なのは
課金
or
広告
そのために必要になのが、
ネイティブプラグイン!
課金用の各プラットフォームのプラグインとか
広告各社が提供するモバイル広告ネイティブプラグインとか
ここで突然ですが
Unityモバイル広告ネイティブプラグイン
辛いことあるある!
誇張なし、全部俺がリアルに経験した辛い事!
ドキュメント
めっちゃ少ない
iOS・Androidプログラマ向けで、
全然優しくないドキュメント
座標系とか、前提知識とか。もうちょっと優しくても
ドキュメントに記載されている
ファイルが無いorファイル名が違う
あきらかに足りないビルド手順
確実に足りないビルドオプション
乙女系のエッチィ奴で、
iOS審査リジェクト!
そもそもunitypackageが開けない!
広告の実装、
『何でこれできないの』って感じの
非エンジニアからの視線
気持ちはわかるけど、これSDKのバグなんだよ!これ!
そしてそして
_人人人人人人_
> 突然の死 <
 ̄Y^Y^Y^Y^Y^Y^ ̄
サンプル単独では動くけど、
本番だけエラーになる
Android広告ネイティブプラグイン
二つ合わせるとエラーが起こる
Android広告ネイティブプラグイン
相性が悪い・混ぜるな危険
Android広告ネイティブプラグイン
お金を稼ぐために大事な大事な
広告ネイティブプラグインですが
辛いことも多い、とても多いorz
だいぶ前置きが長くなりましたが
この世には単独では正しく動作するのに、
他のネイティブプラグインと混ぜると
エラーが起こるようになるやつがあります!
私が体験したそんなプラグインの
エラーの理由
それに関連するお願いをさせていただきます
なぜこんなことになるのか?
複数のAndroidネイティブプラグインが存在する場合、
Ac#vity中のレイアウトXMLのID等が
広告のjar生成時とUnityでのビルド時でずれるため
よくあるダメな
ネイティブプラグインの例
ダメな例だからね
真似しないでね!
それぞれをUnityプロジェクトの適切な場所に追加
• AndroidManifest(適切に編集したもの)
• 画像を表示するAc1vity(Java)をビルドしたjar
• レイアウトxmlと画像ファイル
Ac#vityはAndroidの画面を司るやつ
で、これをビルドしてapkを作りましょう
apk:Androidのビルド成果物
Unityはapkをつくるため
一度Androidプロジェクトを生成します
ここでつくるRクラスがポイント!
↑yourgame.packagename.Rクラス
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
このレイアウトのIDが,
2個以上ネイティブプラグイン
にあるとずれることがある!!!
ではネイティブプラグインを2個にしよう
PluginXに加えて、
PluginYを追加した!
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
はい、ここポイント!
レイアウトファイルに割り振られた0x7f030001みたいなID、
プラグインが2個になったら
Unityが割り振ったIDとjarの中のIDの値がずれる!
で、ネイティブプラグインのjarを
ビルドする時何がおこるか・何をしているか
広告会社さんがやっていることですね
ダメなネイティブプラグインの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); // ここがやばい!!!
/*中略*/
}
}
これをコンパイルしたのがやばい!
R.layout.ac*vity_plugin_y、
ビルドすると整数値がjarに埋め込まれる
PluginYビルド時は、0x7f030000(16進整数リテラル)
public'sta+c'final'intな値は、classに直接埋め込まれる
あれ?
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
ac#vity_plugin_yというレイアウトXMLのIDが
jarを作った時は0x7f030000、Unityで使うときは0x7f030001
複数ネイティブプラグインがあると
こんな感じでIDがずれる!
ていうか単独の時もけっこう綱渡り!
何が悪いか?
jarの中に、リソースを示す
xxx.yyy.R
をベタ書きすること!
単独では動いても
ネイティブプラグインが複数あると
死ぬことがある!
広告会社の作った
ネイティブプラグイン100%悪い!!!
自己中なプラグイン!
「俺が動けばいいっしょ!」なプラグイン
もっと詳しい解説は
今度ブログで書きます!
お願いが二つあります!
 ひとつめのお願い
みなさんがAndroidネイティブプラグインを作るとき
絶対にJavaのコードにR.layoutとかを直書きしないで下さい!
 これを使わずにいい感じにする方法あります!
 ふたつめのお願い
今回の内容をまとめた記事を月曜日に公開します
シェアしてくれませんか?
こういうネイティブプラグインを作っている人に届くように
これからネイティブプラグインを作る人に届くように
みなさんゲーム開発は好きですか?
1分1秒でも多く、
ゲームをおもしろくしたいですよね?
なるべくなら広告の実装などに
手間取りたくないですよね?
ゲームを面白くするのと広告の不具合対処
徹夜するならどっちでしたいですか?
ゲームを楽しくするために
頑張りたい!時間をかけたい!
忘れもしない今年のGW
ずっと広告SDKと戦っていました
つらかった
だいぶ時間を持っていかれてしまいました
リリース前の大事な時期に、あれがなかったら
何か違ったんじゃないかなってネガティブになることもあります
駆逐したい!!!
こんな不具合に俺たちの
時間がうばれれるのはおかしい!
だいぶ遅くなってしまったけど
よかったらシェアしてください!
aar使おうぜ!!!
広告ネイティブプラグインの
辛かった話しよっか
@RyotaMurohoshi
追記!:!記事公開しました!
h"p://qiita.com/RyotaMurohoshi/items/3b95daeb8eaa6b487a20

More Related Content

More from Ryota Murohoshi

UnityでC#6.0が使える未来がそろそろ来そう!
UnityでC#6.0が使える未来がそろそろ来そう!UnityでC#6.0が使える未来がそろそろ来そう!
UnityでC#6.0が使える未来がそろそろ来そう!Ryota Murohoshi
 
【Unity】気づいたら加わっていたあいつ【もくもく】
【Unity】気づいたら加わっていたあいつ【もくもく】【Unity】気づいたら加わっていたあいつ【もくもく】
【Unity】気づいたら加わっていたあいつ【もくもく】Ryota Murohoshi
 
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】Ryota Murohoshi
 
Javaのバージョニング問題の話しよっか
Javaのバージョニング問題の話しよっかJavaのバージョニング問題の話しよっか
Javaのバージョニング問題の話しよっかRyota Murohoshi
 
LINQ、Select連弾ってやります?
LINQ、Select連弾ってやります?LINQ、Select連弾ってやります?
LINQ、Select連弾ってやります?Ryota Murohoshi
 
C#のList_TがIListを実装している件
C#のList_TがIListを実装している件C#のList_TがIListを実装している件
C#のList_TがIListを実装している件Ryota Murohoshi
 
どうしてこのコードエラーになるんですか?
どうしてこのコードエラーになるんですか?どうしてこのコードエラーになるんですか?
どうしてこのコードエラーになるんですか?Ryota Murohoshi
 
UnityでC#を勉強しはじめた私の主張
UnityでC#を勉強しはじめた私の主張UnityでC#を勉強しはじめた私の主張
UnityでC#を勉強しはじめた私の主張Ryota Murohoshi
 
普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlinRyota Murohoshi
 
UnityでのLINQ活用例
UnityでのLINQ活用例UnityでのLINQ活用例
UnityでのLINQ活用例Ryota Murohoshi
 
「LINQ」っていう名前だけでも 覚えて帰ってください!
「LINQ」っていう名前だけでも 覚えて帰ってください!「LINQ」っていう名前だけでも 覚えて帰ってください!
「LINQ」っていう名前だけでも 覚えて帰ってください!Ryota Murohoshi
 
JXUGのLTだけれどもUnity+iOS+LINQの話をしようと思う!
JXUGのLTだけれどもUnity+iOS+LINQの話をしようと思う!JXUGのLTだけれどもUnity+iOS+LINQの話をしようと思う!
JXUGのLTだけれどもUnity+iOS+LINQの話をしようと思う!Ryota Murohoshi
 
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料などRxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料などRyota Murohoshi
 
共変戻り値型って知ってますか?
共変戻り値型って知ってますか?共変戻り値型って知ってますか?
共変戻り値型って知ってますか?Ryota Murohoshi
 
明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?)SAM変換と拡張関数
明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?)SAM変換と拡張関数明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?)SAM変換と拡張関数
明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?)SAM変換と拡張関数Ryota Murohoshi
 

More from Ryota Murohoshi (18)

UnityでC#6.0が使える未来がそろそろ来そう!
UnityでC#6.0が使える未来がそろそろ来そう!UnityでC#6.0が使える未来がそろそろ来そう!
UnityでC#6.0が使える未来がそろそろ来そう!
 
【Unity】気づいたら加わっていたあいつ【もくもく】
【Unity】気づいたら加わっていたあいつ【もくもく】【Unity】気づいたら加わっていたあいつ【もくもく】
【Unity】気づいたら加わっていたあいつ【もくもく】
 
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
【ハピバ】未来に備えたKotlin、大好きだぜ!【Kotlin 1.0】
 
「var禁止」禁止
「var禁止」禁止「var禁止」禁止
「var禁止」禁止
 
Javaのバージョニング問題の話しよっか
Javaのバージョニング問題の話しよっかJavaのバージョニング問題の話しよっか
Javaのバージョニング問題の話しよっか
 
LINQ、Select連弾ってやります?
LINQ、Select連弾ってやります?LINQ、Select連弾ってやります?
LINQ、Select連弾ってやります?
 
C#のList_TがIListを実装している件
C#のList_TがIListを実装している件C#のList_TがIListを実装している件
C#のList_TがIListを実装している件
 
どうしてこのコードエラーになるんですか?
どうしてこのコードエラーになるんですか?どうしてこのコードエラーになるんですか?
どうしてこのコードエラーになるんですか?
 
UnityでC#を勉強しはじめた私の主張
UnityでC#を勉強しはじめた私の主張UnityでC#を勉強しはじめた私の主張
UnityでC#を勉強しはじめた私の主張
 
普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin
 
T4使ってみた
T4使ってみたT4使ってみた
T4使ってみた
 
UnityでのLINQ活用例
UnityでのLINQ活用例UnityでのLINQ活用例
UnityでのLINQ活用例
 
私とUnityとLINQと
私とUnityとLINQと私とUnityとLINQと
私とUnityとLINQと
 
「LINQ」っていう名前だけでも 覚えて帰ってください!
「LINQ」っていう名前だけでも 覚えて帰ってください!「LINQ」っていう名前だけでも 覚えて帰ってください!
「LINQ」っていう名前だけでも 覚えて帰ってください!
 
JXUGのLTだけれどもUnity+iOS+LINQの話をしようと思う!
JXUGのLTだけれどもUnity+iOS+LINQの話をしようと思う!JXUGのLTだけれどもUnity+iOS+LINQの話をしようと思う!
JXUGのLTだけれどもUnity+iOS+LINQの話をしようと思う!
 
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料などRxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
RxJava初心者の私が良いと思ったやり方、素敵だと思った資料など
 
共変戻り値型って知ってますか?
共変戻り値型って知ってますか?共変戻り値型って知ってますか?
共変戻り値型って知ってますか?
 
明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?)SAM変換と拡張関数
明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?)SAM変換と拡張関数明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?)SAM変換と拡張関数
明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?)SAM変換と拡張関数
 

Recently uploaded

新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。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 Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 

Recently uploaded (9)

新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/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 Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-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.pptxIoT 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] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 

広告ネイティブプラグインの辛かった話しよっか