分类

链接

2022 年 2 月
 123456
78910111213
14151617181920
21222324252627
28  

近期文章

热门标签

新人福利,免费薅羊毛

现在位置:    首页 > Android, Unity3D > 正文
共享办公室出租
记录untiy适配android12
Android, Unity3D 暂无评论 阅读(170)

我的小米手机升级了最亲的Miui113,也就是android12.升级后 ,unity app在手机上无法安装,提示:安装失败(-22)打不开了,但是在android12以下的版本可以正常安装。

初步定位为android12加了什么新的特性导致无法安装。以下为排错记录:

  1. 网上搜索了一下android12新特性,好像和Unity没多大关系。
  2. 再搜索错误信息: 安装失败(-22),也没有找到多少信息。
  3. 搜索unity适配android12,无果。
  4. 搜索unity build for android12,无果。
  5. 为了排除是unity的问题,我用android studio写了一个空的android项目,生成app后,可以在手机上打开,说明应该是Unity的问题。
  6. 继续搜索unity适配android12,搜索到一点有用信息,说android12需要配置 manifest中的android:exported="false"。刚好,因为我的unity项目中使用android特性,Plugins下面也有manifest.xml,无是在activity上加了 android:exported="false". 增加后再次打包,果然安装成功。
  7. 虽然安装成功了,但是打开后,直接黑屏。没有任何反应,于是接上数据线,打开android studio看日志,没有找到有用信息
  8. 于是搜索 unity android12 黑屏,无果。
  9. 继续去google上搜索  unity android12 black screen, 在youtube上看到一个小哥说要设置ar core,也试了一下,无果。
  10. 继续搜索 unity 黑屏,有人说是unity bug,需要打补丁。于是我换了Unity版本,还是不行。去unity官网找相关补丁,无果。
  11. 我怀疑是不是我的项目有问题,于是 新建了一个空的unity项目,打包,安装不上,提示: 安装失败(-22),于是在/assets/plugins/android/下加上 AndroidManifest.xml,并在activity中增加 android:exported="false" 。重新打包,安装成功,不黑屏,成功了?于是试了一下原来的Unity项目,不行。
  12. 开始对比两个项目的配置,发现新项目用的是.net 2.x来编译。把原项目改为.net 2.x,结果无法打包,因为项目用了很多.net 4.x特性,包括插件也是.net 4.x的版本。看来不行。
  13. 于是把空项目的.net 2.x改为.net 4.x,打包成功,但是启动后黑屏。不行。
  14. 于是继续搜索android12 黑屏,有人说是target api太高,把auto target改为低版本的。于是我在Unity 中设置 player setting中设置target api level为android8(API 26),重新打包并安装,OK了。在手机上正常安装,并能启动这个demo空unity项目。
  15. 于是我把原项目target api level改为26,打包,出错。提示gradle版本不一致。
  16. 搜索 dupicate gradle,有人说需要为unity项目设置mainTemplate.gradle,设置后,打包报错,提示这个mainTemplate.gradle里面的各种属性无法识别。不行。
  17.  
  18. 后来感觉头大了,于是休息了一会,搞了一上午,也该吃中午饭了。
  19. 吃完午饭后,休息了一会。
  20. 下午,我重新梳理了一篇。既然demo空项目能成功,那肯定就是原项目的问题。
  21. 我把原项目.net改为.net4.x,api level 改为26 ,其它所有配置和 demo项目一致。打包,打包成功,安装也安装成功,但是打开黑屏。
  22. 于是我寻找两个项目之间的区别,原项目用了一个android aar包,于是我把这个aar包放到demo项目里面,重新打包demo项目,打包成功,但是安装后打开也黑屏了,看来问题定位到是这个aar包的问题。
  23. 于是打开aar包原android项目,检查代码,发现用了一个androidx.core的包来请求用户权限。这个包也自带了一个core-1.0.2.aar,也打包到Unity项目时面了,于是我把这个aar删除,重新打包,打包成功,安装成功,也不黑屏了。成功了?但是运行Unity app的过程中,发现不弹出请求权限了,因为没有权限,搜索wifi的功能也无法正常使用。看来是这个包还不能删除。
  24. 于是我尝试看能不能不用这个包,于是网上搜索了一段申请权限的代码,如下:
    1.  if (android.os.Build.VERSION.SDK_INT >= 23) {
    2.             if (this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
    3.                 // You can use the API that requires the permission.
    4.                 if (ptWifiAdministrator == null)
    5.                     ptWifiAdministrator = new PTWifiAdministrator(this);
    6.  
    7.  
    8.                 ptWifiAdministrator.StartScanWifi();
    9.                 //ptWifiAdministrator.GetScanResults();
    10.  
    11.                 String ScanList = ptWifiAdministrator.LookUpScan();
    12.                 UnityPlayer.UnitySendMessage(unitygameobjectName, "PTUnityWifiReceive", ScanList);
    13.  
    14.             } else {
    15.                 // You can directly ask for the permission.
    16.                 this.requestPermissions(
    17.                         new String[]{
    18.                                 android.Manifest.permission.ACCESS_COARSE_LOCATION,
    19.                                 android.Manifest.permission.ACCESS_FINE_LOCATION,
    20.                         },
    21.                         102);
    22.             }
    23.         }
  25. 修改后,重新生成aar,并打包到unity项目里面,打包成功,安装成功,wifi搜索功能正常。搞定了?虽然成功了,但是api level=26,并不是最新的android12=31。
  26. 先这样吧,等有时间再来解决。

 

总结:

  1. unity api level改为26
  2. unity在/assets/plugins/android/下加上 AndroidManifest.xml,并在activity中增加 android:exported="false"
  3. 第三方android包,不要使用androidx特性,即移出androidx.core依赖,因为和unity有冲突(需要重写申请权限的代码)。

 

晚上,凭记忆写下日志,希望能帮到有用的人。有什么不对的地方,请指出,谢谢。

============ 欢迎各位老板打赏~ ===========

本文版权归Bruce's Blog所有,转载引用请完整注明以下信息:
本文作者:Bruce
本文地址:记录untiy适配android12 | Bruce's Blog

发表评论

留言无头像?