Crash on Load on Android with main.obb.png not found

Hello,

I have deployed the apk for USA and International version of Samsung S7, and Nexus 6, Nexus 4 etc. On the international S7, everything working, however, when I deploy on other devices (USA S7, Nexus 6, Nexus 4), I get a similar error saying the

D/UE4(15590): Assertion failed: nullptr != File [File:E:\UnrealEngine-4.10\Engine\Source\Runtime\Core\Private\Android\AndroidFile.cpp] [Line: 1704]

By modified the code a bit, it seems that game cannot find a file

Android model is Nexus 6
OS language is set to en_US
==============> GameActive.onCreate complete!
OnAppCommandCB cmd: 10
LogAndroidEvents: EnqueueAppEvent : 9, 0
==================================> Inside onStart function in GameActivity
App is running in Landscape
OnAppCommandCB cmd: 11
==============> Resuming main init
LogAndroidEvents: EnqueueAppEvent : 7, 0
Final commandline: 
Created sync event
FAndroidPlatformFile::Initialize(..)
FAndroidPlatformFile::OpenRead('main.obb.png')
FAndroidPlatformFile::PathToAndroidPaths('main.obb.png') => AndroidPath = 'main.obb.png'
FAndroidPlatformFile::PathToAndroidPaths('main.obb.png') => LocalPath = '/storage/emulated/0/UE4Game/MyGame/main.obb.png'
FAndroidPlatformFile::PathToAndroidPaths('main.obb.png') => AssetPath = 'main.obb.png'
Assertion failed: nullptr != File [File:E:\UnrealEngine-4.10\Engine\Source\Runtime\Core\Private\Android\AndroidFile.cpp] [Line: 1704] 

while I turn on OBBInAPK to true. Then I try to compare the installation location differences on difference device, on the international S7 version (which is working fine), I can find a folder under
\sdcard\UE4Game\MyGameName\MyGameGame\

but on the USA S7, Nexus 6 or Nexus 4, I cannot find such folder, which I suspect the reason the fail to find file error come from. Can someone provide any information regarding how is the Unreal app installation location on Android works? And why on different devices, it seems the installation location is difference? Also, where is the main.obb.png suppose to be?

Ok, another thing I suspect is the except the International S7 version, all other phone don’t have external sd card space… will that cause any issue?

After more investigation, I found out that on the failing device, when the system try to call

AAsset * asset = AssetManager_open(AssetMgr,TCHAR_TO_UTF8(*AssetPath), AASSET_MODE_RANDOM);

for main.obb.png, it returns null, while the success device has not problem finding the asset given that they both install by the same apk file. (I check the apk file, the main.bb.png file is definitely inside assets/ of the apk file)

Then I write some code

while((filename = AAssetDir_getNextFileName(assetDir)) != NULL) { FPlatformMisc::LowLevelOutputDebugStringf(TEXT("’%s’"), filename); }

to check what is in the assets folder when AAssetManager_open() get called, and on the failing device,

‘m…’

this is the only file with this name get list out in the failing device, and for the success device,

‘m…’
‘p_exrda/_smx’

It list out 2 files.

I am totally confuse now, what there are such differences? And since both of the devices don’t have the main.obb.png file, how come the success one can mount main.obb.png successfully while another one failed? Is the key in the ‘p_exrda/_smx’? And what is it?

,

  • Is this happening with every project, or just one project?
  • If it’s happening with one project, are you able to set up a sample project for me to review where the same assertion failure occurs?
  • Can you please provide me with the monitor.bat logs from each device you’ve tested?
  • Do you know the differences between the International S7 and the US S7?

Looking forward to hearing back from you, thanks!

I found out the issue after many hours of debugging, the problem is that the main.obb.png inside the assets folder in the apk file is too big for other devices but somehow works for the international S7 (properly with different CPU architectures, Snapdragon vs Exynos, it also works on Nvidia Shield portable too).

The size of my main.obb.png is around 800Mb, and I have build an Android app using pure java to try to open the main.obb.png, and it also failed. I then artificially create an file with size around 800Mb and put it inside the assets folder and the app actually crash even before it starts. I then decrease the size of the file until around 200Mb to make the app run. So, I assume the Unreal app have a similar issue (again it works on international S7).

My solution is to separate the obb with the apk, and everything working now. My only doubt is that I don’t understand why the international S7 and Nvidia Shield portable is capable to read asset data larger than 200Mb while others cannot.

I’m glad that you figured out what was the cause to your issue you were having. I’m not sure why the International S7 would run it however, the Nvidia Shield is a gaming tablet so it’s more powerful than most mobile devices, which makes sense as to why it would run your large game. :slight_smile: