Chapter1:
1、创建一个 cocos2d-x项目 admob_test
2、用Eclipse import-> admob_test\proj.android
3、Import ->libcocos2dx
选择 目录:……/cocos2d-x2.x/cocos2dx/platform/andorid/java,导入;
4、编译CPP files
4.1选择proj.andorid目录 ,启动终端;
4.2设置ANDROID_SDK_ROOT 和 NDK_ROOT
export ANDROID_SDK_ROOT=”/Users/SamMa/Desktop/AndroidStudio/sdk”
export NDK_ROOT=”/Users/SamMa/Desktop/AndroidStudio/android-ndk-r10d”
4.3 编译 build_native.sh

5、用Eclipse真机测试
选择admob_test 项目右键-> Build Configruation->Target 选择每次提示选择调试设备
选择admob_test 项目右键-> Run as Android App

Chapter2:admob Account
1、申请 admob account
2、创建APP,准备banner 广告,插屏广告;

Chapter3: Implementing AdMob in Android cocos2d-x 2.x based game
1、下载并安装 “Google Play Services” SDK
Eclipse 选择Android SDK Manager 下载 Google Play Services
2、Eclipse Import :google_play_services_lib
路径:/Users/SamMa/Desktop/AndroidStudio/sdk/extras/google/google_play_services/libproject/
3、在项目代码中引用google_play_services_lib


4、尽量使 all projects (admobTest,google-play-services_lib and libcocos2dx) have the same build target (但 Android 4.42 、5.0.1、 5.0.1 在此例真机运行OK).
5、修改清单文件
参考:https://developers.google.com/admob/android/eclipse
5.1 AndroidManifest.xml:

<!-- Include required permissions for Google Mobile Ads to run-->
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application>
        <!--This Meta-data tag is required to use Google Play Services.-->
        <Meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />

        <!--Include the AdActivity configChanges and theme. -->
        <activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:theme="@android:style/Theme.Translucent" />
    </application>

需要完成以下三项更改:

为 INTERNET 和 ACCESS_NETWORK_STATE 添加两个 <uses-permission> 标记。INTERNET 的标记是必需的,用于访问互联网以发送广告请求。 ACCESS_NETWORK_STATE 是可选的,用于在发出广告请求前检查是否有可用的互联网连接。

添加一个引用 Google Play 服务版本的 <Meta-data> 标记。这会让 Android 知道您的应用希望使用哪个版本的服务。

添加具有 configChanges 和 theme 属性的 <activity> 元素。当横幅广告被点击或展示插页式广告时,SDK 会使用此活动,而且与其他活动一样,必须在展示之前在清单中声明此活动。

5.2 为应用指定广告单元 ID -修改BannerExample/res/values/strings.xml

<string name="banner_ad_unit_id">ca-app-pub-3940256099942544/6300978111</string>

上面提供的广告单元 ID 仅用于测试,由Google 提供。

6、 Editing Java file
Edit admobtest->src->com->walkiway->admob_test->admob_test.java

/**************************************************************************** ms modified ******* copyright (c) 2008-2010 Ricardo Quesada copyright (c) 2010-2012 cocos2d-x.org copyright (c) 2011 Zynga Inc. copyright (c) 2013-2014 Chukong Technologies Inc. http://www.cocos2d-x.org Permission is hereby granted,free of charge,to any person obtaining a copy of this software and associated documentation files (the "Software"),to deal in the Software without restriction,including without limitation the rights to use,copy,modify,merge,publish,distribute,sublicense,and/or sell copies of the Software,and to permit persons to whom the Software is furnished to do so,subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS",WITHOUT WARRANTY OF ANY KIND,EXPRESS OR IMPLIED,INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,fitness FOR A PARTIculaR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR copYRIGHT HOLDERS BE LIABLE FOR ANY CLaim,damAGES OR OTHER LIABILITY,WHETHER IN AN ACTION OF CONTRACT,TORT OR OTHERWISE,ARISING FROM,OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ****************************************************************************/
/* copyright (c) 2014 Mudafar GPLv3 */
package com.walkiway.admob_test;

