untiy_Android接入sdk

参考文档:

https://blog.csdn.net/yang8456211/article/details/51356193

主要原理

 

1)unity里面调用android项目:

test.cs脚本

AndroidJavaClass jc;

AndroidJavaObject jo;

 

public void Awake() {

jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");

jo = jc.GetStatic<AndroidJavaObject>("currentActivity");

}

 

public void login() {

t1.text = "login call";

jo.Call("login");

t1.text = " login end ";

}

 

 

2)android项目配置:

1.新建一个安卓项目,或者做一个untiy的demo,导出安卓项目

demo的bundle名字和sdk渠道提供的、真正游戏的一致,

2.根据sdk文档,设置好sdk安卓项目的关联,这个接入的sdk文档一般都有

 

设置library,有时候会出现X号,

是1)因为设置的sdk安卓项目路径有中文,无法识别,丢在demo的同级目录下面。2)然后demo有问题,不是一个正规的安卓项目

untiy_Android接入sdk

 

 

 

仔细看文档,把xml什么的都配置好

3.创建一个WTFSDKActivity.java脚本,必须集成UnityPlayerActivity。在里面根据sdk文档,把对应的东西都写好。

 

untiy_Android接入sdk

untiy_Android接入sdk

 

4.导出jar,只勾选新创建的这个java文件就可以了

untiy_Android接入sdk

 

5.将新创建的jar文件丢入untiy项目的plugins的bin文件夹下面。然后把sdk安卓项目里面的libs、assets、src全部拷贝过来,res根据Androidmainfest.xml里面的配置来拷贝,没有调用就不需要了。

Androidmainfest.xml根据计入sdk文档要求,配置好,游戏基本就ok了

untiy_Android接入sdk

 

3)android项目调用untiy里面的代码

UnityPlayer.UnitySendMessage("AndroidGo", "LoginCallback", result);

 

AndroidGo是一个GameObject物体,丢在项目的第一个场景里面,全部不销毁。

LoginCallback是物体上面的函数名字,result是参数。

 

 

5)测试bug

1.打包后,横竖屏幕切换卡死?

AndroidManifest.xml文件添加

<supports-screens

android:smallScreens="true"

android:normalScreens="true"

android:largeScreens="true"

android:xlargeScreens="true"

android:anyDensity="true"/>

 

修改主Activity的configChanges,screenOrientation和游戏设置一样。

<activity android:name="com.yiyou.ysfb.WTFSDKActivity"

android:configChanges ="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale"

android:screenOrientation="landscape"

androi

d:launchMode="singleTask">

 

 

2.测试后发现传送数据到sdk一直卡死?

 

untiy_Android接入sdk

原因:

untiy_Android接入sdk

String[] msgArray = msg.split("\\|");

 

3)private const char SPLITCHAR = "|";

StringBuilder sb = new StringBuilder ();

sb.Append(id +SPLITCHAR);

发现拼接字符串时候 “|”为25,于是改为

private const string SPLITCHAR = "|";

 

4)注意做入安卓sdk的外部代码,全部用try catch包好,多加日志,以免重复打包浪费时间

5)询问渠道,sdk的相关代码是否都需要放在主线程里面?刚开始照着文档接,最后要加这个,半夜又加班! ╮(╯﹏╰)╭

this.runOnUiThread(new Runnable() {

@Override

public void run() {

}});

 

6).有的界面,例如退出界面,游戏自己做了,询问渠道使用他们的还是自己的,尽量都用渠道的,除非boss要求用自己的。因为渠道总是希望用他们的东西。