Unity和android之间的通信(adt方式)

一 Unity调用Andorid方法

 1.1 这里介绍俩种方法,第一种是直接调用currentActivity,就是当前的Activity。

     Unity代码:

           

/*******************
 *  Title:介入android sdk介入
 *  Author:CW
 *  ScriptName:   SDKForAndrodTest
 *  Des:
 ******************/
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class SDKForAndrodTest : MonoBehaviour 
{

    private AndroidJavaClass jc = null;
    private AndroidJavaObject jo = null;

    void Awake()
    {
        Debug.Log("这里是Unity的Awake");
        //得到android里面的类
        jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        //得到当前的Anorid的Activity对象
        jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
       
    }
    void OnGUI()
    {
        if(GUI.Button(new Rect(0,0,100,100),""))
        {
            if(jo!=null)
            {
                //test是android里面的方法名称
                jo.Call("test", "这是来自Unity的消息");
            }
        }
    }
}

   android里面的代码:

     新建一个GameMainActivity类继承UnityPlayerActivity,并且重写onCreate方法。

package com.CW.AndroidSDK;

import com.unity3d.player.UnityPlayer;

import android.graphics.PixelFormat;
import android.os.Bundle;
import android.text.style.SuperscriptSpan;
import android.util.Log;
import android.view.Window;

public class GameMainActivity  extends UnityPlayerActivity
{
	@Override protected void onCreate (Bundle savedInstanceState)
	{
	  super.onCreate(savedInstanceState);
	}
       //这里是Untiy调用的方法
	private void test(String s)
	{
		Log.i("unity", "unity 调用了 java 方法:"+s);
	}
}

  之后修改AndroidManifest文件,将当前的activity改成GameMainActivity

2 第二种方法是直接调用自己新建的Activity方法(这种我在测试的时候好像只能调用android里面的静态方法)

  在adt里面新建一个包和一个类如下:

 SDKAPI里面写上Unity要调用的方法。

package com.sdk.api;

import android.R.integer;
import android.util.Log;

public class SDKAPI {

	private static int test(String s)
	{
		Log.i("unity", "unity 调用了 java 方法:"+s);
		return 0;
	}
}

Unity里面的代码:

/*******************
 *  Title:
 *  Author:CW
 *  ScriptName:   SDKForAndrodTest2
 *  Des:
 ******************/
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class SDKForAndrodTest2 : MonoBehaviour {

    private AndroidJavaClass jc = null;

	// Use this for initialization
	void Start () {
        //包名.类名
        jc = new AndroidJavaClass("com.sdk.api.SDKAPI");
        Debug.Log("这里是Unity的Awake");
	}

    void OnGUI()
    {
        if (GUI.Button(new Rect(0, 0, 100, 100), ""))
        {
            if (jc != null)
            {
                jc.CallStatic<int>("test", "这是来自Unity的消息");
            }
        }
    }

    private void CallBack(string str)
    {
        Debug.Log("这里是Android的回调:" + str);
    }
}

 真机调试的时候都打印出出对应的log信息

二 android里面调用Unity的方法

  这个很简单,调用UnityPlayer.UnitySendMessage方法就可以了,值得注意的是传参数的时候只能传一个字符串过去。

package com.sdk.api;
import org.json.JSONException;
import org.json.JSONObject;

import com.CW.AndroidSDK3.UnityPlayerActivity;
import com.unity3d.player.UnityPlayer;

import android.R.integer;
import android.util.Log;

public class SDKAPI {

	private static int test(String s)
	{
		Log.i("unity", "unity 调用了 java 方法:"+s);
		JSONObject jsonObject=new JSONObject();
		try {
			jsonObject.put("Key", "这是Android发送给Unity的消息");
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//回调给Unity
		//第一个参数是游戏物体的名称
		//第二个参数是方法名
		//第三个参数是发送的消息字符串
		UnityPlayer.UnitySendMessage("SDKForAndrodTest", "CallBack", jsonObject.toString());
		return 0;
		
	}
}

 打印的Log的信息如下:

 三 编写框架实现SDK的接入

 1 Untiy端

1.1 抽象出基类

/*******************
 *  Title:SDK接入
 *  Author:CW
 *  ScriptName:   SDKBase
 *  Des:SDK基类
 ******************/
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class SDKBase
{
    /// <summary>
    /// 初始化函数
    /// </summary>
    /// <param name="flag"></param>
    public virtual void Init(int flag=0) { }
    /// <summary>
    /// 登入
    /// </summary>
    public virtual void Login() {}
    /// <summary>
    /// 登出
    /// </summary>
    public virtual void Logout() { }
    /// <summary>
    /// 支付
    /// </summary>
    public virtual void Pay(int num,string orderId ) { }
    /// <summary>
    /// 游戏中心
    /// </summary>
    public virtual void GameCenter() { }

}

 1.2 实现Android的SDK

/*******************
 *  Title:三国无双案例
 *  Author:CW
 *  ScriptName:   SDKForAndroid
 *  Des:接入安卓SDK
 ******************/
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class SDKForAndroid:SDKBase 
{
#if UNITY_ANDROID && !UNITY_EDITOR
    private AndroidJavaClass _jc;
    public SDKForAndroid():base()
    {
        _jc = new AndroidJavaClass("com.sdk.SDKAPI.SDKAPI");
    }
    public override void Init(int flag = 0)
    {
       if(_jc!=null)
        {
            _jc.CallStatic("Init",flag);
            Debug.Log("初始化SDK");
        }
    }

   public override void Login()
   {
       if (_jc != null)
       {
           _jc.CallStatic("Login");
       }
   }

    public override void Logout()
    {
        if (_jc != null)
        {
            _jc.CallStatic("Logout");
        }
    }

    public override void Pay(int num,string orderId)
    {
        if (_jc != null)
        {
            _jc.CallStatic("Pay",num,orderId);
        }
    }

    public override void GameCenter()
    {
        if (_jc != null)
        {
            _jc.CallStatic("GameCenter");
        }
    }

#endif
}

 1.3管理这些SDK

/*******************
 *  Title:SDK接入
 *  Author:CW
 *  ScriptName:   SDKMgr
 *  Des:SDK管理器
 ******************/
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class SDKMgr : MonoBehaviour 
{
    /// <summary>
    /// 单利
    /// </summary>
    private static SDKMgr _instance;
    /// <summary>
    /// 得到实例
    /// </summary>
    public static SDKMgr Instance
    {
        get
        {
            if(_instance==null)
            {
                GameObject tmpGo = new GameObject("SDKMgr");
                _instance = tmpGo.AddComponent<SDKMgr>();
            }
            return _instance;
        }
    }

    private SDKBase _sdkAPI;
    void Awake()
    {
#if UNITY_EDITOR
        _sdkAPI = new SDKBase();
#elif UNITY_ANDROID
         Debug.Log("Awake");
        _sdkAPI = new SDKForAndroid();
#endif
    }

    /// <summary>
    /// 初始化函数
    /// </summary>
    /// <param name="flag"></param>
    public  void Init(int flag = 0) 
    {
        _sdkAPI.Init(flag);
    }
    /// <summary>
    /// 登入
    /// </summary>
    public  void Login(LoginListener listener)
    {
        _currentListner = listener;
        _sdkAPI.Login();
    }
    /// <summary>
    /// 登出
    /// </summary>
    public  void Logout()
    {
        _sdkAPI.Logout();
    }
    /// <summary>
    /// 支付
    /// </summary>
    public  void Pay(PayData payData) 
    {
        CurrentPayData = payData;
        _sdkAPI.Pay(CurrentPayData.Num,CurrentPayData.OrderID);
    }
    /// <summary>
    /// 游戏中心
    /// </summary>
    public  void GameCenter()
    {
        _sdkAPI.GameCenter();
    }


    public PayData CurrentPayData;
    /// <summary>
    /// 支付数据
    /// </summary>
    public class PayData
    {
        /// <summary>
        /// 支付数量
        /// </summary>
        public int Num;
        /// <summary>
        /// 订单号
        /// </summary>
        public string OrderID;

        public PayData(int num,string orderId)
        {
            Num=num;
            OrderID=orderId;
        }
    }
    private LoginListener _currentListner;
    public interface LoginListener
    {
        void OnSucess(string uid);
        void OnFail();
        void OnCancel();
    }

    #region Android回调Unity
    private void LogicCallBack(string jsonObj)
    {
        if(string.IsNullOrEmpty(jsonObj))
        {
            if(_currentListner!=null)
            {
                _currentListner.OnFail();
            }
            else
            {
                Debug.LogError("_currentListner is null");
            }
        }
        else if(jsonObj.Equals("-1"))
        {
            if (_currentListner != null)
            {
                _currentListner.OnCancel();
            }
            else
            {
                Debug.LogError("_currentListner is null");
            }
        }
        else
        {
            if (_currentListner != null)
            {
                _currentListner.OnSucess(jsonObj);
            }
            else
            {
                Debug.LogError("_currentListner is null");
            }
        }
    }
    #endregion
}

1.4 Unity端的测试脚本

/*******************
 *  Title:三国无双案例
 *  Author:CW
 *  ScriptName:   SDKTest
 *  Des:
 ******************/
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class SDKTest : MonoBehaviour {

	
    void OnGUI()
    {
        if(GUI.Button(new Rect(0,0,100,50),"Init"))
        {
           SDKMgr.Instance.Init();
        }else if(GUI.Button(new Rect(0,60,100,50),"Login"))
        {
            SDKMgr.Instance.Login(new LoginCallBack());
        }
        else if (GUI.Button(new Rect(0, 120, 100, 50), "Logout"))
        {
            SDKMgr.Instance.Logout();
        }
        else if (GUI.Button(new Rect(0, 190, 100, 50), "Pay"))
        {

            SDKMgr.Instance.Pay(new SDKMgr.PayData(5,"测试订单ID"));
        }
        else if (GUI.Button(new Rect(0, 270, 100, 50), "GameCenter"))
        {
            SDKMgr.Instance.GameCenter();
        }
    }

    public class LoginCallBack:SDKMgr.LoginListener
    {

        public void OnSucess(string uid)
        {
            Debug.Log("登录成功:"+uid);   
        }

        public void OnFail()
        {
            Debug.Log("登录失败");   
        }

        public void OnCancel()
        {
            Debug.Log("取消登录");   
        }
    }
}

 2 ADT方面的代码(以接入百度SDK为例,详细的接入百度SDK步骤可以看百度SDK的接入文档,这里只说明接入的流程)

   2.1 把untiy的工程导出Android工程(不会百度一下就出来了),然后创建出负责和adt通信的包和类名,并且导入百度SDK的库文件。我的目录结构如下:

  2.2将我们的项目去引用这个库文件

 

  2.3下面我们编写SDKAPI这个类,代码如下:

package com.sdk.SDKAPI;

import android.R.integer;

import com.CW.AndroidSDK.MainActivity;

/*这里的方法要和Unity里面的要对应
 * */
public class SDKAPI {