import org.cocos2dx.lib.Cocos2dxGLSurfaceView;



import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import org.cocos2dx.lib.Cocos2dxActivity;

import android.annotation.TargetApi;
import android.graphics.Color;
import android.graphics.Point;
import android.os.Build;
import android.os.Bundle;
import android.view.display;
import android.view.View;
import android.view.WindowManager;
import android.widget.LinearLayout;

import com.google.android.gms.ads.AdSize;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;

public class admob_test extends Cocos2dxActivity{

    private static admob_test  _appActiviy;
    private AdView adView;
    private static final String AD_UNIT_ID = "ca-app-pub-3940256099942544/6300978111";

    // Helper get display screen to avoid deprecated function use
    private Point getdisplaySize(display d)
    {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
        {
            return getdisplaySizeGE11(d);
        }
        return getdisplaySizeLT11(d);
    }

    @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
    private Point getdisplaySizeGE11(display d)
    {
        Point p = new Point(0,0);
        d.getSize(p);
        return p;
    }
    private Point getdisplaySizeLT11(display d)
    {
        try
        {
            Method getWidth = display.class.getmethod("getWidth",new Class[] {});
            Method getHeight = display.class.getmethod("getHeight",new Class[] {});
            return new Point(((Integer) getWidth.invoke(d,(Object[]) null)).intValue(),((Integer) getHeight.invoke(d,(Object[]) null)).intValue());
        }
        catch (NoSuchMethodException e2) // None of these exceptions should ever occur.
        {
            return new Point(-1,-1);
        }
        catch (IllegalArgumentException e2)
        {
            return new Point(-2,-2);
        }
        catch (illegalaccessexception e2)
        {
            return new Point(-3,-3);
        }
        catch (InvocationTargetException e2)
        {
            return new Point(-4,-4);
        }
    }




    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState); 

        getwindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

        int width = getdisplaySize(getwindowManager().getDefaultdisplay()).x;


         LinearLayout.LayoutParams adParams = new LinearLayout.LayoutParams(
                  width,LinearLayout.LayoutParams.WRAP_CONTENT);


            adView = new AdView(this);
            adView.setAdSize(AdSize.BANNER);
            adView.setAdUnitId(AD_UNIT_ID);


            AdRequest adRequest = new AdRequest.Builder()
                .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
                .addTestDevice("HASH_DEVICE_ID")
                .build();

            adView.loadAd(adRequest);
            adView.setBackgroundColor(Color.BLACK);
            adView.setBackgroundColor(0);
            addContentView(adView,adParams);

            _appActiviy = this;

    }


     public static void hideAd()
    {
        _appActiviy.runOnUiThread(new Runnable() 
        {

            @Override 
            public void run() 
            {
                if (_appActiviy.adView.isEnabled())
                    _appActiviy.adView.setEnabled(false);
                if (_appActiviy.adView.getVisibility() != 4 )
                    _appActiviy.adView.setVisibility(View.INVISIBLE);
            }
        });

    }


     public static void showAd()
    {
        _appActiviy.runOnUiThread(new Runnable() 
        {

            @Override 
            public void run() 
            {               
                if (!_appActiviy.adView.isEnabled())
                    _appActiviy.adView.setEnabled(true);
                if (_appActiviy.adView.getVisibility() == 4 )
                    _appActiviy.adView.setVisibility(View.VISIBLE);                             
            }
        });

    } 





    @Override
    protected void onResume() {
        super.onResume();
        if (adView != null) {
          adView.resume();
        }
    }

    @Override
    protected void onPause() {
         if (adView != null) {
              adView.pause();
        }
        super.onPause();
    }

    @Override
    protected void onDestroy() {
        adView.destroy();
        super.onDestroy();
    }

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

        return glSurfaceView;
    }

    static {
        System.loadLibrary("cocos2dcpp");
    }   

}

Very Important:private static final String AD_UNIT_ID = "ca-app-pub-3940256099942544/6300978111";
应用程序正式发布时,此处应根据admob 账号 APP 里的广告ID 进行修改。

7、 Editing CPP file:
Create a new file “AdmobHelper.h” in “admobTest\Classes”

/* copyright (c) 2014 Mudafar GPLv3 */


#ifndef __ADMOB_HELPER_H_
#define __ADMOB_HELPER_H_

class AdmobHelper {
public:
    static void hideAd();
    static void showAd();
    static bool isAdShowing;

};


#endif // __ADMOB_HELPER_H_

Create a new file “AdmobHelper.cpp” in “admobTest\Classes”

/* copyright (c) 2014 Mudafar GPLv3 */


#include "AdmobHelper.h"
#include "cocos2d.h"


bool AdmobHelper::isAdShowing = true;

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

#include "platform/android/jni/JniHelper.h"
#include <jni.h>
//#include <android/log.h>


const char* AppActivityClassName = "com/walkiway/admob_test/admob_test";

void AdmobHelper::hideAd()
{
    cocos2d::JniMethodInfo t;
    if (cocos2d::JniHelper::getStaticmethodInfo(t,AppActivityClassName,"hideAd","()V"))
    {

        t.env->CallStaticVoidMethod(t.classID,t.methodID);
        t.env->DeleteLocalRef(t.classID);
        isAdShowing = false;
    }
}



void AdmobHelper::showAd()
{

    cocos2d::JniMethodInfo t;
    if (cocos2d::JniHelper::getStaticmethodInfo(t,"showAd",t.methodID);
        t.env->DeleteLocalRef(t.classID);
        isAdShowing = true;
    }

}


#else


void AdmobHelper::hideAd()
{
    cclOG("hideAd() called");
    isAdShowing = false;
    return; //nothing
}


void AdmobHelper::showAd()
{
    cclOG("showAd() called");
    isAdShowing = true;
    return; //nothing;

}

#endif

Very Important: const char* AppActivityClassName = "com/walkiway/admob_test/admob_test";
proj.andorid/src目录下路径,最后的.java后缀不要写。

8、Control Ads visibility:
JNI
Now will show “admobTest” ad :

#include "AdmobHelper.h"
AdmobHelper::showAd();

9、编辑 .MK file:
Edit admobTest -> jni > Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := cocos2dcpp_shared

LOCAL_MODULE_FILENAME := libcocos2dcpp

LOCAL_SRC_FILES := hellocpp/main.cpp \
                   ../../Classes/AppDelegate.cpp \
                   ../../Classes/HelloWorldScene.cpp \
                   ../../Classes/AdmobHelper.cpp

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes

LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_WHOLE_STATIC_LIBRARIES += Box2d_static
LOCAL_WHOLE_STATIC_LIBRARIES += chipmunk_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static

include $(BUILD_SHARED_LIBRARY)

$(call import-module,cocos2dx)
$(call import-module,cocos2dx/platform/third_party/android/prebuilt/libcurl)
$(call import-module,CocosDenshion/android)
$(call import-module,extensions)
$(call import-module,external/Box2D)
$(call import-module,external/chipmunk)

最后: Note: 终端: build-native.sh Eclipse: Run -> Run as Android Application -> Wait ads to show

