cocos2dx-3.0でLua。AdMobを入れてみる（Android編）

少し困ったのでメモ

[Cocos2d-x + Android でAdMobを表示するメモ]:(http://qiita.com/JunSuzukiJapan@github/items/5858f1483adddc114e84)
こちらを超参考にしました


#環境
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  を作ります

```java: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
```xml: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 等にしても 再び １０に戻されだめです

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

ということで 


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



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

```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に設定されているようです


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