[delphi-users:4912] 起動時にTBannerAdが例外を送出

67 views
Skip to first unread message

keiworks

unread,
May 23, 2018, 8:30:04 PM5/23/18
to delphi...@freeml.com
いつもお世話になっております。
suzuki.keiwoksです。
万策尽きてしまったのでご相談させてください。


TBannerAdを使用してAndroid上でAdMob広告表示しようとしているのですが
デバッグ実行時に必ず以下の例外が発生してしまいます。

----------------------------------------
プロジェクト Project1.apkは例外クラス Segmentation fault (11)を送出しました。
----------------------------------------


ソースは最後に全文を記載しますがFormCreateでUnitIDをセットして、
FormShowでLoadしているだけのシンプルなものです。

それぞれの行にブレークポイントを置いて実行していますが正常に通過しており
例外表示ウィンドウ上の「ブレーク」ボタンをクリックして表示されるのはソースではなく
CPUウィンドウになっており、私の知識ではどこで例外が発生しているのか分からない状態です。


なお、例外表示ウィンドウの「継続」ボタンをクリックすると広告が正常に表示されます。
また、TBannerAdをFormから削除した場合は例外が発生しないため
TBannerAdの影響ということは間違いないと考えています。


この例外を解決する方法をご存知の方がいらっしゃいましたらご教示いただけないでしょうか。
よろしくお願いいたします。



環境は以下になります。
----------------------------------------
Delphi 10.2 バージョン 25.0.29899.2631

以下のAndroid Push Notification パッチ適用済
https://cc.embarcadero.com/item/30831

プロジェクトマネージャ→Android→ライブラリを右クリック→
システムファイルをデフォルトに戻す(V)も実行済
----------------------------------------


ソースは以下になります。
----------------------------------------
unit Unit1;

interface

uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
FMX.Controls.Presentation, FMX.StdCtrls, FMX.Advertising;

type
TForm1 = class(TForm)
BannerAd1: TBannerAd;
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ private 宣言 }
public
{ public 宣言 }
end;

var
Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.FormCreate(Sender: TObject);
begin
BannerAd1.AdUnitID := 'ca-app-pub-3940256099942544/6300978111';
end;

procedure TForm1.FormShow(Sender: TObject);
begin
BannerAd1.LoadAd;
end;

end.
----------------------------------------


Android Device Monitor上のログから関連部分を抜粋
----------------------------------------
05-24 06:27:45.756: I/Ads(5879): Updating ad debug logging enablement.
05-24 06:27:45.810: I/Ads(5879): Starting ad request.
05-24 06:27:45.811: I/Ads(5879): Use AdRequest.Builder.addTestDevice("65819E123B3D987E9A123AEA3C3D469E") to get test ads on this device.
05-24 06:27:45.832: I/Ads(5879): Please set theme of AdActivity to @android:style/Theme.Translucent to enable transparent background interstitial ad.


上記まで表示された後、例外で停止される。
例外ウィンドウの継続ボタンをクリックすると以下が表示される。(広告は正常に表示され、その後の広告更新も正常に動作)


05-24 06:27:45.925: W/Ads(5879): Invoke Firebase method getInstance error.
05-24 06:27:45.925: W/Ads(5879): The Google Mobile Ads SDK will not integrate with Firebase. Admob/Firebase integration requires the latest Firebase SDK jar, but Firebase SDK is either missing or out of date
05-24 06:27:46.153: W/Ads(5879): Update ad debug logging enablement as false
05-24 06:27:48.888: W/Ads(2313): App does not have the required permissions to get location
05-24 06:27:49.643: W/Ads(5879): Not enough space to show ad. Needs 360x50 dp, but only has 0x0 dp.
05-24 06:27:49.685: W/Ads(5879): Not enough space to show ad. Needs 360x50 dp, but only has 0x0 dp.
05-24 06:27:49.851: W/Ads(5879): Not enough space to show ad. Needs 360x50 dp, but only has 0x0 dp.
05-24 06:27:49.917: W/Ads(5879): Not enough space to show ad. Needs 360x50 dp, but only has 0x0 dp.
05-24 06:27:49.939: I/Ads(5879): Scheduling ad refresh 70000 milliseconds from now.
05-24 06:27:49.981: I/Ads(5879): Ad finished loading.
----------------------------------------




MLホームページ: https://www.freeml.com/delphi-users

----------------------------------------------------------------------
freemlを運営するGMOメディア株式会社では、
2019年新卒採用の募集をしております。
【募集職種】エンジニア職/Webデザイナー職
説明会も開催中!下記よりアクセスしてください。
https://www.gmo.media/recruit/?utm_medium=freeml&utm_source=freeml
------------------------------------------------------[freeml byGMO]--

あなたの街のチラシがいつでも無料で見放題!
チラシをクリックしてチラシが拡大されたらポイントゲット♪
まずはかんたん登録♪ -ポイントタウン-
https://www.pointtown.com/ptu/rd.cgi?cid=8912
----------------------------------------------------------------------

hosokawa

unread,
May 23, 2018, 9:08:54 PM5/23/18
to delphi...@freeml.com
suzuki.keiwoks さん、こんにちは。
細川です。

