效果如下
注册和添加应用就不说了
android部分
1.先将SDK放到libs中
2.AndroidManifest.xml修改如下
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="duomengad.crlyn"
- android:versionCode="1"
- android:versionName="1.0">
- <uses-sdk android:minSdkVersion="16"/>
- <!-- 网络访问权限 -->
- <uses-permission android:name="android.permission.INTERNET" />
- <!-- 获取网络信息状态,如当前的网络连接是否有效 -->
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- <!-- 读取手机状态 -->
- <uses-permission android:name="android.permission.READ_PHONE_STATE" />
- <!-- 允许程序写入外部存储,如SD卡上写文件 -->
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- <!-- 获取错略位置 -->
- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
- <!-- 获取WiFi状态 -->
- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
- <!-- 以下权限为可选权限,主要是品牌广告会用到,如果您没有添加,需要这些效果的品牌广告将不会投放到您的应用上 -->
- <!-- 震动权限 -->
- <uses-permission android:name="android.permission.VIBRATE" />
- <uses-feature android:glEsVersion="0x00020000" />
- <application android:label="@string/app_name"
- android:icon="@drawable/icon">
- <!-- Tell Cocos2dxActivity the name of our .so -->
- <meta-data android:name="android.app.lib_name"
- android:value="cocos2dcpp" />
- <!-- 多盟的SDK -->
- <activity android:name="cn.domob.android.ads.DomobActivity"
- android:theme="@android :style/Theme.Translucent"></activity>
- <activity android:name="org.cocos2dx.cpp.AppActivity"
- android:label="@string/app_name"
- android:screenOrientation="portrait"
- android:theme="@android :style/Theme.NoTitleBar.Fullscreen"
- android:configChanges="orientation">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
- <supports-screens android:anyDensity="true"
- android:smallScreens="true"
- android:normalScreens="true"
- android:largeScreens="true"
- android:xlargeScreens="true"/>
- <uses-permission android:name="android.permission.INTERNET"/>
- </manifest>
3.AppActivity.java 文件修改如下
- /****************************************************************************
- 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.
- ****************************************************************************/
- package org.cocos2dx.cpp;
- import org.cocos2dx.lib.Cocos2dxActivity;
- import cn.domob.android.ads.DomobAdManager.ErrorCode;
- import cn.domob.android.ads.DomobInterstitialAd;
- import cn.domob.android.ads.DomobInterstitialAdListener;
- import android.os.Bundle;
- import android.util.Log;
- public class AppActivity extends Cocos2dxActivity {
- private DomobInterstitialAd mInterstitialAd;
- private static AppActivity _AppActivity;
- public static final String PUBLISHER_ID = "56OJwdBIuNBzc/kIO9";
- public static final String InterstitialPPID = "16TLuqBoApj34NUE2GW-0G9z";
- @Override
- protected void onCreate(Bundle savedIntanceState){
- super.onCreate(savedIntanceState);
- mInterstitialAd = new DomobInterstitialAd(this, PUBLISHER_ID, InterstitialPPID, DomobInterstitialAd.INTERSITIAL_SIZE_300X250);
- mInterstitialAd.setInterstitialAdListener(new DomobInterstitialAdListener() {
- @Override
- public void onInterstitialAdReady() {
- Log.i("DomobSDKDemo", "onAdReady");
- }
- @Override
- public void onLandingPageOpen() {
- Log.i("DomobSDKDemo", "onLandingPageOpen");
- }
- @Override
- public void onLandingPageClose() {
- Log.i("DomobSDKDemo", "onLandingPageClose");
- }
- @Override
- public void onInterstitialAdPresent() {
- Log.i("DomobSDKDemo", "onInterstitialAdPresent");
- }
- @Override
- public void onInterstitialAdDismiss() {
- // Request new ad when the previous interstitial ad was closed.
- mInterstitialAd.loadInterstitialAd();
- Log.i("DomobSDKDemo", "onInterstitialAdDismiss");
- }
- @Override
- public void onInterstitialAdFailed(ErrorCode arg0) {
- Log.i("DomobSDKDemo", "onInterstitialAdFailed");
- }
- @Override
- public void onInterstitialAdLeaveApplication() {
- Log.i("DomobSDKDemo", "onInterstitialAdLeaveApplication");
- }
- @Override
- public void onInterstitialAdClicked(DomobInterstitialAd arg0) {
- Log.i("DomobSDKDemo", "onInterstitialAdClicked");
- }
- });
- mInterstitialAd.loadInterstitialAd();
- _AppActivity = this;
- }
- public static void showAd(){
- _AppActivity.runOnUiThread(new Runnable() {
- @Override
- public void run() {
- if (_AppActivity.mInterstitialAd.isInterstitialAdReady()){
- _AppActivity.mInterstitialAd.showInterstitialAd(_AppActivity);
- } else {
- Log.i("DomobSDKDemo", "Interstitial Ad is not ready");
- _AppActivity.mInterstitialAd.loadInterstitialAd();
- }
- }
- });
- }
- }
4.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/Admob.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 += cocosbuilder_static
- # LOCAL_WHOLE_STATIC_LIBRARIES += spine_static
- # LOCAL_WHOLE_STATIC_LIBRARIES += cocostudio_static
- # LOCAL_WHOLE_STATIC_LIBRARIES += cocos_network_static
- # LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static
- include $(BUILD_SHARED_LIBRARY)
- $(call import-module,.)
- $(call import-module,audio/android)
- # $(call import-module,Box2D)
- # $(call import-module,editor-support/cocosbuilder)
- # $(call import-module,editor-support/spine)
- # $(call import-module,editor-support/cocostudio)
- # $(call import-module,network)
- # $(call import-module,extensions)
VS部分
1.新建Admob.h
- #pragma once
- class Admob{
- public:
- static void showAd();
- };
2.新建Admob.cpp
- #include "Admob.h"
- #include "cocos2d.h"
- USING_NS_CC;
- #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
- #include "platform/android/jni/JniHelper.h"
- #include <jni.h>
- const char* AppActivityCalssName = "org/cocos2dx/cpp/AppActivity";
- void Admob::showAd(){
- cocos2d::JniMethodInfo t;
- if(cocos2d::JniHelper::getStaticMethodInfo(t,AppActivityCalssName,"showAd","()V")){
- t.env->CallStaticVoidMethod(t.classID,t.methodID);
- t.env->DeleteLocalRef(t.classID);
- }
- }
- #else
- void Admob::showAd(){
- log("showAd() called");
- return;
- }
- #endif
3.修改HelloWorldScene.h文件,修改如下
- #ifndef __HELLOWORLD_SCENE_H__
- #define __HELLOWORLD_SCENE_H__
- #include "cocos2d.h"
- class HelloWorld : public cocos2d::Layer
- {
- public:
- // there's no 'id' in cpp, so we recommend returning the class instance pointer
- static cocos2d::Scene* createScene();
- // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
- virtual bool init();
- // a selector callback
- void menuCloseCallback(cocos2d::Ref* pSender);
- void adCallback(cocos2d::Ref* pRef);
- // implement the "static create()" method manually
- CREATE_FUNC(HelloWorld);
- };
- #endif // __HELLOWORLD_SCENE_H__
4.修改HelloWorldScene.cpp文件,修改如下
- #include "HelloWorldScene.h"
- #include "Admob.h"
- USING_NS_CC;
- Scene* HelloWorld::createScene()
- {
- // 'scene' is an autorelease object
- auto scene = Scene::create();
- // 'layer' is an autorelease object
- auto layer = HelloWorld::create();
- // add layer as a child to scene
- scene->addChild(layer);
- // return the scene
- return scene;
- }
- // on "init" you need to initialize your instance
- bool HelloWorld::init()
- {
- //
- // 1. super init first
- if ( !Layer::init() )
- {
- return false;
- }
- Size visibleSize = Director::getInstance()->getVisibleSize();
- Vec2 origin = Director::getInstance()->getVisibleOrigin();
- /
- // 2. add a menu item with "X" image, which is clicked to quit the program
- // you may modify it.
- // add a "close" icon to exit the progress. it's an autorelease object
- auto closeItem = MenuItemImage::create(
- "CloseNormal.png",
- "CloseSelected.png",
- CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
- closeItem->setPosition(Vec2(origin.x + visibleSize.width - closeItem->getContentSize().width/2 ,
- origin.y + closeItem->getContentSize().height/2));
- auto adItem = MenuItemImage::create(
- "CloseNormal.png",
- "CloseSelected.png",
- CC_CALLBACK_1(HelloWorld::adCallback, this));
- adItem->setPosition(Vec2(origin.x + visibleSize.width/2 ,origin.y + visibleSize.height/2));
- // create menu, it's an autorelease object
- auto menu = Menu::create(closeItem,adItem, NULL);
- menu->setPosition(Vec2::ZERO);
- this->addChild(menu, 1);
- /
- // 3. add your codes below...
- // add a label shows "Hello World"
- // create and initialize a label
- auto label = LabelTTF::create("Hello World", "Arial", 24);
- // position the label on the center of the screen
- label->setPosition(Vec2(origin.x + visibleSize.width/2,
- origin.y + visibleSize.height - label->getContentSize().height));
- // add the label as a child to this layer
- this->addChild(label, 1);
- // add "HelloWorld" splash screen"
- auto sprite = Sprite::create("HelloWorld.png");
- // position the sprite on the center of the screen
- sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
- // add the sprite as a child to this layer
- this->addChild(sprite, 0);
- return true;
- }
- void HelloWorld::menuCloseCallback(Ref* pSender)
- {
- #if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)
- MessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");
- return;
- #endif
- Director::getInstance()->end();
- #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
- exit(0);
- #endif
- }
- void HelloWorld::adCallback(cocos2d::Ref* pRef){
- Admob::showAd();
- }
OK,点击最中央的按钮,
转自:http://blog.csdn.net/wiyun_beijing/article/details/17912471