Marmalade (以前のAirplay SDK)を使用してゲームを開発するとき、広告を導入することが必要になりました (この記事ではAdMobが例として使用されています)、そして賢明な情報、例、またはチュートリアルがどこにもないので、自分でそれを掘らなければなりませんでした。 その結果、すべてがそれほど難しくないことが判明しました。
必要なもの:
- Marmalade SDK 5.0以降(この記事ではバージョン5.0を使用)
- Android NDK r5(要件にインストールされたツールとNDK_ROOTシステム変数を使用)
- GoogleAdMobAdsSdk-4.1.0.jar
拡張機能を作成する
Marmaladeがインストールされているディレクトリ、拡張子(たとえば、c:\ Marmalade \ 5.0 \ extensions)を持つフォルダに移動し、新しいAdmobAds拡張の名前で独自のフォルダを作成します。 拡張機能は、他の拡張機能があるディレクトリに配置することをお勧めします。
ここで、次を含むテキストドキュメントAdmobAds.s4eを作成する必要があります。
#include <s3eTypes.h> 機能: s3eResult InitAds(const char * pub_id)S3E_RESULT_ERROR run_on_os_thread s3eResult ShowAds()S3E_RESULT_ERROR run_on_os_thread s3eResult HideAds()S3E_RESULT_ERROR run_on_os_thread
つまり、拡張機能には3つのメソッドがあります。
- 入力パラメーターとしてpublisher_idを受け入れるInitAds()
- ShowAds()-広告を表示
- HideAds()-広告を非表示
ここで、Androidの拡張コードを生成する必要があります。そのためには、 AdmobAds.s4eを右クリックして、 Build Android Extensionを選択します その後、javaおよびcppのテンプレートソースコード、およびその他の補助ファイルがソースフォルダーに生成されます。
 
      コードが生成されたら、... \ AdmobAds \ source \ android \ AdmobAds.javaを開きます。これには、 AdmobAds.s4eで説明されているメソッドが含まれています 。
  / *
 AdmobAds拡張機能のJava実装。
ここにAndroid固有の機能を追加します。
これらの関数は、ネイティブコードからJNIを介して呼び出されます。
 * /
 / *
  *注:このファイルは元々拡張機能ビルダーによって作成されたものですが、
  * --forceが指定されていない限り上書きされ、変更されることを意図しています。
  * /
 import com.ideaworks3d.marmalade.LoaderAPI;
クラスAdmobAds
 {
	
     public int InitAds(最終文字列pub_id)
     {
         0を返します。
     }
     public int ShowAds()
     {
         0を返します。
     }
    
     public int HideAds()
     {
         0を返します。
     }
 } 重要:メソッドはUIスレッドで実行されません。同じToastを表示するには、runOnUiThreadを使用して起動を追加する必要があります。
 import com.ideaworks3d.marmalade.LoaderActivity;    
 import android.widget.Toast;
     ...    
     public int InitAds(最終文字列pub_id)
     {
    	 LoaderActivity.m_Activity.runOnUiThread(新しいRunnable(){
			 @Override
			 public void run(){
				 Toast.makeText(LoaderActivity.m_Activity、pub_id、Toast.LENGTH_LONG).show();
			 }
		 });
         0を返します。
     } LoaderActivity.m_Activity-アプリケーションのメインアクティビティ。必要に応じて継承できます。
それがどのように動作するかを確認しましょう、ダブルクリックして起動します
- AdmobAds_android.mkb
- AdmobAds_android_java.mkb
すべてが正しく行われていれば、ビルドは失敗しません。
拡張機能をプロジェクトに接続するには、いくつかの手順を実行する必要があります。
- たとえば、HelloWorldの例をコピーします
- サブプロジェクト(拡張子)をs3eHelloWorld.mkbに追加します
 サブプロジェクト
 {
	アドモバッド
 } - 保存して開く(依存関係が生成され、プロジェクトの拡張がリンクされます)
