クロスプラットフォームのゲームやアプリケーションを開発する場合、ほとんどの開発者は有料または無料(広告付き)でゲームのAndroidバージョンをリリースします。多くの場合、有料版とライト版の完全版は無料です。
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