	/*
	 * SDK初始化
	 * */
    public static  void Init(int flag) 
    {
        MainActivity.myHandler.sendEmptyMessage(SDKUtility.E_SDKFunType.INIT.ordinal());
    }
    /*
     * 登入
     * */
    public static void Login()
    {
    	 MainActivity.myHandler.sendEmptyMessage(SDKUtility.E_SDKFunType.LOGIN.ordinal());
    }
    /*
     * 登出
     * */
    public static void Logout()
    {
    	 MainActivity.myHandler.sendEmptyMessage(SDKUtility.E_SDKFunType.LOGOUT.ordinal());
    }
    
    public static PayData currPayData;
   /*
    * 支付
    * */
    public static void Pay(int num,String orderId) 
    {
    	 currPayData=new PayData(num,orderId);
    	 MainActivity.myHandler.sendEmptyMessage(SDKUtility.E_SDKFunType.PAY.ordinal());
    }
   /*
    * 游戏中心
    * */
    public static void GameCenter()
    {
    	 MainActivity.myHandler.sendEmptyMessage(SDKUtility.E_SDKFunType.GAMECENTER.ordinal());
    }
    /*
     * 支付数据
     * */
    public static  class PayData
    {
    	/*金币分
    	 * */
    	public int num;
    	/*订单号
    	 * */
    	public String orderIdString;
    	
    	public PayData(int num,String orderId)
    	{
    		this.num=num;
    		this.orderIdString=orderId;
    	}
    }
}

   2.4编写MainActivity,这个类必须继承UnityPlayerActivity并且重写onCreate方法。(这样做是百度SDK文档要求的)

  这个类主要的作用去调用百度SDK里面的库文件,所以有些方法是文档里面要求的。而我们的SDKAPI类就是去调用这个类里面的一些方法,从而实现交互,下面是这个类的主要代码:

package com.CW.AndroidSDK;

import java.util.UUID;

import android.R.string;
import android.app.Activity;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
import android.view.Window;
import android.widget.Toast;

import com.baidu.gamesdk.ActivityAdPage;
import com.baidu.gamesdk.ActivityAdPage.Listener;
import com.baidu.gamesdk.ActivityAnalytics;
import com.baidu.gamesdk.BDGameSDK;
import com.baidu.gamesdk.BDGameSDKSetting;
import com.baidu.gamesdk.BDGameSDKSetting.Domain;
import com.baidu.gamesdk.IResponse;
import com.baidu.gamesdk.ResultCode;
import com.baidu.platformsdk.PayOrderInfo;
import com.sdk.SDKAPI.SDKAPI;
import com.sdk.SDKAPI.SDKUtility;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;


public class MainActivity extends UnityPlayerActivity
{
	public static Activity CurrentActivity;
	public static MyHandler myHandler;//百度SDK
	private ActivityAnalytics mActivityAnalytics;//百度SDK
	private ActivityAdPage mActivityAdPage;
	@Override protected void onCreate (Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		 CurrentActivity=this;
		  mActivityAnalytics = new ActivityAnalytics(this);
		  mActivityAdPage = new ActivityAdPage(this, new Listener(){
				@Override
				public void onClose() {
					//TODO 关闭暂停页面,CP可以让玩家继续玩游戏
					Toast.makeText(getApplicationContext(), "继续游戏", Toast.LENGTH_LONG).show();
				}
				
			}); 
		myHandler=new MyHandler();
		
	}
	@Override protected void onDestroy()
	{
		BDGameSDK.destroy();
		mUnityPlayer.quit();
		super.onDestroy();
	}
	@Override
	protected void onResume() { 
		super.onResume(); 
		mActivityAdPage.onResume(); 
		mActivityAnalytics.onResume();
		
	}
	
	
	@Override
	protected void onStop() { 
		super.onStop();
		mActivityAdPage.onStop();
	}
	
	@Override
	protected void onPause() { 
		super.onPause();
		mActivityAdPage.onPause();
		mActivityAnalytics.onPause();
		
	}
	@Override
	public void finish() {
		// TODO Auto-generated method stub
		super.finish();
		BDGameSDK.closeFloatView(this);//关掉悬浮框
	}
	
	
	
	public class MyHandler extends Handler
	{
		public MyHandler()
		{
			
		}
		 public MyHandler(Looper L) {
	            super(L);
	        }

	        /*
	         * 子类必须重写该方法,接受该消息
	         * */
	        @Override
	        public void handleMessage(Message msg)
			{
				if(msg.what==SDKUtility.E_SDKFunType.INIT.ordinal())
				{
					initBDGameSDK();
					Log.i("Unity", "调用了SDK初始化方法");
				}else if(msg.what==SDKUtility.E_SDKFunType.LOGIN.ordinal())
				{
					BDSDKLogic();
					Log.i("Unity", "调用了SDK登入方法");
				}else if(msg.what==SDKUtility.E_SDKFunType.LOGOUT.ordinal())
				{
					BDSDKLogOut();
					Log.i("Unity", "调用了SDK登出方法");
				}else if(msg.what==SDKUtility.E_SDKFunType.PAY.ordinal())
				{
					BDSDKPay(SDKAPI.currPayData.num,SDKAPI.currPayData.orderIdString);
					Log.i("Unity", "调用了SDK支付方法");
				}else if(msg.what==SDKUtility.E_SDKFunType.GAMECENTER.ordinal())
				{
					Log.i("Unity", "调用了SDK游戏中心方法");
				}
				super.handleMessage(msg);
				Log.i("Unity", "-----");
			}
	}
	
	
	
	
	
	
	/*public static Handler MyHandler =new Handler()
	{
		public void handleMessage(Message msg)
		{
			if(msg.what==SDKUtility.E_SDKFunType.INIT.ordinal())
			{
			
				Log.i("Unity", "调用了SDK初始化方法");
			}else if(msg.what==SDKUtility.E_SDKFunType.LOGIN.ordinal())
			{
				Log.i("Unity", "调用了SDK登入方法");
			}else if(msg.what==SDKUtility.E_SDKFunType.LOGOUT.ordinal())
			{
				Log.i("Unity", "调用了SDK登出方法");
			}else if(msg.what==SDKUtility.E_SDKFunType.PAY.ordinal())
			{
				Log.i("Unity", "调用了SDK支付方法");
			}else if(msg.what==SDKUtility.E_SDKFunType.GAMECENTER.ordinal())
			{
				Log.i("Unity", "调用了SDK游戏中心方法");
			}
			super.handleMessage(msg);
			Log.i("Unity", "-----");
		}
		
	};*/
	