こんな風にしてみてください。

procedure TForm2.FormShow(Sender: TObject);
begin
TThread.ForceQueue(
TThread.Current,
procedure
begin
BannerAd1.LoadAd;
end
);
end;

これで動作します(が、ダイアログでエラー内容が表示されるので、そのエラーを回避
してください(Delphi Professional 10.2 Tokyo Release 3 で確認))。
Regards,
HOSOKAWA Jun
Application Division 3 Manager
embarcadero MVP for Delphi

[S/G] SERIALGAMES Inc.
TEL: 03-5812-4368
FAX: 03-5812-0970

---------------------------------------------------------------
このメールには、本来の宛先の方のみに限定された機密情報が含まれて
いる場合がございます。お心あたりのない場合は、送信者にご連絡のうえ、
このメールを削除してくださいますようお願い申し上げます。
PLEASE READ:This e-mail is confidential and intended for
the named recipient only. If you are not an intended recipient,
please notify the sender and delete this e-mail.
---------------------------------------------------------------


MLホームページ: https://www.freeml.com/delphi-users

----------------------------------------------------------------------
無料ゲームから本格的に楽しめるゲームまで、
インストール不要でスグに遊べます♪
今すぐ遊ぶ ⇒
http://user.gesoten.com/cid/m/378?z=0&g=0

keiworks

unread,
May 24, 2018, 9:55:32 AM5/24/18
to delphi...@freeml.com
細川さん、ご返信ありがとうございます!
suzuki.keiwoksです。


> こんな風にしてみてください。
>
> procedure TForm2.FormShow(Sender: TObject);
> begin
> TThread.ForceQueue(
> TThread.Current,
> procedure
> begin
> BannerAd1.LoadAd;
> end
> );
> end;

早速、アドバイス頂いた通りに書き換えてみましたが
症状は改善されずSegmentation fault (11)の例外ダイアログが表示されます。


> これで動作します(が、ダイアログでエラー内容が表示されるので、そのエラーを回避
> してください(Delphi Professional 10.2 Tokyo Release 3 で確認))。

表示されるエラー内容は、Segmentation fault (11)の例外ダイアログになりますでしょうか。
差し支えなければ、回避方法をご教示いただけますと助かります。


お手数をおかけいたしますが何卒よろしくお願いいたします。

keiworks

unread,
May 25, 2018, 10:22:14 PM5/25/18
to delphi...@freeml.com
suzuki.keiwoksです。

その後、試行錯誤したところ例外発生箇所が分かりました。

Androidapi.JNI.AdMob.pas内の
JAdViewに定義されている以下のメソッドで発生しておりました。

procedure loadAd(adRequest: JAdRequest); cdecl;


現在の私のレベルでは、手の出しようがなさそうなので
発生した例外を無視する方向ですすめようと思います。

広告表示も問題なく、今のところは正常に動いてるように見えます。

何か進展がありましたら、ご報告させていただきます。
ありがとうございました。



MLホームページ: https://www.freeml.com/delphi-users

----------------------------------------------------------------------
無料ゲームから本格的に楽しめるゲームまで、
インストール不要でスグに遊べます♪
今すぐ遊ぶ ⇒
http://user.gesoten.com/cid/m/378?z=0&g=0

hosokawa

unread,
May 30, 2018, 2:25:16 AM5/30/18
to delphi...@freeml.com
suzuki.keiworks さん

こんにちは。
細川です。

レスがすっかり遅くなってしまいました。

表示されるエラーは添付のようなエラーでこれは恐らく下記の DocWiki にあるように
PlayServices を更新しないと行けないのでは無いでしょうか。


■Android アプリケーションのマニフェストの更新の回避策
http://docwiki.embarcadero.com/RADStudio/Tokyo/ja/10.2_Tokyo_-_Release_3#Android_.E3.82.A2.E3.83.97.E3.83.AA.E3.82.B1.E3.83.BC.E3.82.B7.E3.83.A7.E3.83.B3.E3.81.AE.E3.83.9E.E3.83.8B.E3.83.95.E3.82.A7.E3.82.B9.E3.83.88.E3.81.AE.E6.9B.B4.E6.96.B0.E3.81.AE.E5.9B.9E.E9.81.BF.E7.AD.96
Regards,
HOSOKAWA Jun
Application Division 3 Manager
embarcadero MVP for Delphi

[S/G] SERIALGAMES Inc.
TEL: 03-5812-4368
FAX: 03-5812-0970

---------------------------------------------------------------
このメールには、本来の宛先の方のみに限定された機密情報が含まれて
いる場合がございます。お心あたりのない場合は、送信者にご連絡のうえ、
このメールを削除してくださいますようお願い申し上げます。
PLEASE READ:This e-mail is confidential and intended for
the named recipient only. If you are not an intended recipient,
please notify the sender and delete this e-mail.
---------------------------------------------------------------



MLホームページ: https://www.freeml.com/delphi-users

----------------------------------------------------------------------
無料ゲームから本格的に楽しめるゲームまで、
インストール不要でスグに遊べます♪
今すぐ遊ぶ ⇒
http://user.gesoten.com/cid/m/378?z=0&g=0
ss.png