Cocos2d-x 2.x android下集成admob广告(一顶部banner的更多相关文章

  1. 3种方式实现瀑布流布局小结

    这篇文章主要介绍了3种方式实现瀑布流布局小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  2. ios – 在桌面浏览器上测试Apple Smart App Banner

    我知道仅仅在桌面浏览器中欺骗用户代理在显示智能应用横幅方面没有做任何事情,但也许我可以在桌面Safari浏览器中做其他事情来测试横幅?我不是iOS开发人员,但如果有帮助的话,我可以在同事的Mac上访问iOS模拟器.解决方法不幸的是,智能应用横幅仅在真实设备上的iOSSafari上显示.iOSSimulator和桌面Safari无法显示智能应用横幅.这是一个无赖,特别是因为在他们被解雇后重置智能应用程序横幅是hugepain.

  3. iOS 10 Safari问题在DOM中不再包含元素

    使用此链接,您可以重现该错误.https://jsfiddle.net/pw7e2j3q/如果您点击元素并从dom中删除它,然后单击链接测试.你应该看到旧的元素弹出选择.是否有一些黑客来解决这个问题?解决方法我能够重现这个问题.问题是,每当您尝试删除其更改事件上的选择框时,iOS10都无法正确解除对选择框的绑定.要解决此问题,您需要将代码更改事件代码放在具有一些超时

  4. ios – 有没有办法针对存档版本(.ipa)运行XCTest(UI)?

    要么我们可以单独构建和测试,以便我们可以先构建并在以后对该构建进行测试吗?

  5. ios app如何“知道”运行单元测试

    我知道我可以用xcodebuild开始我的应用程序的单元测试,但我想知道是什么告诉应用程序在启动期间运行测试,它是一个发送到应用程序的特殊参数,还是以不同的方式编译以运行测试?

  6. Admob ios x64错误

    我正试图在iPadMiniRetina上测试AdmobBanner.现在我收到这个错误:Undefinedsymbolsforarchitecturearm64:“_SCNetworkReachabilityCreateWithAddress”,referencedfrom:l002inlibGoogleAdMobAds.a(GADGestureUtil.o)“_AudioServicesPlay

  7. ios – 如何在Swift中正确转换为子类?

    我有一个带有许多不同单元格的UITableView,基于数据源内容数组中的内容,它们应该显示自定义内容.在这里我得到了错误UITableViewCell没有属性customLabelQuestionTableViewCell有哪些.我的演员到QuestionTableViewCell有什么问题?解决方法问题不是你的演员,而是你的细胞宣言.您将其声明为可选的UITableViewCell,并且该声明

  8. ios – 完成处理程序在viewDidLoad中不工作?

    我正在使用这个library在我的应用程序的横幅.我正在尝试通过解析JSON来获取链接.图像在幻灯片视图中未显示.如果我按幻灯片视图,之后一切正常.我以为我的完成处理程序有一些问题.但我不能解决它:)解决方法你可能有一个线程问题.横幅完成处理程序不能保证主线程被调用.您需要在做任何触及属性或(特别是)界面的事情之前明确地走出主线程.

  9. xcode – 添加OCMock会导致Test启动主应用程序而不是运行测试

    我正在尝试将Ocmock添加到我现有的Cocoa项目中,但我遇到了一个我没有看到其他人覆盖的奇怪问题.我最终将它分离到以下内容:如果我只是将Ocmock.framework引用添加到我的项目中(即以某种方式将其拖到LinkBinaryWithLibraries构建阶段),当我运行测试时,真正的应用程序将被启动.没有Ocmock,输出正常:使用Ocmock框架链接(部分输出):此后,其他应用程序输出

  10. Xcode:用于条件DEBUG / TEST代码的预处理器宏

    我在我的代码(例如AppDelegate.m)中有不应该为单元测试编译的部分,例如当您在创建新项目时选择“添加单元测试”时,目标是由Xcode设置的.在项目文件中,我已将标志CONfigURATION_TESTS添加到内置目标的MyAppTests的预处理器宏中,但未添加到MyApp目标.这是我发现的许多帖子中的建议方式.但是这不起作用,因为(我猜)MyAppTests目标将MyApp目标作为依赖