	 private void setSuspendWindowChangeAccountListener(){//设置切换账号事件监听(个人中心界面切换中心)
			BDGameSDK.setSuspendWindowChangeAccountListener(new IResponse<Void>(){

				@Override
				public void onResponse(int resultCode, String resultDesc,
						Void extraData) { 
					 switch(resultCode){
					 case ResultCode.LOGIN_SUCCESS:
						 //TODO 登录成功,不管之前是什么情况,游戏内都要切换成新的用户
						 //返回主界面,重新刷新
						 Toast.makeText(getApplicationContext(), "鐧诲綍鎴愬姛", Toast.LENGTH_LONG).show();
						 break;
					 case ResultCode.LOGIN_FAIL:
						//TODO 登录失败,游戏内部之前如果是已经被登录的,要清楚自己记录的登录状态,设置成未登录。如果之前为登录,不用处理
						 Toast.makeText(getApplicationContext(), "鐧诲綍澶辫触", Toast.LENGTH_LONG).show();
						 break;
					 case ResultCode.LOGIN_CANCEL:					 
						//TODO 取消,操作前后的登录状态没变换
						 break; 
						 
					 } 
				}
				
			});
		}
	/*
	 * 初始化SDK
	 * */
	private void initBDGameSDK()
	{
		BDGameSDKSetting mBDGameSDKSetting = new BDGameSDKSetting();
		mBDGameSDKSetting.setAppID(3067515);//APPID
		mBDGameSDKSetting.setAppKey("f3Os4GAOqxgm79GqbnkT9L8T");//APPKEY
		mBDGameSDKSetting.setDomain(Domain.DEBUG);//
		mBDGameSDKSetting.setOrientation(BDGameSDKSetting.Orientation.PORTRAIT);
		 
		BDGameSDK.init(this, mBDGameSDKSetting, new IResponse<Void>(){

			@Override
			public void onResponse(int resultCode, String resultDesc,
					Void extraData) {
				switch(resultCode){
				case ResultCode.INIT_SUCCESS:
					//初始化成功
					
					break;
					
				case ResultCode.INIT_FAIL:
					//初始化失败
					
				default:
					Toast.makeText(CurrentActivity, "启动失败", Toast.LENGTH_LONG).show();
					finish();
					
				}
				
			}
			
		}); 
	}
	/*
	 * 登录
	 * */
	 public void BDSDKLogic()
	 {
		   BDGameSDK.login(new IResponse<Void>() {
				
				@Override
				public void onResponse(int resultCode, String resultDesc, Void extraData) { 
					Log.d("login", "this resultCode is " + resultCode);
					String hint = "";
					switch(resultCode){
					case ResultCode.LOGIN_SUCCESS:
						hint="登录成功";
						//拿到用户ID
					    String uid=	BDGameSDK.getLoginUid();
					    //UnityPlayer.UnitySendMessage("SDKMgr", "BDLoginCallBack", uid);
					    SDKUtility.SendMsgToUnity(SDKUtility.CallBackFunName.LOGINCALLBACK_STRING, uid);
					    //显示悬浮按钮
					    BDGameSDK.showFloatView(CurrentActivity);
					    //切换账号
					    setSuspendWindowChangeAccountListener();
						break; 
					case ResultCode.LOGIN_CANCEL:
						 SDKUtility.SendMsgToUnity(SDKUtility.CallBackFunName.LOGINCALLBACK_STRING, "-1");
						hint="取消登录";
						break;
					case ResultCode.LOGIN_FAIL:
						 SDKUtility.SendMsgToUnity(SDKUtility.CallBackFunName.LOGINCALLBACK_STRING, "");
						hint="登录失败";
					default:
						SDKUtility.SendMsgToUnity(SDKUtility.CallBackFunName.LOGINCALLBACK_STRING, "");
						hint="登录失败";
					} 
					Toast.makeText(getApplicationContext(), hint, Toast.LENGTH_LONG).show(); 
				}
			});
	   }
	  /*
	  * 登出
	  * */
	   public void BDSDKLogOut()
	   {
		   BDGameSDK.logout();
	   }
	   /*支付(定额支付)
	    * */
	   public void BDSDKPay(int num,String oderId)
	   {
		   PayOrderInfo payOrderInfo = buildOrderInfo(num,oderId);
			if(payOrderInfo == null){
				return;
			}
			
			BDGameSDK.pay(payOrderInfo, null, 
					new IResponse<PayOrderInfo>(){
				  
						@Override
						public void onResponse(int resultCode, String resultDesc,
								PayOrderInfo extraData) 
						{
							String resultStr = "";
							switch(resultCode){
							case ResultCode.PAY_SUCCESS:
								resultStr = "支付成功:" + resultDesc;
								break;
							case ResultCode.PAY_CANCEL:
								resultStr = "取消支付";
								break;	
							case ResultCode.PAY_FAIL:
								resultStr = "支付失败" + resultDesc;
								break;	
							case ResultCode.PAY_SUBMIT_ORDER:
								resultStr ="支付失败"; 
								break;	
							}
							Toast.makeText(getApplicationContext(), resultStr, Toast.LENGTH_LONG).show();
							 
						}
				
			});
	   }
	   /*
	    * 构建订单信息
	    * 总金额
	    * 订单号
	    * */
	   public PayOrderInfo buildOrderInfo(int amount,String oderId){
			String cpOrderId = UUID.randomUUID().toString();//
			String goodsName = "金币";
			String totalAmount = String.valueOf(amount);
			int ratio = 1;
			String extInfo = oderId;
			
			if(TextUtils.isEmpty(totalAmount)){
				totalAmount = "0";
			}
			 
			
			PayOrderInfo payOrderInfo = new PayOrderInfo();
			payOrderInfo.setCooperatorOrderSerial(cpOrderId);
			payOrderInfo.setProductName(goodsName); 
			long p = Long.parseLong(totalAmount); 
			payOrderInfo.setTotalPriceCent(p);
			payOrderInfo.setRatio(ratio);
			payOrderInfo.setExtInfo(extInfo);
			
			return payOrderInfo;
		}
	   

}

