x

Search in
Sort by:

Question Status:

Search help

  • Simple searches use one or more words. Separate the words with spaces (cat dog) to search cat,dog or both. Separate the words with plus signs (cat +dog) to search for items that may contain cat but must contain dog.
  • You can further refine your search on the search results page, where you can search by keywords, author, topic. These can be combined with each other. Examples
    • cat dog --matches anything with cat,dog or both
    • cat +dog --searches for cat +dog where dog is a mandatory term
    • cat -dog -- searches for cat excluding any result containing dog
    • [cats] —will restrict your search to results with topic named "cats"
    • [cats] [dogs] —will restrict your search to results with both topics, "cats", and "dogs"

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?

Product Version: UE 4.10
Tags:
more ▼

asked Aug 12 '16 at 08:38 PM in Packaging & Deployment

avatar image

nachilau
105 9 12 26

avatar image nachilau Aug 12 '16 at 09:00 PM

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?

avatar image nachilau Aug 13 '16 at 08:16 PM

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?

avatar image Samantha Sutton ♦♦ STAFF Aug 15 '16 at 08:57 PM

Nachilau,

  • 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!

(comments are locked)
10|2000 characters needed characters left
Viewable by all users

1 answer: sort voted first

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.

more ▼

answered Aug 16 '16 at 12:43 AM

avatar image

nachilau
105 9 12 26

avatar image Samantha Sutton ♦♦ STAFF Aug 16 '16 at 03:13 PM

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. :)

(comments are locked)
10|2000 characters needed characters left
Viewable by all users
Your answer
toggle preview:

Up to 5 attachments (including images) can be used with a maximum of 5.2 MB each and 5.2 MB total.

Follow this question

Once you sign in you will be able to subscribe for any updates here

Answers to this question