随机推荐

  1. 【cocos2d-x 3.x 学习笔记】对象内存管理

    Cocos2d-x的内存管理cocos2d-x中使用的是上面的引用计数来管理内存,但是又增加了一些自己的特色。cocos2d-x中通过Ref类来实现引用计数,所有需要实现内存自动回收的类都应该继承自Ref类。下面是Ref类的定义:在cocos2d-x中创建对象通常有两种方式:这两中方式的差异可以参见我另一篇博文“对象创建方式讨论”。在cocos2d-x中提倡使用第二种方式,为了避免误用第一种方式,一般将构造函数设为protected或private。参考资料:[1]cocos2d-x高级开发教程2.3节[

  2. 利用cocos2dx 3.2开发消灭星星六如何在cocos2dx中显示中文

    由于编码的不同,在cocos2dx中的Label控件中如果放入中文字,往往会出现乱码。为了方便使用,我把这个从文档中获取中文字的方法放在一个头文件里面Chinese.h这里的tex_vec是cocos2dx提供的一个保存文档内容的一个容器。这里给出ChineseWords,xml的格式再看看ChineseWord的实现Chinese.cpp就这样,以后在需要用到中文字的地方,就先include这个头文件然后调用ChineseWord函数,获取一串中文字符串。

  3. 利用cocos2dx 3.2开发消灭星星七关于星星的算法

    在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix,如果还不知道怎么创建星星矩阵请回去看看而且我们也讲了整个游戏的触摸事件的派发了。

  4. cocos2dx3.x 新手打包APK注意事项!

    这个在编译的时候就可以发现了比较好弄这只是我遇到的,其他的以后遇到再补充吧。。。以前被这两个问题坑了好久

  5. 利用cocos2dx 3.2开发消灭星星八游戏的结束判断与数据控制

    如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。开始把剩下的两两互不相连的星星消去。那么如何判断是GameOver还是进入下一关呢。。其实游戏数据贯穿整个游戏,包括星星消除的时候要加到获得分数上,消去剩下两两不相连的星星的时候的加分政策等,因此如果前面没有做这一块的,最好回去搞一搞。

  6. 利用cocos2dx 3.2开发消灭星星九为游戏添加一些特效

    needClear是一个flag,当游戏判断不能再继续后,这个flag变为true,开始消除剩下的星星clearSumTime是一个累加器ONE_CLEAR_TIME就是每颗星星消除的时间2.连击加分信息一般消除一次星星都会有连击信息和加多少分的信息。其实这些combo标签就是一张图片,也是通过控制其属性或者runAction来实现。源码ComboEffect.hComboEffect.cpp4.消除星星粒子效果消除星星时,为了实现星星爆裂散落的效果,使用了cocos2d提供的粒子特效引擎对于粒子特效不了

  7. 02 Cocos2D-x引擎win7环境搭建及创建项目

    官网有搭建的文章,直接转载记录。环境搭建:本文介绍如何搭建Cocos2d-x3.2版本的开发环境。项目创建:一、通过命令创建项目前面搭建好环境后,怎样创建自己的Cocos2d-x项目呢?先来看看Cocos2d-x3.2的目录吧这就是Cocos2d-x3.2的目录。输入cocosnew项目名–p包名–lcpp–d路径回车就创建成功了例如:成功后,找到这个项目打开proj.win32目录下的Hello.slnF5成功了。

  8. 利用cocos2dx 3.2开发消灭星星十为游戏添加音效项目源码分享

    一个游戏,声音也是非常的重要,其实cocos2dx里面的简单音效引擎的使用是非常简单的。我这里只不过是用一个类对所有的音效进行管理罢了。Audio.hAudio.cpp好了,本系列教程到此结束,第一次写教程如有不对请见谅或指教,谢谢大家。最后附上整个项目的源代码点击打开链接

  9. 03 Helloworld

    程序都有一个入口点,在C++就是main函数了,打开main.cpp,代码如下:123456789101112131415161718#include"main.h"#include"AppDelegate.h"#include"cocos2d.h"USING_NS_CC;intAPIENTRY_tWinMain{UNREFERENCED_ParaMETER;UNREFERENCED_ParaMETER;//createtheapplicationinstanceAppDelegateapp;return

  10. MenuItemImage*图标菜单创建注意事项

    学习cocos2dx,看的是cocos2d-x3.x手游开发实例详解,这本书错误一大把,本着探索求知勇于发现错误改正错误的精神,我跟着书上的例子一起调试,当学习到场景切换这个小节的时候,出了个错误,卡了我好几个小时。

返回
顶部