 注意我们要修改manifest文件。将Application里面的Android:name 改成

 android:name="com.CW.BaiDuSDKPro1.GameApplication"

 Application里面的Activity:name改成:

 android:name="com.CW.AndroidSDK.MainActivity"

 除了这些之外还有一些service和uses-permission还有其他的acrivity按照百度SDK的文档要求全部复制进去

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.CW.BaiDuSDKPro1" 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" />
  <application android:theme="@style/UnityThemeSelector" android:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="false" android:isGame="true" android:banner="@drawable/app_banner" android:name="com.CW.BaiDuSDKPro1.GameApplication">
    <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.CW.AndroidSDK.MainActivity">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
      </intent-filter>
      <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
    </activity>
      <!-- ↓↓↓ SDK ↓↓↓ -->


        <!-- 0-百度 1-多酷 2-91 -->

        <meta-data android:name="BDPlatformType" android:value="0" />
        
        
        <meta-data android:name="BDGameVersion" android:value="3.2.0" />
        
          <activity
            android:name="com.baidu.platformsdk.LoginActivity"
            android:configChanges="orientation|navigation|screenSize|keyboard|keyboardHidden"
            android:exported="false"
            android:excludeFromRecents="true"
            android:theme="@style/bdp_dialog_style_fullscreen"/>
        <activity
            android:name="com.baidu.platformsdk.AssistActivity"
            android:configChanges="orientation|navigation|screenSize|keyboard|keyboardHidden"
            android:exported="false"
            android:excludeFromRecents="true"
            android:theme="@style/bdp_dialog_style_fullscreen"/> 
        <activity
            android:name="com.baidu.platformsdk.BindPhoneActivity"
            android:configChanges="orientation|navigation|screenSize|keyboard|keyboardHidden"
            android:exported="false"
            android:excludeFromRecents="true"
            android:theme="@style/bdp_dialog_style_fullscreen"/>
        
        <activity
            android:name="com.baidu.platformsdk.CashierDeskActivity"
            android:configChanges="orientation|navigation|screenSize|keyboard|keyboardHidden"
            android:exported="false" 
            android:theme="@style/bdp_dialog_style_fullscreen"
            android:windowSoftInputMode="adjustPan"/>
        
        <activity
            android:name="com.baidu.platformsdk.WebActivity"
            android:configChanges="orientation|navigation|screenSize|keyboard|keyboardHidden"
            android:exported="false" 
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
            android:windowSoftInputMode="adjustPan"/>

        
        <activity
            android:name="com.baidu.platformsdk.ModifyPasswordActivity"
            android:configChanges="orientation|navigation|screenSize|keyboard|keyboardHidden"
            android:exported="false"
            android:excludeFromRecents="true"
            android:theme="@style/bdp_dialog_style_fullscreen"/>
        <activity
            android:name="com.baidu.platformsdk.ThirdPartyLoginActivity"
            android:configChanges="orientation|navigation|screenSize|keyboard|keyboardHidden"
            android:excludeFromRecents="true"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
            android:exported="false"/>
        <activity
            android:name="com.baidu.platformsdk.VisitorBindActivity"
            android:configChanges="orientation|navigation|screenSize|keyboard|keyboardHidden"
            android:exported="false"
            android:excludeFromRecents="true"
            android:theme="@style/bdp_dialog_style_fullscreen"/> 
        <activity
            android:name="com.baidu.platformsdk.BaiduBeanDetailActivity"
            android:configChanges="orientation|navigation|screenSize|keyboard|keyboardHidden"
            android:exported="false"
            android:windowSoftInputMode="adjustPan"
            android:theme="@style/bdp_dialog_style_fullscreen" /> 
        <activity
            android:name="com.baidu.platformsdk.OrderDetailActivity"
            android:configChanges="orientation|navigation|screenSize|keyboard|keyboardHidden"
            android:exported="false"
            android:windowSoftInputMode="adjustPan"
            android:theme="@style/bdp_dialog_style_fullscreen" />
         
        
        <activity
            android:name="com.baidu.platformsdk.SapiWebActivity"
            android:configChanges="orientation|navigation|screenSize|keyboard|keyboardHidden"
            android:exported="false"
            android:windowSoftInputMode="adjustPan"
            android:theme="@style/bdp_dialog_style_fullscreen" />
        <activity
            android:name="com.baidu.platformsdk.SapiLoginProxyActivity"
            android:configChanges="orientation|navigation|screenSize|keyboard|keyboardHidden"
            android:exported="false"
            android:windowSoftInputMode="adjustPan"
            android:theme="@style/bdp_dialog_style_fullscreen" />
        
        <service
            android:name="com.baidu.platformsdk.BDPlatformService"
            android:exported="false" />

