Help us understand the problem. What is going on with this article?

cocos2dx-3.0でLua。AdMobを入れてみる(Android編)

More than 5 years have passed since last update.

少し困ったのでメモ

こちらを超参考にしました

環境

cocos2d-x3.0rc0
GooglePlayService
等をインストールしておく。

java

今回は Activityを改造するので
PROJ_DIR/frameworks/runtime-src/proj.Android
以下をさわります。
ここはEclipseのプロジェクトルートなので Eclipse等で読み込んでも良いでしょう

デフォルトでは org.cocos2dx.lua.Cocos2dsActivity.java
が、LAUNCH時に起動するようになってます
このソースを書き換えてもよいのですが、今回は継承してみます

たとえば com.murasamelabo.mimico.MainActivity を作ります

com.murasamelabo.mimico.MainActivity
package com.murasamelabo.mimico;

import org.cocos2dx.lua.Cocos2dxActivity;

import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
import android.view.WindowManager;
import com.google.android.gms.ads.*;


public class MainActivity extends Cocos2dxActivity {

   private WindowManager    mWindowManager = null;
   private AdView           mAdView = null;

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

        try{
            // adView を作成する
            mAdView = new AdView(this);
            mAdView.setAdUnitId( APP_ID );
            mAdView.setAdSize(AdSize.BANNER); 

            //広告をリクエスト
            // 本番
            AdRequest adRequest = new AdRequest.Builder().build();
            // test用
            /*    
            AdRequest adRequest = new AdRequest.Builder()
            .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)       // エミュレータ
            .addTestDevice( DEVICE ) // 
            .build();
            //*/
            mAdView.loadAd(adRequest);

            // 重ね合わせするViewの設定を行う
            WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();  
            layoutParams.gravity = Gravity.BOTTOM | Gravity.CENTER;
            layoutParams.x       = 0; // 表示位置 x  
            layoutParams.y       = 0; // 表示位置 y  
            layoutParams.width   = WindowManager.LayoutParams.WRAP_CONTENT;
            layoutParams.height  = WindowManager.LayoutParams.WRAP_CONTENT;
            layoutParams.type    = WindowManager.LayoutParams.TYPE_TOAST;  // ゲーム画面より前面に表示
            layoutParams.flags   = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;  // 自分以外のところがタッチされたとき、背後のビューにタッチイベントを渡す。

            // WindowManagerを取得する
            mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
            // WindowManagerにAdMobのビューを追加する。
            mWindowManager.addView(mAdView, layoutParams);  
        }catch( Exception e ){

        }
    }   


    @Override
    public void onDestroy() {

        if( mWindowManager != null) 
            mWindowManager.removeView(mAdView);

        if( mAdView != null)    
            mAdView.destroy();

        super.onDestroy();
    }       
}

そして libsに google-play-services.jar を置く

Manifest

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.murasamelabo.mimico"
      android:versionCode="1"
      android:versionName="1.0">

    <uses-sdk android:minSdkVersion="9"
              android:targetSdkVersion="18" />
    <uses-feature android:glEsVersion="0x00020000" />

    <application android:label="@string/app_name"
                 android:icon="@drawable/icon">

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

        <activity android:name="com.murasamelabo.mimico.MainActivity"
                  android:label="@string/app_name"
                  android:screenOrientation="portrait"
                  android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                  android:configChanges="orientation|keyboardHidden|screenSize">

            <!-- Tell NativeActivity the name of our .so -->
            <meta-data android:name="android.app.lib_name"
                       android:value="cocos2dlua" />

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name="com.google.android.gms.ads.AdActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
    </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"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  

    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
</manifest> 

自分のアプリ用に 適宜かきかえてください

Build

3.0rc では cocosコマンドでビルド実行ですね

$cocos run -j4 -p android

エラーが出ます
configChangesの値が 対応してないようです。

project.propertyを見ると target=android-10
となっており、AndroidSDK-10 では対応していないようです

がしかし project.propertyは ビルドのたびに上書きされるので
ここを target=android-18 等にしても 再び 10に戻されだめです

フラグを削除すると実行時に configChangesの値が足りないと AdMobが起動しません

ということで

奥の手

Build.xml の    
<loadproperties srcFile="project.properties" /><loadproperties srcFile="project2.properties" />
等にかえ、該当ファイルを target=android-18 と設定すれば

動いた!!

備考

cocosコマンドにて project.property を作成しているようで
tools/cocos2d-console/bin/cocos.py にて

cocos.py
def select_default_android_platform():
    sdk_root = check_environment_variable('ANDROID_SDK_ROOT')
    platforms_dir = os.path.join(sdk_root, "platforms")
    if os.path.isdir(platforms_dir):
       for num in range (10, 19+1):
           android_platform = 'android-%s' % num
           if os.path.isdir(os.path.join(platforms_dir, android_platform)):
               Logging.info('%s is found' % android_platform)
               return num
    return None

ここで sdk-10に設定されているようです

正しい解決法知っている人教えてください!

YukiMiyatake
C++が喋れる ゲームプログラマ インフラ、サーバ、UNITY、ゲームエンジンが最近多いな・・ MONA: MPpuEnmqDYBCxSZyG5cBDt6UWtXczmRmkn BTC: 13JpgsF3n6K2WhjEeUuUUqS7V71gWdFx56 BCH: 18q6rfi9ynyTgynrB8tJ2eSDLPQM32RZk5
http://murasame-labo.hatenablog.com/
murasame
ゲーム、エンタメ、サーバインフラ等 少人数で技術力の高い仕事をする会社
http://murasame-lab.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした