unity3d android工程加入最新的有米广告

开此贴的原因是,我用unity3d做了一个小游戏,老板让我加上广告。但是我本人不会java,更不会写android,最后折腾了好几天,查了乱七八糟的好多帖子,要么是使用老的有米SDK,要么是说的不详细,误人子弟。最后我使用此方法,终于成功加上了广告条。按照我的方法,即使不会android开发也没问题。感兴趣的可以看一下。</span>

准备:

1、首先需要有android开发环境:eclipse+android sdk+java,这个就不用我说了,网上有很多详细的帖子;

2、其次要有unity3d 软件;

3、有米SDK:

有了上面的环境,下面就可以正式开始:

1、打开unity3d,新建一个工程,为了演示简单,我建了一个场景,加了一个脚本文件,

2、building:注意下图中红色部分

然后export到英文路径下。比如我的是:D:\test\testYouMi\try

好了,现在我们用unity3d 做的android工程已经完成了,已经没有unity3d 的事情了,下面开始给这个工程加有米广告;

3、打开eclipse,import我们刚才的工程,然后finishing

4、加入有米的SDK,导入jar,直接将YoumiSdk_v5.00_2015-01-08.jar拖到lib文件夹下,copy files ->OK;然后build path->add to path

5、修改UnityPlayerNativeActivity.java;

首先导入包:添加以下代码

import net.youmi.android.AdManager;
import net.youmi.android.banner.AdSize;
import net.youmi.android.banner.AdView;
import net.youmi.android.spot.SpotManager;
import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.FrameLayout;

然后添加代码:

AdManager.getInstance(this).init("da4217c86b4902f1", "1f1d3f0007343c71", false);
		// 加载插播资源
		SpotManager.getInstance(this).loadSpotAds();
		// 插屏出现动画效果,0:ANIM_NONE为无动画,1:ANIM_SIMPLE为简单动画效果,2:ANIM_ADVANCE为高级动画效果
		SpotManager.getInstance(this).setAnimationType(SpotManager.ANIM_ADVANCE);
		// 设置插屏动画的横竖屏展示方式,如果设置了横屏,则在有广告资源的情况下会是优先使用横屏图。
		SpotManager.getInstance(this).setSpotOrientation(
				SpotManager.ORIENTATION_PORTRAIT);

		FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,
				FrameLayout.LayoutParams.WRAP_CONTENT);
		// 设置广告条的悬浮位置
		layoutParams.gravity = Gravity.BOTTOM | Gravity.END; // 这里示例为右下角
		// 实例化广告条
		AdView adView = new AdView(this, AdSize.FIT_SCREEN);
		// 调用Activity的addContentView函数

		this.addContentView(adView, layoutParams);

最终UnityPlayerNativeActivity.java代码如下,我们只添加了两个部分:

package com.chuji.test;

import com.unity3d.player.*;
import android.app.NativeActivity;
import android.content.res.Configuration;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import net.youmi.android.AdManager;
import net.youmi.android.banner.AdSize;
import net.youmi.android.banner.AdView;
import net.youmi.android.spot.SpotManager;
import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.FrameLayout;
public class UnityPlayerNativeActivity extends NativeActivity
{
	protected UnityPlayer mUnityPlayer;		// don't change the name of this variable; referenced from native code

	// Setup activity layout
	@Override protected void onCreate (Bundle savedInstanceState)
	{
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		super.onCreate(savedInstanceState);

		getWindow().takeSurface(null);
		setTheme(android.R.style.Theme_NoTitleBar_Fullscreen);
		getWindow().setFormat(PixelFormat.RGB_565);

		mUnityPlayer = new UnityPlayer(this);
		if (mUnityPlayer.getSettings ().getBoolean ("hide_status_bar", true))
			getWindow ().setFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN,
			                       WindowManager.LayoutParams.FLAG_FULLSCREEN);

		setContentView(mUnityPlayer);
		mUnityPlayer.requestFocus();

		AdManager.getInstance(this).init("da4217c86b4902f1", "1f1d3f0007343c71", false);
		// 加载插播资源
		SpotManager.getInstance(this).loadSpotAds();
		// 插屏出现动画效果,0:ANIM_NONE为无动画,1:ANIM_SIMPLE为简单动画效果,2:ANIM_ADVANCE为高级动画效果
		SpotManager.getInstance(this).setAnimationType(SpotManager.ANIM_ADVANCE);
		// 设置插屏动画的横竖屏展示方式,如果设置了横屏,则在有广告资源的情况下会是优先使用横屏图。
		SpotManager.getInstance(this).setSpotOrientation(
				SpotManager.ORIENTATION_PORTRAIT);

		FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,
				FrameLayout.LayoutParams.WRAP_CONTENT);
		// 设置广告条的悬浮位置
		layoutParams.gravity = Gravity.BOTTOM | Gravity.END; // 这里示例为右下角
		// 实例化广告条
		AdView adView = new AdView(this, AdSize.FIT_SCREEN);
		// 调用Activity的addContentView函数

		this.addContentView(adView, layoutParams);
	}

	// Quit Unity
	@Override protected void onDestroy ()
	{
		mUnityPlayer.quit();
		super.onDestroy();
	}

	// Pause Unity
	@Override protected void onPause()
	{
		super.onPause();
		mUnityPlayer.pause();
	}

	// Resume Unity
	@Override protected void onResume()
	{
		super.onResume();
		mUnityPlayer.resume();
	}

	// This ensures the layout will be correct.
	@Override public void onConfigurationChanged(Configuration newConfig)
	{
		super.onConfigurationChanged(newConfig);
		mUnityPlayer.configurationChanged(newConfig);
	}

	// Notify Unity of the focus change.
	@Override public void onWindowFocusChanged(boolean hasFocus)
	{
		super.onWindowFocusChanged(hasFocus);
		mUnityPlayer.windowFocusChanged(hasFocus);
	}

	// For some reason the multiple keyevent type is not supported by the ndk.
	// Force event injection by overriding dispatchKeyEvent().
	@Override public boolean dispatchKeyEvent(KeyEvent event)
	{
		if (event.getAction() == KeyEvent.ACTION_MULTIPLE)
			return mUnityPlayer.injectEvent(event);
		return super.dispatchKeyEvent(event);
	}

	// Pass any events not handled by (unfocused) views straight to UnityPlayer
	@Override public boolean onKeyUp(int keyCode, KeyEvent event)     { return mUnityPlayer.injectEvent(event); }
	@Override public boolean onKeyDown(int keyCode, KeyEvent event)   { return mUnityPlayer.injectEvent(event); }
	@Override public boolean onTouchEvent(MotionEvent event)          { return mUnityPlayer.injectEvent(event); }
	/*API12*/ public boolean onGenericMotionEvent(MotionEvent event)  { return mUnityPlayer.injectEvent(event); }
}

6、修改AndroidMainfest.xml文件:记住

<application android:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="false">

这句话不允许修改代码,所以我们要删掉android:debuggable="false",成为这样:

<application android:icon="@drawable/app_icon" android:label="@string/app_name" >

加入代码:

<!-- 配置权限 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.GET_TASKS" />

    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />

再继续加入代码:

<!-- 添加必须的组件 -->
        <service android:name="net.youmi.android.AdService" >
        </service>

        <activity
            android:name="net.youmi.android.AdBrowser"
            android:theme="@android:style/Theme.NoTitleBar" >
        </activity>

        <receiver android:name="net.youmi.android.AdReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_ADDED" />
                <action android:name="android.intent.action.PACKAGE_INSTALL" />

                <data android:scheme="package" />
            </intent-filter>
        </receiver>

最后AndroidMainfest.xml代码如下

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.chuji.test" android:theme="@android:style/Theme.NoTitleBar" android:versionName="1.0" android:versionCode="1" android:installLocation="preferExternal">
  <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" />

  <!-- 配置权限 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.GET_TASKS" />

    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />

  <application android:icon="@drawable/app_icon" android:label="@string/app_name" >
    <activity android:label="@string/app_name" android:screenOrientation="fullSensor" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale" android:name="com.chuji.test.UnityPlayerNativeActivity">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
      <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
      <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" />
    </activity>

    <!-- 添加必须的组件 -->
        <service android:name="net.youmi.android.AdService" >
        </service>

        <activity
            android:name="net.youmi.android.AdBrowser"
            android:theme="@android:style/Theme.NoTitleBar" >
        </activity>

        <receiver android:name="net.youmi.android.AdReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_ADDED" />
                <action android:name="android.intent.action.PACKAGE_INSTALL" />

                <data android:scheme="package" />
            </intent-filter>
        </receiver>

  </application>
  <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="20" />
  <uses-feature android:glEsVersion="0x00020000" />
</manifest>

7:、拿真机测试如下:

时间: 2024-10-07 13:19:12

unity3d android工程加入最新的有米广告的相关文章

unity3d插入android有米广告

有米官网:http://www.youmi.net/register?r=MTI0MDg= 国内的广告,我觉得万普和有米还不错,我也只试了这两个,其他的都是看评价的,呵呵~~~首先我们去有米官网注册一个账号http://www.youmi.net/register?r=MTI0MDg=:然后添加一个应用,添加成功后会给你一个ID和密钥,在我们的程序中会用到. 在从官网下载jar包,目前有三个jar包,一个是广告条的,另一个是积分墙的,及推送广告.还有就是导入unity的class.jar. 其他

Android工程导入Unity3D(避坑版)