        <!-- ↑↑↑ SDK ↑↑↑ -->


        <!-- ↓↓↓ 百度钱包 ↓↓↓ -->
        <activity
            android:name="com.baidu.android.pay.ui.WelcomeActivity"
            android:configChanges="keyboardHidden|navigation|orientation|screenSize"
            android:excludeFromRecents="true"
            android:exported="false"
            android:theme="@style/EbpayThemeActivityWelcome"
            android:windowSoftInputMode="stateHidden" />
        <activity
            android:name="com.baidu.android.pay.ui.PayResultActivity"
            android:configChanges="keyboardHidden|navigation|orientation|screenSize"
            android:excludeFromRecents="true"
            android:exported="false"
            android:theme="@style/EbpayThemeActivit"
            android:windowSoftInputMode="stateHidden" >
        </activity>
        <activity
            android:name="com.baidu.android.pay.ui.PwdCheckActivity"
            android:configChanges="keyboardHidden|navigation|orientation|screenSize"
            android:excludeFromRecents="true"
            android:exported="false"
            android:theme="@style/EbpayThemeActivit"
            android:windowSoftInputMode="stateVisible" >
        </activity>
        <activity
            android:name="com.baidu.android.pay.ui.PwdSetActivity"
            android:configChanges="keyboardHidden|navigation|orientation|screenSize"
            android:excludeFromRecents="true"
            android:exported="false"
            android:theme="@style/EbpayThemeActivit"
            android:windowSoftInputMode="stateVisible" >
        </activity>
        <activity
            android:name="com.baidu.android.pay.ui.PwdConfirmActivity"
            android:configChanges="keyboardHidden|navigation|orientation|screenSize"
            android:excludeFromRecents="true"
            android:exported="false"
            android:theme="@style/EbpayThemeActivit"
            android:windowSoftInputMode="stateVisible" >
        </activity>
        <activity
            android:name="com.baidu.android.pay.ui.PwdPayActivity"
            android:configChanges="keyboardHidden|navigation|orientation|screenSize"
            android:excludeFromRecents="true"
            android:exported="false"
            android:theme="@style/EbpayThemeActivitTranslucent"
            android:windowSoftInputMode="stateVisible" />
        <activity
            android:name="com.baidu.android.pay.ui.PwdPaySmsActivity"
            android:configChanges="keyboardHidden|navigation|orientation|screenSize"
            android:excludeFromRecents="true"
            android:exported="false"
            android:theme="@style/EbpayThemeActivitTranslucent"
            android:windowSoftInputMode="stateHidden" />
        <activity
            android:name="com.baidu.android.pay.ui.WebViewActivity"
            android:configChanges="keyboardHidden|navigation|orientation|screenSize"
            android:excludeFromRecents="true"
            android:exported="false"
            android:theme="@style/EbpayThemeActivit"
            android:windowSoftInputMode="stateHidden" >
        </activity>
        <activity
            android:name="com.baidu.android.pay.ui.BindFirstActivity"
            android:configChanges="keyboardHidden|navigation|orientation|screenSize"
            android:excludeFromRecents="true"
            android:exported="false"
            android:theme="@style/EbpayThemeActivit"
            android:windowSoftInputMode="adjustResize" />
        <activity
            android:name="com.baidu.android.pay.ui.BindSecondActivity"
            android:configChanges="keyboardHidden|navigation|orientation|screenSize"
            android:excludeFromRecents="true"
            android:exported="false"
            android:theme="@style/EbpayThemeActivit"
            android:windowSoftInputMode="stateHidden" />
        <activity
            android:name="com.baidu.android.pay.ui.BindSecondCreditAcitvity"
            android:configChanges="keyboardHidden|navigation|orientation|screenSize"
            android:excludeFromRecents="true"
            android:exported="false"
            android:theme="@style/EbpayThemeActivit"
            android:windowSoftInputMode="stateHidden" />
        <activity
            android:name="com.baidu.android.pay.ui.BindSecondCredit2Activity"
            android:configChanges="keyboardHidden|navigation|orientation|screenSize"
            android:excludeFromRecents="true"
            android:exported="false"
            android:theme="@style/EbpayThemeActivit"
            android:windowSoftInputMode="stateHidden" />
        <activity
            android:name="com.baidu.android.pay.ui.BindThirdActivity"
            android:configChanges="keyboardHidden|navigation|orientation|screenSize"
            android:excludeFromRecents="true"
            android:exported="false"
            android:theme="@style/EbpayThemeActivit"
            android:windowSoftInputMode="adjustResize" />
        <activity
            android:name="com.baidu.android.pay.ui.SelectBindCardActivity"
            android:configChanges="keyboardHidden|navigation|orientation|screenSize"
            android:excludeFromRecents="true"
            android:exported="false"
            android:theme="@style/EbpayThemeActivit"
            android:windowSoftInputMode="stateHidden" />
        <activity
            android:name="com.baidu.android.pay.ui.LoginActivity"
            android:configChanges="keyboardHidden|navigation|orientation|screenSize"
            android:excludeFromRecents="true"
            android:exported="false"
            android:theme="@style/EbpayThemeActivit"
            android:windowSoftInputMode="stateHidden" />
        <activity
            android:name="com.baidu.android.pay.ui.PassNormalizeActivity"
            android:configChanges="keyboardHidden|navigation|orientation|screenSize"
            android:excludeFromRecents="true"
            android:exported="false"
            android:theme="@style/EbpayThemeActivit"
            android:windowSoftInputMode="stateHidden" />
        <activity
            android:name="com.baidu.android.pay.ui.OrderHomeActivity"
            android:configChanges="keyboardHidden|navigation|orientation|screenSize"
            android:excludeFromRecents="true"
            android:exported="false"
            android:theme="@style/EbpayThemeActivit"
            android:windowSoftInputMode="stateHidden" />
             