hosokawa

unread,
May 30, 2018, 2:28:07 AM5/30/18
to delphi...@freeml.com
suzuki.keiworks さん

こんにちは。
細川です。

と、思いましたがエラーダイアログにあるように AndroidManifest の Application タ
グに MetaData を定義するだけでも行けるかも知れないですね。

keiworks

unread,
May 30, 2018, 3:57:14 AM5/30/18
to delphi...@freeml.com
細川さん、ご返信ありがとうございます!
suzuki.keiwoksです。

> 表示されるエラーは添付のようなエラーでこれは恐らく下記の DocWiki にあるように
> PlayServices を更新しないと行けないのでは無いでしょうか。

> ■Android アプリケーションのマニフェストの更新の回避策
> http://docwiki.embarcadero.com/RADStudio/Tokyo/ja/10.2_Tokyo_-_Release_3#Android_.E3.82.A2.E3.83.97.E3.83.AA.E3.82.B1.E3.83.BC.E3.82.B7.E3.83.A7.E3.83.B3.E3.81.AE.E3.83.9E.E3.83.8B.E3.83.95.E3.82.A7.E3.82.B9.E3.83.88.E3.81.AE.E6.9B.B4.E6.96.B0.E3.81.AE.E5.9B.9E.E9.81.BF.E7.AD.96

エラーダイアログまで作成していただきありがとうございます。

PlayServicesの更新につきましては実施済みのため
添付ファイルのようなダイアログは表示されませんでした。

もしかしたら私の環境だけで発生しているのかもしれません(^^;
時間がある時にDelphiをクリーンインストールして検証してみようと思います。

ありがとうございました!

hosokawa

unread,
Jun 3, 2018, 10:27:13 PM6/3/18
to delphi...@freeml.com
suzuki.keiworks さん

細川です。

エラー文言は

java.lang.IllegalStateExection:
A required meta-data tag in your app's AndroidManifest.xml does not exist.
You must have the following declaration within the <application> element:
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />

とあるので、その後のメールに書いたように AndroidManifest ファイルに MetaData
が設定されていないだけかも知れません。

お手すきの時にでもお試し下さい。
Regards,
HOSOKAWA Jun
Application Division 3 Manager
embarcadero MVP for Delphi

[S/G] SERIALGAMES Inc.
TEL: 03-5812-4368
FAX: 03-5812-0970

---------------------------------------------------------------
このメールには、本来の宛先の方のみに限定された機密情報が含まれて
いる場合がございます。お心あたりのない場合は、送信者にご連絡のうえ、
このメールを削除してくださいますようお願い申し上げます。
PLEASE READ:This e-mail is confidential and intended for
the named recipient only. If you are not an intended recipient,
please notify the sender and delete this e-mail.
---------------------------------------------------------------


keiworks

unread,
Jun 4, 2018, 9:48:25 AM6/4/18
to delphi...@freeml.com
細川さん、ご返信ありがとうございます。
suzuki.keiwoksです。

アドバイスありがとうございます!
早速、AndroidManifest.xmlを確認したところ
以下の記述がありますが問題ないでしょうか。

<meta-data android:name="com.google.android.gms.version" android:value="7095000" />

上記は私が追記したものではなく最初から記述されておりました。


また、提示いただいた「java.lang.IllegalStateExection」のダイアログは
こちらでは表示されず、以下のデバッガ例外通知のダイアログが表示されます。

----------------------------------------
プロジェクト Project1.apkは例外クラス Segmentation fault (11)を送出しました。
----------------------------------------

なお、例外ダイアログの「継続(C)」ボタンを押下するとAndroid実機(Xperia Z3)上で
正常に広告が表示されています。


Web上を検索しても私と同じ状況の方を見つけることが出来なかったので
やはり私の環境がどこかおかしいのかなと考えております(^^;



> suzuki.keiworks さん
>
> 細川です。
>
> エラー文言は
>
> java.lang.IllegalStateExection:
> A required meta-data tag in your apps AndroidManifest.xml does not exist.
> You must have the following declaration within the <application> element:
> <meta-data android:name="com.google.android.gms.version"
> android:value="@integer/google_play_services_version" />
>
> とあるので、その後のメールに書いたように AndroidManifest ファイルに MetaData
> が設定されていないだけかも知れません。
>
> お手すきの時にでもお試し下さい。
>
> Regards,
> HOSOKAWA Jun
> Application Division 3 Manager
> embarcadero MVP for Delphi
>
> [S/G] SERIALGAMES Inc.
> TEL: 03-5812-4368
> FAX: 03-5812-0970
>
> ---------------------------------------------------------------
> このメールには、本来の宛先の方のみに限定された機密情報が含まれて
> いる場合がございます。お心あたりのない場合は、送信者にご連絡のうえ、
> このメールを削除してくださいますようお願い申し上げます。
> PLEASE READ:This e-mail is confidential and intended for
> the named recipient only. If you are not an intended recipient,
> please notify the sender and delete this e-mail.
> ---------------------------------------------------------------



Reply all
Reply to author
Forward
0 new messages