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