        <!-- ↑↑↑ 百度钱包 ↑↑↑ -->
        
        <!-- ↓↓↓ passport ↓↓↓ -->
        <activity
            android:name="com.baidu.sapi2.utils.LoginProtectAcitivity"
            android:screenOrientation="portrait"
            android:theme="@style/bdp_SapiTheme"
            android:windowSoftInputMode="adjustPan" />
        <!-- ↑↑↑ passport ↑↑↑ -->


        <!-- ↓↓↓ 银联SDK ↓↓↓ -->
        <activity android:name="com.unionpay.uppay.PayActivity"
            android:screenOrientation="landscape" />
        <!-- ↑↑↑ 银联SDK ↑↑↑ -->
        
        <!-- ↓↓↓ 支付宝插件 ↓↓↓ -->
        <activity android:name="com.alipay.sdk.app.H5PayActivity"
				   android:configChanges="orientation|keyboardHidden|navigation"
				   android:exported="false"
				   android:screenOrientation="behind" />
        <activity android:name="com.alipay.sdk.auth.AuthActivity"
				   android:configChanges="orientation|keyboardHidden|navigation"
				   android:exported="false"
				   android:screenOrientation="behind" />
        <!-- ↑↑↑ 支付宝插件 ↑↑↑ -->
        
        <!-- ↓↓↓ 多酷SDK ↓↓↓ --> 
        <activity
            android:name="com.duoku.platform.ui.DKContainerActivity"
            android:configChanges="orientation|keyboardHidden|navigation|screenSize"
            android:launchMode="singleTop"
            android:theme="@style/StyledIndicators" >
        </activity>

        <service android:name="com.duoku.platform.service.DKSuspensionService" />

        <!-- 贴吧 start -->
        <activity
            android:name="com.baidu.tiebasdk.ext.motu.SelectBarActivity"
            android:configChanges="orientation|keyboardHidden|navigation" />
        <activity
            android:name="com.baidu.tiebasdk.account.InputUserNameActivity"
            android:configChanges="orientation|keyboardHidden|navigation"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" >
            <intent-filter>
            </intent-filter>
        </activity>
        <activity
            android:name="com.baidu.tiebasdk.account.LoginActivity"
            android:configChanges="orientation|keyboardHidden|navigation" >
            <intent-filter>
            </intent-filter>
        </activity>
        <activity
            android:name="com.baidu.tiebasdk.account.Register2Activity"
            android:configChanges="orientation|keyboardHidden|navigation" >
            <intent-filter>
            </intent-filter>
        </activity>
        <activity
            android:name="com.baidu.tiebasdk.account.ActivationActivity"
            android:configChanges="orientation|keyboardHidden|navigation" >
            <intent-filter>
            </intent-filter>
        </activity>
        <activity
            android:name="com.baidu.tiebasdk.account.ProtocolActivity"
            android:configChanges="orientation|keyboardHidden|navigation" >
            <intent-filter>
            </intent-filter>
        </activity>
        <activity
            android:name="com.baidu.tiebasdk.frs.FrsActivity"
            android:configChanges="orientation|keyboardHidden|navigation" >
        </activity>
        <activity
            android:name="com.baidu.tiebasdk.frs.FrsImageActivity"
            android:configChanges="orientation|keyboardHidden|navigation" >
        </activity>
        <activity
            android:name="com.baidu.tiebasdk.mention.MentionActivity"
            android:configChanges="orientation|keyboardHidden|navigation" >
            <intent-filter>
            </intent-filter>
        </activity>
        <activity
            android:name="com.baidu.tiebasdk.mention.ReplyMeActivity"
            android:configChanges="orientation|keyboardHidden|navigation" >
            <intent-filter>
            </intent-filter>
        </activity>
        <activity
            android:name="com.baidu.tiebasdk.mention.AtMeActivity"
            android:configChanges="orientation|keyboardHidden|navigation" >
            <intent-filter>
            </intent-filter>
        </activity>
        <activity
            android:name="com.baidu.tiebasdk.pb.NewPbActivity"
            android:configChanges="orientation|keyboardHidden|navigation"
            android:windowSoftInputMode="adjustResize|stateHidden" >
            <intent-filter>
            </intent-filter>
        </activity>
        <activity
            android:name="com.baidu.tiebasdk.pb.ImagePbActivity"
            android:configChanges="orientation|keyboardHidden|navigation"
            android:windowSoftInputMode="adjustResize" >
            <intent-filter>
            </intent-filter>
        </activity>
        <activity
            android:name="com.baidu.tiebasdk.write.WriteActivity"
            android:configChanges="orientation|keyboardHidden|navigation"
            android:windowSoftInputMode="stateVisible|adjustResize" >
            <intent-filter>
            </intent-filter>
        </activity>
        <activity
            android:name="com.baidu.tiebasdk.write.VcodeActivity"
            android:configChanges="orientation|keyboardHidden|navigation"
            android:windowSoftInputMode="stateVisible|adjustResize" >
            <intent-filter>
            </intent-filter>
        </activity>
        <activity
            android:name="com.baidu.tiebasdk.write.NewVcodeActivity"
            android:configChanges="orientation|keyboardHidden|navigation"
            android:windowSoftInputMode="stateHidden" >
            <intent-filter>
            </intent-filter>
        </activity>
        <activity
            android:name="com.baidu.tiebasdk.write.AtListActivity"
            android:configChanges="orientation|keyboardHidden|navigation" >
            <intent-filter>
            </intent-filter>
        </activity>
        <activity
            android:name="com.baidu.tiebasdk.write.WriteImageActivity"
            android:configChanges="orientation|keyboardHidden|navigation" >
            <intent-filter>
            </intent-filter>
        </activity>
        <activity
            android:name="com.baidu.tiebasdk.pb.ImageActivity"
            android:configChanges="orientation|keyboardHidden|navigation" >
            <intent-filter>
            </intent-filter>
        </activity>
        <activity
            android:name="com.baidu.tiebasdk.pb.WebActivity"
            android:configChanges="orientation|keyboardHidden|navigation" >
            <intent-filter>
            </intent-filter>
        </activity>
        <activity android:name="com.baidu.tiebasdk.more.AccountActivity" >
            <intent-filter>
            </intent-filter>
        </activity>
        <!-- 贴吧activity end -->
        