最近与各种牛逼的项目管理软件打交道,比如SourceTree,要看英文版的才看得懂,中文反而不会用!... 这篇博客适合没怎么接触过安卓的小伙伴们,网上也有很多相关的教程,但是大多都没有具体的操作或则操作不全.安卓知识欠缺的小伙伴很容易迷失方向. 首先,从新建一个安卓工程开始,我用的是Eclipse File------>new file------>Android Application Project. 弹出以上页面,注意红色的划线了,最小的SDK选4.0以上,为什么呢? 因为如果选4.0

如何给unity3d工程加入依赖的android工程

最近在忙着接平台的事,需要接入各种各样的android平台sdk来发布.在接sdk的时候遇到了这样的一个情况,有点麻烦,所以纪录一下. 有些sdk的接入是提供jar包,这样的可以简单地将jar包制作成android plugin,加入到unity工程中,打包成apk输出. 而还有一些sdk,则是提供了一个lib工程.在sdk提供的文档里说明,要在android工程中,通过添加依赖的方式来添加.但是对于unity工程,这个就有点不一样. 经过多次试验,需要步骤: 1. 将sdk工程整个工程目录[注

GJM : Unity3D HIAR -【 快速入门 】 五、导出 Android 工程、应用

导出 Android 工程.应用 在开始之前,请务必先保存您的工程,同时确认您已经安装 Android SDK 和 JDK.安装操作请参考以下链接: 搭建开发环境 Step 1. 设置 Android SDK 和 JDK 路径 在 Unity 中,点击 Edit > Preferences-,在弹出的 Unity Preferences 对话框中点击 External Tools 选项,将 Android SDK 和 JDK 路径分别设置为已安装 SDK 的根目录. Step 2. 选择平台 在

【已解决】unity4.2.0f4 导出Android工程报错:Error building Player: ArgumentException: Illegal characters in path.

你看到的这个文章来自于http://www.cnblogs.com/ayanmw 使用unity3D开发的一个客户端,需要导出为Android工程,然后接入一些第三方android SDK. unity版本 操作系统为: OS 名称: Microsoft Windows 7 旗舰版 OS 版本: 6.1.7601 Service Pack 1 Build 7601 OS 制造商: Microsoft Corporation OS 配置: 独立工作站 OS 构件类型: Multiprocessor

Unity3d Android SDK接入解析(四)通用的Android SDK接入中间件

一.前言 接入Android SDK正式告一段落,在这段时间里面,依次接入了华为.应用宝.小米.360等等大大小小十来个SDK,也算对Unity接入渠道SDK有了较为全面的理解,对各个渠道的坑也算深有体会....在接入过程中时间比较紧张,没办法抽空来进行总结深思.今天正好有空,便对之前的接入SDK的代码进行了一次重构,写了一个比较通用的Unity接入Android SDK的中间件,前人栽树,后人乘凉. 进入正题 如果有对一些只是有疑问的,可以看看我之前的三篇文章: 传送门: Unity3d An

Unity3d Android SDK接入解析(一)

一.前言 论学习心态: 每当进入一个新的工作环境,处于一种新的领域时,人总是会变得急功近利,特别是当任务紧急时,人总是会想着不断的从网上搜寻答案,不断的去寻问他人,十足的拿来主义,竟没有静下来自己思考与尝试过,回头看来,其实很多东西并没有当初认为的那么复杂,只是少了自己的一些总结和深思. 论问题本身: 关于Unity和Android的互相调用,网上的教程太多了,大同小异,抄来抄去.这次我就尝试着慢慢来,讲讲我的理解(简单的我会一笔带过,网上可以轻松找到答案,就不赘述了),希望大家看的时候并不是秉

转:Android开发实践:用脚本编译Android工程

转自: http://ticktick.blog.51cto.com/823160/1365947 一般情况下,我们都是使用Eclipse+ADT插件或者Android studio软件来编译Android工程的,其实,Eclipse或者Android studio仅仅是将一些编译命令封装到可视化界面里而已,通过shell脚本.ADT附带的一些命令以及Ant工具,我们完全可以将Android工程的编译过程自动化,直接通过运行脚本就得到最终的APK文件. Linux下用脚本编译c/c++程序至少需

Android开发环境搭建&amp;第一个Android工程建立

我本人对安装开发环境花费的时间比较注意,一般不会很久,能满足自己当前眼下用就可以了,而不会把所有的资源全部配置上去,这样我会感觉十分浪费时间,然后全部搭建还会出现这样那样的不知所云的问题,看似一个一个解决掉对自己能力有一定的提升,然后对我来说这并没有什么卵用,我用这段时间,基本可以做到Android入门了,而有些人还在琢磨这eclipse怎么配置sdk路径的问题,百度谷歌了一大堆.下面是如何快速搭建Android开发环境,并写出第一个Android应用程序,我从来不写hello world,因为