- s3eHelloWorld.cppに次の変更を追加します。
  #include "AdmobAds.h"
 int main()
 {
	 if(AdmobAdsAvailable()){
		 InitAds( "a14bd815 ...");
	 }
AdmobAdsAvailable()メソッドは、拡張機能の作成時に自動的に生成され、このプラットフォームで拡張機能が使用可能な場合はtrueを返します(つまり、AndroidおよびiOSの場合はtrue、winなどはfalseを返します)。
GCC ARM(リリース)をコンパイルした後、デプロイメントツールを起動し、ビルドディレクトリのdeploy_config.pyディレクトリからファイルを選択し、Androidプラットフォームのリストから選択して、[すべて展開]をクリックします。 その後、選択したプラットフォームのアプリケーションのエクスポートを開始します。 ビルドが成功した場合は、apkファイルを携帯電話にダウンロードします(!)
 
      私たちはトーストを見ました-すべては順調です
AdmobAds拡張機能に広告を追加する
AdmobAds.java拡張機能の前述のソースコードを開いて編集し、そこに広告を追加します。
 import android.view.ViewGroup.LayoutParams;
 import android.view.View;
 import android.widget.Toast;
 import com.google.ads.Ad;
 import com.google.ads.AdRequest;
 import com.google.ads.AdRequest.ErrorCode;
 import com.google.ads.AdSize;
 import com.google.ads.AdView;
 import com.ideaworks3d.marmalade.LoaderAPI;
 import com.ideaworks3d.marmalade.LoaderActivity;
クラスAdmobAds
 {
     private static final int ADVIEW_NOT_INITIALIZED = 1;
    プライベートAdView adView;
	
     public int InitAds(最終文字列pub_id)
     {
    	 LoaderActivity.m_Activity.runOnUiThread(新しいRunnable(){
			 @Override
			 public void run(){
				 Toast.makeText(LoaderActivity.m_Activity、pub_id、Toast.LENGTH_LONG).show();
				
				 adView =新しいAdView(LoaderActivity.m_Activity、AdSize.BANNER、pub_id);
				 adView.loadAd(新しいAdRequest());
				 LoaderActivity.m_Activity.addContentView(adView、新しいLayoutParams(LayoutParams.WRAP_CONTENT、LayoutParams.WRAP_CONTENT));
			 }
		 });
         0を返します。
     }
     public int ShowAds()
     {
	 if(adView!= null){
		 LoaderActivity.m_Activity.runOnUiThread(新しいRunnable(){
			 @Override
			 public void run(){
				 adView.setVisibility(View.VISIBLE);
			 }});
	 } else { 
		 return ADVIEW_NOT_INITIALIZED; 
	 }
         0を返します。
     }
     public int HideAds()
     {
	 if(adView!= null){
		 LoaderActivity.m_Activity.runOnUiThread(新しいRunnable(){
			 @Override
			 public void run(){
				 adView.setVisibility(View.INVISIBLE);
			 }});
	 } else { 
		 return ADVIEW_NOT_INITIALIZED; 
	 }
         0を返します。
     }
 }
ご覧のとおり、AdMob wikiの広告実装コードの標準的な例である、異常なものはありません
打ち上げ
- AdmobAds_android.mkb
- AdmobAds_android_java.mkbを編集して、そこにGoogleAdMobAdsSdk-4.1.0.jarへのパスを追加します
  #!/ usr / bin / env mkb
 #AndroidのAdmobAds拡張機能のJava部分のBuilder mkbファイル
プラットフォームjava
ファイル
 {
     (ソース/アンドロイド)
     AdmobAds.java
 }
 librarypath "$ MARMALADE_ROOT / s3e / deploy / plugins / android / android.jar"
 librarypath "$ MARMALADE_ROOT / s3e / loader / android / s3e_release.jar"
 librarypath "c:/Marmalade/5.0/examples/HelloWorld_java/GoogleAdMobAdsSdk-4.1.0.jar"
オプションoutput-name = lib / android / AdmobAds.jar
- AdmobAds_android_java.mkbを実行します
ここで、s3eHelloWorld.mkbを編集してそこに追加する必要があります
展開
 {
	 android-manifest = AndroidManifest.xml
	 android-external-jars = GoogleAdMobAdsSdk-4.1.0.jar
 }
AndroidManifest.xmlは、生成されたもの(.apkファイルの隣にIntermediate_filesディレクトリがあります)にコピーして追加できます。
     <アクティビティandroid:name = "com.google.ads.AdActivity"
               android:configChanges = "keyboard | keyboardHidden | orientation" />
 ...
     <uses-permission android:name = "android.permission.INTERNET" />
     <uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" />
エクスポート手順を繰り返し、電話にダウンロードします。
 
      なんらかの理由で、Androidエミュレーターでクラッシュします。明らかにマーマレードとは必ずしも友好的ではありませんが、この例はテストされ、Nexus S、huawei u8110、huawei ideos u8150、Samsung i5500電話で動作します
基礎は、次の情報源から情報を取得した
Google AdMob Ads Androidの基礎
EDKチュートリアル
マーマレードのドキュメント
Marmaladeからの依頼により、Gitにソースコードを投稿しました(HelloWorldの注意が少し変更されました-広告の表示/非表示機能が追加されました)
https://github.com/marmalade/admob