        <!-- 贴吧 service begin -->
        <service
            android:name="com.baidu.tiebasdk.service.TiebaUpdateService"
            android:enabled="true" >
            <intent-filter>
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </service>
        <service
            android:name="com.baidu.tiebasdk.service.TiebaFullUpdateService"
            android:enabled="true" >
            <intent-filter>
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </service>
        <service
            android:name="com.baidu.tiebasdk.service.ClearTempService"
            android:enabled="true" >
            <intent-filter>
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </service>
        <service
            android:name="com.baidu.tiebasdk.service.FatalErrorService"
            android:enabled="true" >
            <intent-filter>
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </service>
        <service
            android:name="com.baidu.tiebasdk.service.TiebaSyncService"
            android:enabled="true" >
            <intent-filter>
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </service>
        <service
            android:name="com.baidu.tiebasdk.service.TiebaMessageService"
            android:enabled="true" >
            <intent-filter>
                <action android:name="com.baidu.tiebasdk.service.Message" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </service>
        <service
            android:name="com.baidu.tiebasdk.service.TiebaPrepareImageService"
            android:enabled="true" >
            <intent-filter>
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </service>
        <!-- 贴吧 service end -->


        <!-- push service client -->
        <receiver android:name="com.duoku.platform.push.MyReceiver" >
            <intent-filter>
                <action android:name="com.duoku" />
            </intent-filter>
        </receiver>
        <receiver android:name="com.duoku.platform.push.PushMessageReceiver" >
            <intent-filter>

                <!-- 接收push消息 -->
                <action android:name="com.baidu.android.pushservice.action.MESSAGE" />
                <!-- 接收bind,unbind,fetch,delete等反馈消息 -->
                <action android:name="com.baidu.android.pushservice.action.RECEIVE" />
                <action android:name="com.baidu.android.pushservice.action.notification.CLICK" />
            </intent-filter>
        </receiver>
        <receiver
            android:name="com.baidu.android.pushservice.PushServiceReceiver"
            android:process=":bdservice_v1" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
                <action android:name="com.baidu.android.pushservice.action.notification.SHOW" />
                <action android:name="com.baidu.android.pushservice.action.media.CLICK" />
                <action android:name="android.intent.action.MEDIA_MOUNTED" />
                <action android:name="android.intent.action.USER_PRESENT" />
                <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
                <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
            </intent-filter>
        </receiver>
        <receiver
            android:name="com.baidu.android.pushservice.RegistrationReceiver"
            android:process=":bdservice_v1" >
            <intent-filter>
                <action android:name="com.baidu.android.pushservice.action.METHOD" />
                <action android:name="com.baidu.android.pushservice.action.BIND_SYNC" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_REMOVED" />

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

        <service
            android:name="com.baidu.android.pushservice.PushService"
            android:exported="true"
            android:process=":bdservice_v1" >
            <intent-filter>
                <action android:name="com.baidu.android.pushservice.action.PUSH_SERVICE" />
            </intent-filter>
        </service>
        <service
            android:name="com.baidu.android.pushservice.CommandService"
            android:exported="true" />
        <!-- push service end -->


        <!-- 贴吧 receiver start -->
        <receiver android:name="com.baidu.tiebasdk.service.TiebaReceiver" >
            <intent-filter>
                <action android:name="com.baidu.tiebasdk.broadcast.service" />
                <action android:name="com.baidu.tiebasdk.broadcast.sync" />
            </intent-filter>
        </receiver>
        <receiver android:name="com.baidu.tiebasdk.service.InstallReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_ADDED" />
                <action android:name="android.intent.action.PACKAGE_REMOVED" />

                <data android:scheme="package" />
            </intent-filter>
        </receiver>
        <receiver android:name="com.baidu.tiebasdk.service.SyncLoginReceiverForAs" >
            <intent-filter>
                <action android:name="com.baidu.tiebasdk.broadcast.syncLoginFromAS" />
            </intent-filter>
        </receiver>

        <!-- 贴吧  receiver end -->
        <!-- ↑↑↑ 多酷SDK ↑↑↑ -->
    
  </application>
  <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="21" />
  <uses-feature android:glEsVersion="0x00020000" />
  <uses-feature android:name="android.hardware.touchscreen" android:required="false" />
  <uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="false" />
  <uses-feature android:name="android.hardware.touchscreen.multitouch.distinct" android:required="false" />
  
    <!-- ↓↓↓ SDK ↓↓↓ -->
    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    

    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
	<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <!-- ↑↑↑ SDK ↑↑↑ -->
    
    <!-- ↓↓↓ DK SDK ↓↓↓ --> 
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER" />
    <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.FLASHLIGHT" />
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
    <uses-permission android:name="android.permission.BROADCAST_STICKY" /> 
    <uses-permission android:name="android.permission.CALL_PHONE" />
    
</manifest>

 测试运行的界面如下:

原文地址:https://www.cnblogs.com/weiqiangwaideshijie/p/7715861.html