unity接入quick sdk报错总结(Andriod)
推荐阅读:
1.Unable to start the daemon process
在 Android Studio 上新建项目,出现 Unable to start the daemon process。
解决步骤:
1、修改项目中gradle.properties文件,只要添加以下一行代码:
org.gradle.jvmargs=-Xmx512m
2、重启Android Studio
2.A problem occurred configuring root project “项目名”
.
解决办法:
在如下两个地方分别加上
google()
3.Program type already present: com.XXX
解办法:
1.这是依赖包冲突了,找到重复的依赖包去掉就可以了。
2.双击shift,全局查找冲突的这个IPackageDeleteObserve ,发现有两个包都引入了这个,删掉一个包,重新构建就OK了。
4.failed to read PNG signature: file does not start with PNG signature
排查后发现是因为图片的后缀名错误引起的,该图片的后缀是.png,但是其实际的格式是jpg,只需重命名该图片的后缀为.jpg即可解决问题。
5.Cannot resolve symbol XXX
首先根据报错,找到对应的出错的jar包,位置如下:
1.把对应的jar包引用先注释掉。
2.点击Sync Now。
3.取消步骤1的注释。
4.点击Sync Now。
完成上述步骤,错误解决~
如果你不知道Sync Now在哪的话,不妨看看下面的图示:
6.Unable to find tolua DllNotFoundException:tolua
DLLNotFoundException介绍
首先区分一个问题只要是与DLLNotFoundException相关的必然是丢失了DLL文件,不管是安卓还是Window还是Mac原理都是一样的。
Plugins文件夹
既然是跟DLLNotFoundException相关,必然是与Plugins文件夹相关,原因是因为Plugins文件夹中存放了我们使用插件的兼容dll,只有Plugins文件夹包含了对应平台的.dll或者.so文件才能让我们的插件正常使用。
Plugins文件夹中对应在Android文件夹中的文件后缀大部分为.so文件(之前安卓打包处理了半天这个问题,因为SVN更新不到这个后缀为.so的文件,所以一直在报DLLNotFoundException:tolua的错误,后来才意识到),平台选择的画直接选择Android即可,CPU选择与文件夹对应的即可(这个例子中对应的文件夹是arm64-v8a,所以对应的是ARM64)
如图所示文件夹,检查是对应文件是否有包含.so文件。没有的话可直接复制其他项目的同名文件。
7.测试提示"XXX接口应在UI现成上调用"
查看sdk接入文档案例发现如下案例:
final Activity activity = this;
activity.runOnUiThread(new Runnable() {
// ...
});
百度runOnUiThread发现:在Android开发过程中,常需要更新界面的UI。而更新UI是要主线程来更新的,即UI线程更新。如果在主线线程之外的线程中直接更新页面 显示常会报错。
因此,在报错的接口处添加如下代码:
runOnUiThread(new Runnable() {
@Override
public void run() {
}
});
举例:
报错前的接口代码如下:
public void logout() {
log("调用logout");
User.getInstance().logout(activity);
}
修改后:
public void logout() {
runOnUiThread(new Runnable() {
@Override
public void run() {
log("调用logout");
User.getInstance().logout(activity);
}
});
}
8. A WebView method was called on thread 'main'. All WebView methods must be called on the same thread
由于Unity发布Android的Apk时,只包含一个主Acitivity,俗称MainActivity,可以通过扩展该Activity,达到预期效果。扩展Unity的MainActivity时,注意AndroidManifest配置的主要Activity入口,例如使用自己扩展的AndroidManifest代替Unity默认的AndroidManifest,这样Activity入口就是我们自定义的Activity入口。
如图:SplashActivity这个active是我们扩展的active,继承自QuickSdkSplashActivity,如下:
public class SplashActivity extends QuickSdkSplashActivity {
@Override
public int getBackgroundColor() {
Log.v("shirln=SplashActivity","");
return Color.WHITE;
}
@Override
public void onSplashStop() {
//闪屏结束后,跳转到游戏界面
Log.v("SplashActivity","shirln闪屏结束");
Intent intent = new Intent(this, Helper.class);
startActivity(intent);
this.finish();
}
}
当其为主active时,需要android继承自UnityActivity,这时需要在AndroidManifest.xml中,加上如下配置:
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
9.个别渠道收不到回调
可以尝试将设置回调的方法放在调用之前
例如,正常情况下代码如下:
protected void onCreate(Bundle savedInstanceState) {
log("+ onCreate");
super.onCreate(savedInstanceState);
activity = this;
initSDK();
QuickSDK.getInstance().setIsLandScape(false);
com.quicksdk.Sdk.getInstance().onCreate(activity);//初始化
InitLoginNotifie();//设置回调
InitSDKPrmissions();
}
由于初始化方法在设置之前,可能导致回调不执行,这时候我们将回调挪到初始化前执行,如下:
protected void onCreate(Bundle savedInstanceState) {
log(" + onCreate");
super.onCreate(savedInstanceState);
activity = this;
initSDK();
QuickSDK.getInstance().setIsLandScape(false);
InitLoginNotifie();
com.quicksdk.Sdk.getInstance().onCreate(activity);
InitSDKPrmissions();
}
10.个别渠道登陆验证失败
经过日志分析,发现传给服务器的数据少了两个字段,这两个字段是登录成功时,sdk返回过来的uid,token。一步步追踪日志,发现,是java这边,收到这两个字段,传给unity,unity那边没有收到消息。后面分析发现,是和unity通信时,unity那边还未初始化通信逻辑。
解决方法:调整java与unity通信时机。
标题:unity接入quick sdk报错总结(Andriod)
作者:mmzsblog
地址:https://www.mmzsblog.cn/articles/2022/05/04/1651647595258.html
如未加特殊说明,文章均为原创,转载必须注明出处。均采用CC BY-SA 4.0 协议!
本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。若本站转载文章遗漏了原文链接,请及时告知,我们将做删除处理!文章观点不代表本网站立场,如需处理请联系首页客服。• 网站转载须在文章起始位置标注作者及原文连接,否则保留追究法律责任的权利。
• 公众号转载请联系网站首页的微信号申请白名单!