質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • Android

    6521questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Studio

    3701questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

  • COCOS2D-X

    188questions

    COCOS2D-Xは、 2Dゲームを手軽に開発できるフレームワークのことです。 iPhone(iOS)向け、Android等に対応しており、 実質ワンソースで開発が可能です。

  • Cocos Creator

    8questions

    Cocos Creatorは、Cocos2d-x向けの統合開発環境。UI・アニメーションの編集、JavaScriptのコーディング、ビルドなどを一括して行うことができるエディタです。

Android上でのAdMob広告表示

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 930

Boemusan

score 36

Cocos2d-xでビルドしたAndroid Studioのプロジェクトで、AdMobを実装したいのですが、上手くいきません。
丸1日以上試行錯誤しているのですが、Android実機が無く、エミュレータで実行しているため、少し変更して試すにも時間が掛かっています。
広告だけの問題だと確認するために、新しく作成したプロジェクト(Hello World)でテストしています。
どうか、ご教示ください。よろしくお願いいたします。

環境

・PC:MacOS(Sierra)
・Cocos Creator v1.2.2 + 付属のCocos2d-xエンジン及びAndroid NDK

・Android Studio v2.2
・エミュレータ:
Name: AVD_for_Galaxy_Nexus_by_Google
CPU/ABI: ARM (armeabi-v7a)
API Level: 22

AndroidManifest.xml

- 省略 -

        <meta-data android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version"/>
        <!-- Tell Cocos2dxActivity the name of our .so -->
        <meta-data android:name="android.app.lib_name"
                   android:value="cocos2djs" />

         - 省略 -

        <activity android:name="com.google.android.gms.ads.AdActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>

 - 省略 -

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
 - 省略 -
</manifest>

build.gradle(プロジェクト)

- 省略 -

    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.0'
        classpath 'com.google.gms:google-services:3.0.0'
    }
}

 - 省略 -

build.gradle(Module:helloWorld)

- 省略 - 

dependencies {
    compile 'com.google.android.gms:play-services-ads:9.6.1'
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(':libcocos2dx')
}

apply plugin: 'com.google.gms.google-services'

AppActivity.java

package org.cocos2dx.javascript;

import org.cocos2dx.lib.Cocos2dxActivity;
import org.cocos2dx.lib.Cocos2dxGLSurfaceView;
import com.google.android.gms.ads.*;
// For JS and JAVA reflection test, you can delete it if it's your own project
import android.app.Activity;
import android.os.Bundle;
import android.app.AlertDialog;
import android.content.DialogInterface;
// -------------------------------------
import org.cocos2dx.javascript.SDKWrapper;

import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;

public class AppActivity extends Cocos2dxActivity {

    private static AppActivity app = null;
    private static Activity activity = null;
    private static AdView adView = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        app = this;
        SDKWrapper.getInstance().init(this);

    }

    @Override
    public Cocos2dxGLSurfaceView onCreateView() {
        Cocos2dxGLSurfaceView glSurfaceView = new Cocos2dxGLSurfaceView(this);
        // TestCpp should create stencil buffer
        glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8);

        SDKWrapper.getInstance().setGLSurfaceView(glSurfaceView);

        return glSurfaceView;
    }

    // For JS and JAVA reflection test, you can delete it if it's your own project
    public static void showAlertDialog(final String title,final String message) {
        // Here be sure to use runOnUiThread
        app.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                    AlertDialog alertDialog = new AlertDialog.Builder(app).create();
                    alertDialog.setTitle(title);
                    alertDialog.setMessage(message);
                alertDialog.show();
            }
        });
    }


    //Cocos Creator(JS)から呼ばれるメソッド
    public static void createAdView()
    {
        activity.runOnUiThread(new Runnable() {
            @Override
            public void run()
            {
                if (adView == null) {
                    adView = new AdView(activity);
                    adView.setAdUnitId("ca-app-pub-3940256099942544/6300978111"); //テスト用広告ID
                    adView.setAdSize(AdSize.BANNER);

                    final RelativeLayout relativeLayout = new RelativeLayout(activity);
                    activity.addContentView(relativeLayout,
                            new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
                    relativeLayout.setVerticalGravity(Gravity.BOTTOM);
                    relativeLayout.addView(adView);

                    final AdRequest adRequest = new AdRequest.Builder().build();
                    // .addTestDevice(AdRequest.DEVICE_ID_EMULATOR).build; // テスト用IDでも必要なのか不明なので今は使っていません
                    adView.loadAd(adRequest);
                }
            }
        });
    }

    //Cocos Creator(JS)から呼ばれるメソッド
    public static void showAdView() {
        if (activity == null) return;

        if (adView == null) {
            createAdView();
            return;
        }

        activity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                adView.setVisibility(View.VISIBLE);
            }
        });
    }

    // Cocos Creator(JS)から呼ばれるメソッド(今回はまだ使用していません)
    public static void hideAdView() {
        if (activity == null) return;
        if (adView == null) return;

        activity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                adView.setVisibility(View.INVISIBLE);
            }
        });
    }

    @Override
    protected void onResume() {
        super.onResume();
        activity = this;
        SDKWrapper.getInstance().onResume();
    }

 - 省略 -

}

発生している問題・エラーメッセージ

以下のエラーメッセージが、AppActivityのcreateAdView内のadView.loadAd(adRequest)で起きています。

W/GooglePlayServicesUtil: Cannot find Google Play services package name.
                          android.content.pm.PackageManager$NameNotFoundException: com.google.android.gms
                              at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:114)
                              at com.google.android.gms.internal.zzsh.getPackageInfo(Unknown Source)
                              at com.google.android.gms.common.zze.zzby(Unknown Source)
                              at com.google.android.gms.common.zze.zzbx(Unknown Source)
                              at com.google.android.gms.common.zze.zzbt(Unknown Source)
                              at com.google.android.gms.common.zze.isGooglePlayServicesAvailable(Unknown Source)
                              at com.google.android.gms.common.zzc.isGooglePlayServicesAvailable(Unknown Source)
                              at com.google.android.gms.ads.internal.util.client.zza.zzas(Unknown Source)
                              at com.google.android.gms.ads.internal.client.zzl.zza(Unknown Source)
                              at com.google.android.gms.ads.internal.client.zzl.zza(Unknown Source)
                              at com.google.android.gms.ads.internal.client.zzae.zzkh(Unknown Source)
                              at com.google.android.gms.ads.internal.client.zzae.zzkg(Unknown Source)
                              at com.google.android.gms.ads.internal.client.zzae.zza(Unknown Source)
                              at com.google.android.gms.ads.BaseAdView.loadAd(Unknown Source)
                              at com.google.android.gms.ads.AdView.loadAd(Unknown Source)
                              at org.cocos2dx.javascript.AppActivity$2.run(AppActivity.java:106)
                              at android.os.Handler.handleCallback(Handler.java:739)
                              at android.os.Handler.dispatchMessage(Handler.java:95)
                              at android.os.Looper.loop(Looper.java:135)
                              at android.app.ActivityThread.main(ActivityThread.java:5257)
                              at java.lang.reflect.Method.invoke(Native Method)
                              at java.lang.reflect.Method.invoke(Method.java:372)
                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
W/GooglePlayServicesUtil: Google Play Store is missing.

        

試したこと  

   Google Play Serviceのバージョン表記に不備があったり、ダウンロードできていない、というようなことを考えましたが、External Librariesにしっかり表示されていますから、問題ないように思います。   AppActivity内の、AdViewやAdActivityの実装があやしいと思うのですが   私はAndroidの仕様に詳しくないので、よくわからない状態です・・・。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

新しく作成したプロジェクト(Hello World)でテストしています

これはCocosのプロジェクトでしょうか?
その前にAndroidでのテストをしたほうがいいように思います 

Androidで見ると、複数の設定が間違っていると思います
Cocosとの兼ね合いであれば別ですが

// これは?なくてもいいのでは、少なくともバージョンが違う
classpath 'com.google.gms:google-services:3.0.0'

// これはどこに設定されているのでしょう?多分いらないのでは
apply plugin: 'com.google.gms.google-services'

// この箇所はthisでいけます
adView = new AdView(this);
adView.setAdUnitId("ca-app-pub-3940256099942544/6300978111"); //テスト用広告ID
adView.setAdSize(AdSize.BANNER);
final RelativeLayout relativeLayout = new RelativeLayout(this);
this.addContentView(relativeLayout, new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
relativeLayout.setVerticalGravity(Gravity.BOTTOM);
relativeLayout.addView(adView);

参考

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/10/01 15:48

    ご回答いただきありがとうございます。

    Androidエミュレータで実行した結果、エラーが出ているという状況です。
    やはり、Cocos2d-JSでのビルドが問題なのだと思います。

    キャンセル

check解決した方法

0

過去の質問やWeb上の記事に載っている方法をいくつか試しましたが、やはり同じエラーが出ました。

現行のCocosCreatorはSDKBoxに対応しているようなので、できれば手動で導入したかったのですが、SDKBoxで広告を実装することにしました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    Androidでタイトルを消したい

    Android Studio, Mac OS X, Android5.1で開発をしています。 タイトルを消したいと考えて、 MainActivity.javaに、 reque

  • 解決済

    カクカクな動きを改善する方法

    前回質問させていただいた花びらの落ちるプログラムをAndroidでも作ってみました。 コード public class MainActivity extends Activi

  • 解決済

    Android numberpicker カスタム

    Androidで、10,20,30のように選択できるnumberpickerを利用したいです。調べたところ標準では単位の変更は出来ないとの事なのでカスタムされたものを使おうと考えて

  • 解決済

    画像と文字列を同時に送りたい(PHP->Android)

    前提・実現したいこと サーバ側PHPでDBからSELECTした画像及び文字列を、Android端末に渡したいと考えています。 画像単体の受け渡しには成功したのですが、同時に文字

  • 解決済

    ボタンを押してもテキストが表示されない

    前提・実現したいこと androidstudio 2.3 でアプリ開発の勉強を独学でやっています。 ボタンを押すとテキストが表示されるようにしたいです。 (じゃんけんゲームの

  • 解決済

    初めての人のためのRecyclerView実装サンプルコード探しています

    AndroidStudio2.3.1で、縦方向のリスト形式で画像(アイコン)とテキストが、表示されるようなアプリを 作ろうと考えていますが、実際に作る前にRecyclerView

  • 解決済

    androidstudio 色検出

    androidstudioで色検出をしようとしています。このサイトのコードをほぼほぼコピペしたのですが FdActivity.javaでonCreateOptionsMenuの中の

  • 解決済

    android opencvで輪郭描画

    私はandroidstudioでアプリ開発を行っています。 実現したいこと opencvで赤い色を検知して赤色を白に、それ以外を黒にしてそのあとに赤い物の輪郭の中心座標を返した

同じタグがついた質問を見る

  • Android

    6521questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Studio

    3701questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

  • COCOS2D-X

    188questions

    COCOS2D-Xは、 2Dゲームを手軽に開発できるフレームワークのことです。 iPhone(iOS)向け、Android等に対応しており、 実質ワンソースで開発が可能です。

  • Cocos Creator

    8questions

    Cocos Creatorは、Cocos2d-x向けの統合開発環境。UI・アニメーションの編集、JavaScriptのコーディング、ビルドなどを一括して行うことができるエディタです。