LÖVE+ Android + AdMob =友情

かつて彼らのささやかなニーズのためにLuaを学びたいという願望がありました。 しかし、仕様と例を読むだけでは面白くありません。長い間、Android向けに独自のロジックゲームを作成するというアイデアがあり、快適な作業に適したフレームワークの検索が始まりました。



Googleの短いレビューの後、2つの主要な候補が目立ちました: Corona SDKLÖVE 。 私の観点からすると、Corona SDKには間違いなく利点があります。サポート、優れたドキュメント、さまざまなストア/広告/ソーシャルネットワークの簡単な統合(必要に応じて下線)。 それにもかかわらず、SDK自体は有料であり、Linux用のバージョンはありません。 スターターバージョンにはいくつかの制限があります。



Corona SDKの後、LÖVEを詳しく調べました。 まず第一に、私はスタートページの碑文を買収しました:

無料のオープンソースで、Windows、Mac OS X、Linuxで動作します。


LÖVEは、リベラルzlib / libpngライセンスの下でライセンスされています。 つまり、商用目的を含め、あらゆる目的で自由に使用できます。




ロシア語でもかなり良いドキュメントがあります。 Frameforkは簡単にインストールできます。 LÖVEyegorf1を使用してゲームを作成する方法は、 ここで説明しここで続けました 。 そのため、フレームワークの可能性をゆっくりと探索しながら、アプリケーションのプロトタイプを作成しました。 そして、ここから楽しみが始まりました。



質問番号1


Android向けのアプリケーションを実行して、お気に入りのスマートフォンで「奇跡」を最終的にテストする方法は?

この質問に対する答えを見つけると、 Martin Felisによって開発されたlove-android-sdl2プロジェクト至りました 。 著者によると、このプロジェクトはAndroid向けのLÖVEの移植版です。 実際、これはandroid用のSDL 2.0の Luaポートです。

  1. アプリケーションをzipアーカイブにパックし、名前をgame.loveに変更します
  2. アーカイブをプロジェクトアセットフォルダーにコピーします。
  3. LinuxWindowsMac OS Xの指示に従って.apkファイルを収集します プロセスは作成者によって詳細に説明されます。簡単に説明すると、これらはいくつかのステップです。

    1. Android SDK、Android NDKをインストールします
    2. SDKマネージャーを介したAndroid SDK Platoform-tools、Android SDK Built-tools、Android 4.4.2(API 19)およびAndroid Support Libraryのインストール
    3. プロジェクトのあるディレクトリでアセンブリを開始します。 最初にndk-build、次にant debug。


出力には、携帯電話にアップロードして最終的にテストできる.apkファイルがあります! リリースを組み立てて署名する方法については、 こちらをご覧ください

したがって、最初の質問に対する答えが受け取られます。 もちろん、高速または非常に経済的なアプリケーションを作成しても成功する可能性は低くなりますが、Luaまたは軽量ゲームでの高速プロトタイピングにはそれだけです。 ほぼ空の.apkファイルはすぐに約5 mbの重さがあり、アセットのメインアプリケーションはJavaまたはC ++の麻酔薬を軽いショックに陥れる可能性がありますが、後者についてはわかりません。 不要なライブラリを削除することもできますが、これは他の実験のトピックです。



アプリケーションがますます完全な機能を獲得し始めたとき、収益化の可能性について考える時が来ました。 もちろん、怠け者にはまったくオプションがあります。 アプリケーションを固定価格に設定し、モルディブの海辺でそよ風を待ちます。 しかし、私はまだこれを許可することができず、Androidのターゲティングを考えると、何らかの方法で広告を作成する必要があると思いました。 私が対処したことのないAdMob広告サービスとの統合。 ライブラリから得られる「サンドイッチ」の詳細を考えると、それは私にとってさらに興味深いものになりました。



質問番号2


AdMobをアプリケーションに統合する方法は?

公式ヘルプ( enおよびrus )は、このプロセスでEclipseを使用することを提案しているため、次のことが明らかになりました。

  1. Eclipseでアプリケーションをビルドする必要があります。 この部分は、初心者にとって主に役立ちます。 これを行うには、クリーンなlove-android-sdl2プロジェクトをダウンロードします。

    git clone git@bitbucket.org:MartinFelis/love-android-sdl2.git
          
          



  2. Eclipseを開きます(ADTバンドルから使用します)。 新しいワークスペースを作成し、プロジェクトファイル→新規→プロジェクト...→Android→既存のコードからのAndroidプロジェクトを追加します。



    次に、プロジェクトフォルダーへのパスを指定します。 2つのプロジェクトを定義する必要があります:love-android-sdl2とSDLActivity。 完了をクリックします。
  3. プロジェクトプロパティSDLActivityに進みます。 プロジェクトを左クリックして、[ プロパティ ]を選択します 。 次に、Androidで[ ライブラリ]ボックスをオンにします。 OKをクリックします。



  4. プロジェクトプロパティlove-android-sdl2に移動します。 Javaビルドパス->ライブラリタブ-> JARの追加...-> SDLActivity / bin / sdlactivity.jarを見つけます。



  5. 次に、[ ビルダー ]タブに移動し、 [Löve] Generate Internal Scriptsの横のボックスをオフにします。
  6. [別のユーザーとして実行...]→ [ Androidアプリケーション]
  7. プロジェクトが組み立てられるのを待っています。Eclipseは、デバイスを接続するか、エミュレータでlove-android-sdl2.apkを実行するように要求します。




