Unity导出到AS中真机测试apk没有问题,aab提交到GooglePlay审核通过,但是从Google Play下载的应用闪退问题

兄弟们,姐妹们,历尽两个月,改得我都怀疑自己适不适合搞这行了!!!真的是把网上说得可能得问题和解决方法都尝试了一遍,快疯了!!

看google开发者后台得测试报告,提供得crash信息:

signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr ffffffffffffffff
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build type 'Release', Scripting Backend 'il2cpp', CPU 'arm64-v8a'
Build fingerprint: 'google/redfin/redfin:11/RQ3A.211001.001/7641976:user/release-keys'
Revision: 'MP1.0'
pid: 23182, tid: 23578, name: UnityMain  >>> com.xxx.xxx <<<
    x0   ffffffffffffffff  x1   534a3a1a643b66a4  x2   0000000000000001  x3   0000000000000002
    x4   00000000ffffffff  x5   0000000000000000  x6   0000000000000012  x7   0000007ecdf9e1d0
    x8   0000007c9071dfb8  x9   534a3a1a643b66a4  x10  000000002e736f00  x11  0000000000000000
    x12  000000002e736f00  x13  000000002e716900  x14  0000000000000001  x15  0000000000000009
    x16  0000007fb0f8db50  x17  0000007fb0f23084  x18  000000002aaf39ad  x19  0000007c9071bbe0
    x20  534a3a1a643b66a4  x21  ffffffffffffffff  x22  0000007fb350e3b8  x23  0000007c9071bb30
    x24  0000007c9071bb10  x25  0000007fb476f000  x26  0000007fb476f000  x27  0000007c9071e000
    x28  0000000000000000  x29  0000007c9071baf0  x30  0000007c83d7711c
    sp   0000007c9071baa0  pc   0000007c83d77128  pstate 0000000020001000
backtrace:
	#00  pc 00000000000005bc  [vdso] ()
	#01  pc 00000000007e7124  /data/app/~~Nls7zScPmwKrus3S9v6Sgw==/com.xxx.xxxx-HlQF7QyJI5KnDR1b5Ir73g==/split_config.arm64_v8a.apk ()
	#02  pc 0000000000000dd4  /apex/com.android.runtime/bin/linker64 (__dl__Z18do_dl_iterate_phdrPFiP12dl_phdr_infomPvES1_+260)
	#03  pc 00000000000003d8  /apex/com.android.runtime/bin/linker64 (__loader_dl_iterate_phdr+48)
	#04  pc 00000000000000a0  /apex/com.android.runtime/lib64/bionic/libdl.so (dl_iterate_phdr+8)
	#05  pc 00000000007e702c  /data/app/~~111==/com.x.newzombie-xxxxx==/split_config.arm64_v8a.apk ()
	#06  pc 00000000007ae480  /data/app/~~111==/com.xxx.xxx-xxx==/split_config.arm64_v8a.apk ()
	#07  pc 000000000067fa94  /data/app/~~111==/com.xxx.xxx-xxx==/split_config.arm64_v8a.apk ()
	#08  pc 00000000006d1134  /data/app/~~111==/com.xxx.xxx-xxx==/split_config.arm64_v8a.apk ()
	#09  pc 00000000006d180c  /data/app/~~111==/com.xxx.xxx-xxx==/split_config.arm64_v8a.apk ()
	#10  pc 00000000006dea88  /data/app/~~111==/com.xxx.xxx-xxx==/split_config.arm64_v8a.apk ()
	#11  pc 0000000000012ed4  /apex/com.android.art/lib64/libart.so (art_quick_generic_jni_trampoline+148)
	#12  pc 0000000000009564  /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548)
	#13  pc 000000000007ea6c  /apex/com.android.art/lib64/libart.so (_ZN3art9ArtMethod6InvokeEPNS_6ThreadEPjjPNS_6JValueEPKc+200)
	#14  pc 00000000001ec5ec  /apex/com.android.art/lib64/libart.so (_ZN3art11interpreter34ArtInterpreterToCompiledCodeBridgeEPNS_6ThreadEPNS_9ArtMethodEPNS_11ShadowFrameEtPNS_6JValueE+376)
	#15  pc 00000000001e26b0  /apex/com.android.art/lib64/libart.so (_ZN3art11interpreter6DoCallILb0ELb0EEEbPNS_9ArtMethodEPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+912)
	#16  pc 0000000000547728  /apex/com.android.art/lib64/libart.so (MterpInvokeDirect+568)
	#17  pc 0000000000003914  /apex/com.android.art/lib64/libart.so (mterp_op_invoke_direct+20)
	#18  pc 80200801fffffffc  <unknown/absolute> ()

