标签:android style blog http color java 使用 os
原地址:http://dong2008hong.blog.163.com/blog/static/4696882720140441353482/
Seems like using a simple Android JAR files inside a Unity Android project is not such a simple thing to do. I finally managed to get AdMob working in an existing Unity Android game. For this example I was using Unity for Windows version 3.5.2 and the latest Android plugin for Eclipse.
I assume that you have a working installation of Eclipse with the Android plugin on your computer. If not, please follow this tutorial to get your workspace ready: Download the Android SDK.
先决条件
我假设你已经装好了Eclipse的Android插件,在您的计算机上安装。如果没有,请按照本教程,让您的工作区准备:下载Android SDK。
在Eclipse/ Android的部分
下载的AdMob的JAR文件,并注册一个帐号,如果你还没有这样做的话。
创建一个新的Android项目。请确保您的Unity Android项目的命名空间的命名空间(包名)是相同的。您可以设置统一的命名空间中,通过Build Settings > Player Settings > Android tab > Other Settings > “Bundle Identifier”。
在我的例子中,我使用的my.android.game。
AdMob的JAR文件复制到/libs文件夹中的项目(您可能需要手动创建该文件夹)。
搜索内统一安装目录中的文件classes.jar的。把这个文件复制到/libs文件夹的Eclipse项目。
如果要测试所显示的广告,我们首先创建一个普通的Android称为AdMobActivity.java的类。这一类的内容看起来像这样:
以下是代码部分:
package my.android.game; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.Gravity; import android.view.ViewGroup.LayoutParams; import android.widget.LinearLayout; import com.admob.android.ads.AdManager; import com.admob.android.ads.AdView; import com.admob.android.ads.SimpleAdListener; public class AdMobActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { Log.i("AdMobTest", "onCreate"); // super (UnityPlayerActivity) will use setContentView() ... super.onCreate(savedInstanceState); // ... so instead of using setContentView(), we call addContentView() // from setupAds() setupAds(); // Add test devices (check the logcat for the ID string of your // device..) // If you want to display test-ads uncomment this line of code and replace YOUR_DEVICE_ID with your device ID which AdMob displays in your logfile. AdManager.setTestDevices( new String[] { "YOUR_DEVICE_ID" } ); } private void setupAds() { // And this is the same, but done programmatically LinearLayout layout = new LinearLayout(this); layout.setOrientation(LinearLayout.VERTICAL); layout.setGravity(Gravity.BOTTOM); addContentView(layout, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); AdView adView = new AdView(this); layout.addView(adView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); adView.setBackgroundColor(0xff000000); adView.setPrimaryTextColor(0xffffffff); adView.setSecondaryTextColor(0xffcccccc); adView.setKeywords("Android game"); adView.setRequestInterval(15); // add listener for easier debugging adView.setAdListener(new SimpleAdListener() { @Override public void onFailedToReceiveAd(com.admob.android.ads.AdView adView) { Log.d("AdListener", "onFailedToReceiveAd: " + adView.toString()); super.onFailedToReceiveAd(adView); } @Override public void onFailedToReceiveRefreshedAd(com.admob.android.ads.AdView adView) { Log.d("AdListener", "onFailedToReceiveRefreshedAd: " + adView.toString()); super.onFailedToReceiveRefreshedAd(adView); } @Override public void onReceiveAd(com.admob.android.ads.AdView adView) { Log.d("AdListener", "onReceiveAd: " + adView.toString()); super.onReceiveAd(adView); } @Override public void onReceiveRefreshedAd(com.admob.android.ads.AdView adView) { Log.d("AdListener", "onReceiveRefreshedAd: " + adView.toString()); super.onReceiveRefreshedAd(adView); } }); adView.requestFreshAd(); } }
更新AndroidManifest.xml 文件,像以下这样
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="my.android.game" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="7" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name="my.android.game.AdMobActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- The application‘s publisher ID assigned by AdMob --> <meta-data android:value="YOUR_PUBLISHER_ID" android:name="ADMOB_PUBLISHER_ID" /> <!-- AdMobActivity definition --> <activity android:name="com.admob.android.ads.AdMobActivity" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:configChanges="orientation|keyboard|keyboardHidden" /> </application> </manifest>
Make sure to replace YOUR_PUBLISHER_ID with your actual AdMob publisher ID.
将其中的YOUR_PUBLISHER_ID 替换成你的Admob发布商ID
package my.android.game; import android.os.Bundle; import android.util.Log; import android.view.Gravity; import android.view.ViewGroup.LayoutParams; import android.widget.LinearLayout; import com.admob.android.ads.AdManager; import com.admob.android.ads.AdView; import com.admob.android.ads.SimpleAdListener; import com.unity3d.player.UnityPlayer; import com.unity3d.player.UnityPlayerActivity; public class AdMobUnityActivity extends UnityPlayerActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } public static void setupAdsStatic() { UnityPlayer.currentActivity.runOnUiThread(new Runnable() { public void run() { // If you want to display test-ads uncomment this line of code and replace YOUR_DEVICE_ID with your device ID which AdMob displays in your logfile. // AdManager.setTestDevices(new String[] { "YOUR_DEVICE_ID" }); // And this is the same, but done programmatically LinearLayout layout = new LinearLayout(UnityPlayer.currentActivity.getApplicationContext()); layout.setOrientation(LinearLayout.VERTICAL); // SET HERE IF YOU WANT THE BANNER TO BE DISPLAYED AT THE TOP OR BOTTOM OF THE SCREEN layout.setGravity(Gravity.BOTTOM); UnityPlayer.currentActivity.addContentView(layout, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); AdView adView = new AdView(UnityPlayer.currentActivity); layout.addView(adView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); adView.setBackgroundColor(0xff000000); adView.setPrimaryTextColor(0xffffffff); adView.setSecondaryTextColor(0xffcccccc); // SET SOME KEYWORDS FOR THE ADS TO DISPLAY adView.setKeywords("Android game"); adView.setRequestInterval(15); // add listener for easier debugging adView.setAdListener(new SimpleAdListener() { @Override public void onFailedToReceiveAd(com.admob.android.ads.AdView adView) { Log.d("AdListener", "onFailedToReceiveAd: " + adView.toString()); super.onFailedToReceiveAd(adView); } @Override public void onFailedToReceiveRefreshedAd(com.admob.android.ads.AdView adView) { Log.d("AdListener", "onFailedToReceiveRefreshedAd: " + adView.toString()); super.onFailedToReceiveRefreshedAd(adView); } @Override public void onReceiveAd(com.admob.android.ads.AdView adView) { Log.d("AdListener", "onReceiveAd: " + adView.toString()); super.onReceiveAd(adView); } @Override public void onReceiveRefreshedAd(com.admob.android.ads.AdView adView) { Log.d("AdListener", "onReceiveRefreshedAd: " + adView.toString()); super.onReceiveRefreshedAd(adView); } }); adView.requestFreshAd(); } }); } }
The class now extends UnityPlayerActivity instead of Activity. Also we created the static function setupAdsStatic() and left the onCreate() function nearly empty. Also we have to wrap the whole content of this function into
这个类继承了UnityPlayerActivity 。我们将创建一个静态方法setupAdsStatic().
UnityPlayer.currentActivity.runOnUiThread(new Runnable() { public void run() { ... } }
otherwise we would get an error or a crash in Unity when we call the function. Also some content inside that function is a bit different in order to make it work with Unity.
重新配置AndroidManifest.xml 文件,增加一个activity标签如下:
<activity android:name="my.android.game.AdMobUnityActivity"></activity>
Now you’re done with the part in Eclipse. Now we have to add that plugin into Unity 3D.
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="my.android.game" android:installLocation="preferExternal" android:versionCode="1" android:versionName="1.0"> <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true"/> <application android:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="true"> <activity android:name="com.unity3d.player.UnityPlayerProxyActivity" android:label="@string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"> </activity> <activity android:name="com.unity3d.player.UnityPlayerActivity" android:label="@string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"> </activity> <activity android:name="com.unity3d.player.UnityPlayerNativeActivity" android:label="@string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"> <meta-data android:name="android.app.lib_name" android:value="unity" /> <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true" /> </activity> <activity android:name="com.unity3d.player.VideoPlayer" android:label="@string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"> </activity> <activity android:name="my.android.game.AdMobUnityActivity"></activity> <!-- The application‘s publisher ID assigned by AdMob --> <meta-data android:value="YOUR_PUBLISHER_ID" android:name="ADMOB_PUBLISHER_ID" /> <!-- AdMobActivity definition --> <activity android:name="com.admob.android.ads.AdMobActivity" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:configChanges="orientation|keyboard|keyboardHidden" /> </application> <!-- PERMISSIONS --> <uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.GET_TASKS"></uses-permission> <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> </manifest>
Make sure the package name (namespace) is correct and identical to the namespace in your Eclipse project. Also change the YOUR_PUBLISHER_ID value with the value of your actual AdMob publisher ID. Note that if you are already using other Android plugins this manifest file might be looking a bit different than in my example.
using UnityEngine; using System.Collections; using System.Collections.Generic; using System.Runtime.InteropServices; using System; public class Startup : MonoBehaviour { public static AndroidJavaClass adMobJavaClass; void Start() { if( Application.platform == RuntimePlatform.Android ) { // Initialize AdMob adMobJavaClass = new AndroidJavaClass("my.android.game.AdMobUnityActivity"); // AdMob display banner adMobJavaClass.CallStatic("setupAdsStatic"); } } }
Unity3d Android程序嵌入Admob广告条,布布扣,bubuko.com
标签:android style blog http color java 使用 os
原文地址:http://www.cnblogs.com/123ing/p/3912019.html