公式のAdMob統合ヘルプを使用した最初の一連の実験は成功しませんでした。 プロジェクト開発者に助けを求めましたが、彼はまだAdMobを自分のプロジェクトに追加しようとしていないこと、そしてその方法にも興味があると答えました。

  1. セクション1から始まる標準ヘルプの指示に従ってください。 プロジェクトでのGoogle Play開発者サービスライブラリの実装 。 唯一の注意点は、google-play-services_libプロジェクトを最初にsdk / extras / google / google_play_services / libproject / google-play-services_libから追加する必要があることです。
  2. 次に、[ プロジェクト]→[クリーン...]→[すべてのプロジェクトをクリーン]→[OK]を選択して、ビルドを再開します。
  3. ファイルlove-android-sdl2 / src / org.love2d.android / GameActivity.javaを開きます
  4. 必要なコードを追加します。

    GameActivity.javaのリスト
     package org.love2d.android; import com.google.android.gms.ads.*; //     import org.libsdl.app.SDLActivity; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import android.app.DownloadManager; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.PowerManager; import android.os.ResultReceiver; import android.util.Log; import android.util.DisplayMetrics; import android.widget.RelativeLayout; import android.widget.Toast; public class GameActivity extends SDLActivity { private static DisplayMetrics metrics = new DisplayMetrics(); private static String gamePath = ""; private static Context context; private AdView adView; @Override protected void onCreate(Bundle savedInstanceState) { Log.d("GameActivity", "started"); context = this.getApplicationContext(); Uri game = this.getIntent().getData(); if (game != null) { if (game.getScheme().equals ("file")) { gamePath = game.getPath(); } else { copyGameToCache (game); } Log.d("GameActivity", "Selected the file: " + getGamePath()); } super.onCreate(savedInstanceState); getWindowManager().getDefaultDisplay().getMetrics(metrics); //   AdView adView = new AdView(mSingleton); adView.setAdSize(AdSize.BANNER); //   adView.setAdUnitId("ca-app-pub-1209995634500922/8885931497"); //  id  //    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); params.addRule(RelativeLayout.ALIGN_PARENT_TOP); params.addRule(RelativeLayout.CENTER_HORIZONTAL); AdRequest adRequest = new AdRequest.Builder().build(); adView.loadAd(adRequest); mLayout.addView(adView, params); } public static String getGamePath() { Log.d ("GameActivity", "called getGamePath(), game path = " + gamePath); return gamePath; } public static DisplayMetrics getMetrics() { return metrics; } public static void openURL (String url) { Log.d ("GameActivity", "opening url = " + url); Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(url)); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } void copyGameToCache (Uri sourceuri) { String destinationFilename = this.getCacheDir().getPath()+"/downloaded.love"; gamePath = destinationFilename; BufferedOutputStream bos = null; try { bos = new BufferedOutputStream(new FileOutputStream(destinationFilename, false)); } catch (IOException e) { Log.d ("GameActivity", "Could not open destination file:" + e.getMessage()); } int chunk_read = 0; int bytes_written = 0; BufferedInputStream bis = null; if (sourceuri.getScheme().equals("content")) { try { bis = new BufferedInputStream(getContentResolver().openInputStream(sourceuri)); } catch (IOException e) { Log.d ("GameActivity", "Could not open game file:" + e.getMessage()); } } else { Log.d ("GameActivity", "Unsupported scheme: " + sourceuri.getScheme()); } if (bis != null) { // actual copying try { byte[] buf = new byte[1024]; chunk_read = bis.read(buf); do { bos.write(buf, 0, chunk_read); bytes_written += chunk_read; chunk_read = bis.read(buf); } while(chunk_read != -1); } catch (IOException e) { Log.d ("GameActivity", "Copying failed:" + e.getMessage()); } } // close streams try { if (bis != null) bis.close(); if (bos != null) bos.close(); } catch (IOException e) { Log.d ("GameActivity", "Copying failed: " + e.getMessage()); } Log.d("GameActivity", "Copied " + bytes_written + " bytes"); } }
          
          







  5. アプリケーションを再構築し、起動し、少し待って上から広告を確認します!







2番目の最も心配な質問に対する答えが見つかりました。 このようにして、LÖVE、Android、AdMobと「友達を作る」ことができました。 私のゲームはほとんど終わったので、早期のリリースを期待しています。 ハッピーエンド。



All Articles