这只是其中一份crash,还有另外4份类似得crash,根据网上得教程,都说去看logcat

中的详细信息,看具体是什么问题,然而,我想说,原谅鄙人比较菜,猜测可能是缺少对应的依赖架构,像提到的lib64,arm64_v8a,是否是这个so文件的问题,然后又去追溯so文件是哪里来的,起什么作用。。。。只想说,白扯。

但是的确没有其他可用的或者说是可参考的log。真真的是要秃。

然后换思维,为什么真机测试可以,商店中下载的闪退呢?真机测试是直接安装apk,商店中提交的是aab,分析同一个工程打出的apk和aab包的区别:

很明确的一点,aab的包在商店中会根据不同的环境下载对应的arm64_v8a,armeabi-v7a,而apk包中arm64_v8a和armeabi-v7a会直接全部打包进去。

再回到crash提到:split_config.arm64_v8a.apk,正好对应,的确可能是架包拆分导致的问题,优先解决这个问题。

发现了一个属性参数:android:extractNativeLibs="true",这个属性有个特殊性,是针对apk瘦身的,再gradle版本较高的时候 android:extractNativeLibs的默认值发生了变化,

我使用的是gradle3.5.4,minisdkversion=19,所以在AndroidManifest.xml中在<application>标签,添加:

<application 
        android:extractNativeLibs="true" 
        android:theme="@style/UnityThemeSelector" 
        android:label="@string/app_name" 
        android:icon="@mipmap/app_icon">

具体想了解的可以去查询这个属性,论坛上有详细的说明。

添加完后测试,发现了新的问题,但至少人家开始有error的报错了,感动。

error:Using memoryadresses from more that 16GB of memory

这个查看下来是因为使用的unity2018.3.11f,据unity官方论坛中讨论,这个版本就是在IL2CPP打包并且Target Architecture to ARM64时,会导致启动app在闪屏时crash

这万万没想到,是unity的坑啊!!!解决办法就是更新unity版本,两行眼泪流下来啊!!!

贴上链接:

​​​​​t​​​​​Unity Issue Tracker - [Android][IL2CPP] App crashes during launch with "Using memoryadresses from more than 16GB of memory" messages on Android 11Repro steps: 1. Create a new project 2. Switch build target to Android 3. Set Scripting Backend to IL2CPP and Target Architecture to...https://issuetracker.unity3d.com/issues/android-il2cpp-empty-project-crashes-on-launch-with-using-memoryadresses-from-more-than-16gb-of-memory-messages 于是我们更新了unity版本,unity2018.4.36,终于解决了闪退问题!


                
### Unity 打包 AAB 文件的作用 Android App Bundle (AAB) 是一种新型的应用程序发布格式,旨在优化应用的分发过程。通过使用 AAB 格式,Google Play 能够生成针对每台设备特定配置的最佳 APK,从而减少最终用户的下载大小并提高安装效率[^1]。 当在 Unity 中创建 AAB 文件时,其主要目的是满足 Google Play 的最新要求,并支持更高效的分发机制。如果项目中的资源较大(例如超过 150MB),则建议结合 Android App Bundle 和 Play Asset Delivery (PAD) 技术来管理大文件资源[^4]。 --- ### 处理 Unity 打包 AAB 文件的方法 #### 方法一:直接通过 Unity 导出 Unity 提供了内置的功能用于构建 AAB 文件。开发者可以在 Build Settings 中选择 `Build` 或者 `Export Project to Gradle` 来完成此操作。然而,在某些情况下,尤其是涉及复杂资源配置时,这种方式可能不够灵活。 #### 方法二:导出 AS 工程后再打包 为了更好地控制打包流程,推荐将 Unity 项目导出Android Studio 并手动调整设置后重新编译。这种方法允许开发人员自定义依赖项、修改 build.gradle 配置以及其他高级选项。 #### 注意事项 - **AB 包路径问题** 在处理 asset bundle (AB) 文件时需注意它们的位置安排。所有 AB 文件应放置在同一目录下;否则可能会因嵌套结构而导致错误发生[^2]。 - **插件集成** 使用官方提供的工具如 GitHub 上托管的 *play-unity-plugins* 可简化接入 Google Play 功能的过程,比如 IAP 支持等[^3]。 以下是简单的脚本示例展示如何检测当前平台是否为安卓: ```csharp using UnityEngine; public class PlatformCheck : MonoBehaviour { void Start() { if(Application.platform == RuntimePlatform.Android){ Debug.Log("This is an Android platform."); } } } ``` --- ### 总结 综上所述,理解 AAB 文件的意义及其背后的工作原理有助于改善应用程序性能表现及用户体验质量。同时按照上述指导方针妥善解决可能出现的技术难题能够保障项目的顺利推进。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值