Android - Process has died

Update 2016/06/29 - I figured it out, see my answer

How to debug Android support?

I followed the tutorial here ( https://docs.unrealengine.com/latest/INT/Platforms/Android/GettingStarted/3/index.html ) and I was able to deploy an Android ETC1 package of the ThirdPerson example onto my Kindle Fire. However, when I try to deploy my own project, it fails.

The behavior is… I do File → Package Project → Android → Android (ETC1). When I run Install_HeroQuest_Development-armv7-es2.bat, my custom loading screen sits there for a minute or two, then it quits (crashes?).

I used (adb logcat -s UE4 -s Debug) to see the log. I see messages from my game, but there’s nothing to explain the crash (or window closing). Here’s the end of my log with: (adb logcat -s UE4 -s Debug).

> D/UE4     (15821):
> [2016.06.29-04.19.14:722][-7646540]HeroQuestLog:
> StaticMeshManager::Init() b D/UE4    
> (15821):
> [2016.06.29-04.19.15:953][-7646540]LogSerialization:Warning:
> Waiting for
> ../../../HeroQuest/Content/board/board_Tex.uasset
> bulk data (1308824 04) to be loaded
> longer than 1000ms D/UE4     (15821):
> [2016.06.29-04.19.16:954][-7646540]LogSerialization:Warning:
> Waiting for
> ../../../HeroQuest/Content/board/board_Tex.uasset
> bulk data (1308824 04) to be loaded
> longer than 1000ms D/UE4     (15821):
> [2016.06.29-04.19.17:955][-7646540]LogSerialization:Warning:
> Waiting for
> ../../../HeroQuest/Content/board/board_Tex.uasset
> bulk data (1308824 04) to be loaded
> longer than 1000ms D/UE4     (15821):
> Battery: status = 5, rawlevel = 100,
> scale = 100 D/UE4     (15821):
> [2016.06.29-04.19.19:406][-7646540]LogAIModule:
> Creating AISystem for world TheOneMap
> D/UE4     (15821):
> [2016.06.29-04.19.19:422][-7646540]LogWorld: Game class is 'HqGameModeBp_C' D/UE4  
> (15821):
> [2016.06.29-04.19.19:423][-7646540]HeroQuestLog:
> AHeroQuestGameMode ctor D/UE4    
> (15821):
> [2016.06.29-04.19.19:423][-7646540]HeroQuestLog:
> StaticMeshManager::Init() a D/UE4    
> (15821):
> [2016.06.29-04.19.19:430][-7646540]HeroQuestLog:
> StaticMeshManager::Init() b D/UE4    
> (15821):
> [2016.06.29-04.19.19:781][-7646540]LogWorld: Bringing World
> /Game/TheOneMap.TheOneMap up for play
> (max tick rate 0) at
> 2016.06.28-23.19.19 D/UE4     (15821): [2016.06.29-04.19.19:854][-7646540]LogWorld: Bringing up level for play took:
> 0.331696 D/UE4     (15821): [2016.06.29-04.19.19:929][-7646540]LogGameMode:
> Warning - PATHS NOT DEFINED or NO
> PLAYERSTART with positive rating D/UE4
> (15821):
> [2016.06.29-04.19.20:368][-7646540]HeroQuestLog:
> AHeroQuestGameMode::BeginPlay() start
> D/UE4     (15821):
> [2016.06.29-04.19.20:368][-7646540]HeroQuestLog:
> zzzz XML BEGIN HQMap::GenerateMap()
> D/UE4     (15821):
> [2016.06.29-04.19.21:066][-7646540]LogLoad:
> Took 6.590470 seconds to
> LoadMap(/Game/TheOneMap) D/UE4    
> (15821):
> [2016.06.29-04.19.21:066][-7646540]LogInit:Display: Game Engine Initialized.

If I just do (adb logcat), I get a bunch of other junk too but maybe it’s helpful? I don’t know how to filter out which of the other junk is related to my app and which of it is not… There is a message saying (Process com.PemCode.HeroQuest (pid 17845) has died) but I don’t see any clues beyond that.

How do I debug this?

D/UE4     (17845): [2016.06.29-04.21.36:873][-7646540]HeroQuestLog: AHeroQuestGameMode ctor

> D/UE4     (17845):
> [2016.06.29-04.21.36:873][-7646540]HeroQuestLog:
> StaticMeshManager::Init() a D/UE4    
> (17845):
> [2016.06.29-04.21.36:874][-7646540]HeroQuestLog:
> StaticMeshManager::Init() b
> W/AmazonGidPackageManagerCallback( 
> 486): Launching
> com.amazon.device.backup (32009) with
> AMZ_APP_GID W/art     (  217):
> PreZygoteFork called when we already
> have a zygote space.
> I/ActivityManager(  486): Start proc
> 18075:com.amazon.device.backup/u0a22009
> for service
> com.amazon.device.backup/.transport.BackupTransportService
> D/UE4     (17845):
> [2016.06.29-04.21.38:106][-7646540]LogSerialization:Warning:
> Waiting for
> ../../../HeroQuest/Content/board/board_Tex.uasset
> bulk data (1308824 04) to be loaded
> longer than 1000ms
> D/VendorDisplayManagerGlobalCallback(18075):
> callGetInstance: nil
> D/BatteryStatsExtension.VitalEmitterBatteryAndTime(
> 486):
> VitalEmitterBatteryAndTime.start(-):
> not runnable D/UE4     (17845):
> [2016.06.29-04.21.39:107][-7646540]LogSerialization:Warning:
> Waiting for
> ../../../HeroQuest/Content/board/board_Tex.uasset
> bulk data (1308824 04) to be loaded
> longer than 1000ms I/ActivityManager( 
> 486): Process com.amazon.kindle.kso
> (pid 17350) has died
> I/ActivityManager(  486): Process
> com.amazon.photos (pid 17271) has died
> I/ActivityManager(  486): Process
> com.amazon.kindle.rdmdeviceadmin (pid
> 17693) has died D/UE4     (17845):
> [2016.06.29-04.21.40:109][-7646540]LogSerialization:Warning:
> Waiting for
> ../../../HeroQuest/Content/board/board_Tex.uasset
> bulk data (1308824 04) to be loaded
> longer than 1000ms D/UE4     (17845):
> Battery: status = 5, rawlevel = 100,
> scale = 100 I/ActivityManager(  486):
> Process com.android.settings (pid
> 17721) has died I/ActivityManager( 
> 486): Process
> com.amazon.kindle.unifiedSearch (pid
> 16338) has died I/DsService( 1091):
> DsService.onTrimMemory() level 5
> I/ActivityManager(  486): Process
> com.amazon.device.messaging (pid
> 17611) has died I/DsService( 1091):
> DsService.onTrimMemory() level 10
> D/UE4     (17845):
> [2016.06.29-04.21.41:111][-7646540]LogSerialization:Warning:
> Waiting for
> ../../../HeroQuest/Content/board/board_Tex.uasset
> bulk data (1308824 04) to be loaded
> longer than 1000ms I/ActivityManager( 
> 486): Process
> com.amazon.identity.auth.device.authorization
> (pid 17819) has died D/UE4    
> (17845):
> [2016.06.29-04.21.42:114][-7646540]LogSerialization:Warning:
> Waiting for
> ../../../HeroQuest/Content/board/board_Tex.uasset
> bulk data (1308824 04) to be loaded
> longer than 1000ms I/ActivityManager( 
> 486): Process com.amazon.ags.app (pid
> 17912) has died I/DsService( 1091):
> DsService.onTrimMemory() level 15
> V/BackupManagerService(  486):
> Connected to Amazon transport in user
> 0 V/BackupManagerService(  486):
> Registering transport
> com.amazon.device.backup/.transport.BackupTransportService::com.amazon.device.backup/.transport.BackupTrans
> portService =
> com.android.internal.backup.IBackupTransport$Stub$Proxy@22d06e40
> in user 0 I/ActivityManager(  486):
> Process com.amazon.kindle.cms (pid
> 16096) has died I/DsService( 1091):
> DsService.onTrimMemory() level 15
> I/ActivityManager(  486): Process
> com.amazon.tahoe (pid 17765) has died
> E/lowmemorykiller(  156): Error
> writing /proc/17836/oom_score_adj;
> errno=22 E/JavaBinder(  486): !!!
> FAILED BINDER TRANSACTION !!!
> E/JavaBinder(  486): !!! FAILED BINDER
> TRANSACTION !!! W/ActivityManager( 
> 486): Exception when unbinding service
> com.amazon.alta.h2clientservice/.H2ClientService
> W/ActivityManager(  486):
> android.os.TransactionTooLargeException
> W/ActivityManager(  486):       at
> android.os.BinderProxy.transactNative(Native
> Method) W/ActivityManager(  486):     
> at
> android.os.BinderProxy.transact(Binder.java:496)
> W/ActivityManager(  486):       at
> android.app.ApplicationThreadProxy.scheduleUnbindService(ApplicationThreadNative.java:921)
> W/ActivityManager(  486):       at
> com.android.server.am.ActiveServices.removeConnectionLocked(ActiveServices.java:1864)
> W/ActivityManager(  486):       at
> com.android.server.am.ActiveServices.killServicesLocked(ActiveServices.java:2262)
> W/ActivityManager(  486):       at
> com.android.server.am.ActivityManagerService.cleanUpApplicationRecordLocked(ActivityManagerService.java:15827)
> W/ActivityManager(  486):       at
> com.android.server.am.ActivityManagerService.handleAppDiedLocked(ActivityManagerService.java:4910)
> W/ActivityManager(  486):       at
> com.android.server.am.ActivityManagerService.appDiedLocked(ActivityManagerService.java:5078)
> W/ActivityManager(  486):       at
> com.android.server.am.ActivityManagerService$AppDeathRecipient.binderDied(ActivityManagerService.java:1304)
> W/ActivityManager(  486):       at
> android.os.BinderProxy.sendDeathNotice(Binder.java:551)
> E/lowmemorykiller(  156): Error
> opening /proc/17836/oom_score_adj;
> errno=2 I/ActivityManager(  486):
> Process
> com.amazon.alta.h2clientservice (pid
> 17836) has died E/lowmemorykiller( 
> 156): Error opening
> /proc/17836/oom_score_adj; errno=2
> I/ActivityManager(  486): Process
> com.amazon.device.settings (pid 16117)
> has died I/ActivityManager(  486):
> Process
> com.google.android.gms.persistent (pid
> 16386) has died W/ActivityManager( 
> 486): Scheduling restart of crashed
> service
> com.google.android.gms/com.google.android.location.internal.GoogleLocationManagerService
> in 1000 0ms W/ActivityManager(  486):
> Scheduling restart of crashed service
> com.google.android.gms/.deviceconnection.service.DeviceConnectionServiceBroker
> in 19999ms W/ActivityManager(  486):
> Scheduling restart of crashed service
> com.google.android.gms/.common.stats.GmsCoreStatsService
> in 29999ms W/ActivityManager(  486):
> Scheduling restart of crashed service
> com.google.android.gms/com.google.android.location.internal.server.GoogleLocationService
> in 3999 9ms W/ActivityManager(  486):
> Scheduling restart of crashed service
> com.google.android.gms/com.google.android.contextmanager.service.ContextManagerService
> in 49998m s D/WifiService(  486):
> Client connection lost with reason: 4
> D/WifiService(  486): Client
> connection lost with reason: 4
> I/ActivityManager(  486): Process
> android.process.media (pid 17537) has
> died W/ActivityManager(  486):
> Scheduling restart of crashed service
> com.android.providers.media/.MtpService
> in 396116ms I/ActivityManager(  486):
> Process com.google.process.gapps (pid
> 16435) has died W/ActivityManager( 
> 486): Scheduling restart of crashed
> service
> com.google.android.gms/.gcm.GcmService
> in 70081ms I/WindowState(  486): WIN
> DEATH: Window{3824c3f2 u0
> com.amazon.firelauncher/com.amazon.firelauncher.Launcher}
> E/WifiService(  486): Multicaster
> binderDied D/WifiService(  486):
> Client connection lost with reason: 4
> E/libprocessgroup(  486): failed to
> kill 1 processes for processgroup
> 16059 I/ActivityManager(  486):
> Process com.amazon.firelauncher (pid
> 16059) has died E/lowmemorykiller( 
> 156): Error opening
> /proc/17972/oom_score_adj; errno=2
> I/ActivityManager(  486): Process
> com.amazon.venezia (pid 17972) has
> died W/ActivityManager(  486):
> Scheduling restart of crashed service
> com.amazon.venezia/com.amazon.sdk.availability.AvailabilityService
> in 79736ms I/ActivityManager(  486):
> Process
> com.amazon.whisperlink.core.android
> (pid 17591) has died
> W/ActivityManager(  486): Scheduling
> restart of crashed service
> com.amazon.whisperlink.core.android/.WhisperLinkCoreService
> in 37025792ms W/ActivityManager( 
> 486): Scheduling restart of crashed
> service
> com.amazon.whisperlink.activityview.android/.service.NotificationService
> in 43214848ms D/UE4     (17845):
> [2016.06.29-04.21.43:450][-7646540]LogAIModule:
> Creating AISystem for world TheOneMap
> D/UE4     (17845):
> [2016.06.29-04.21.43:492][-7646540]LogWorld: Game class is 'HqGameModeBp_C' D/UE4  
> (17845):
> [2016.06.29-04.21.43:493][-7646540]HeroQuestLog:
> AHeroQuestGameMode ctor D/UE4    
> (17845):
> [2016.06.29-04.21.43:493][-7646540]HeroQuestLog:
> StaticMeshManager::Init() a D/UE4    
> (17845):
> [2016.06.29-04.21.43:494][-7646540]HeroQuestLog:
> StaticMeshManager::Init() b D/UE4    
> (17845):
> [2016.06.29-04.21.43:939][-7646540]LogWorld: Bringing World
> /Game/TheOneMap.TheOneMap up for play
> (max tick rate 0) at
> 2016.06.28-23.21.43 D/UE4     (17845): [2016.06.29-04.21.44:003][-7646540]LogWorld: Bringing up level for play took:
> 0.301205 D/UE4     (17845): [2016.06.29-04.21.44:041][-7646540]LogGameMode:
> Warning - PATHS NOT DEFINED or NO
> PLAYERSTART with positive rating
> I/ActivityManager(  486): Process
> com.nuance.swype.input:SwypeConnect
> (pid 16318) has died
> W/ActivityManager(  486): Scheduling
> restart of crashed service
> com.nuance.swype.input/com.nuance.swype.connect.ConnectClient
> in 89044ms I/ActivityManager(  486):
> Process com.nuance.swype.input (pid
> 16260) has died W/ActivityManager( 
> 486): Scheduling restart of crashed
> service
> com.nuance.swype.input/.AmazonIME in
> 89041ms E/libEGL  (17845): called
> unimplemented OpenGL ES API
> I/ActivityManager(  486): Process
> com.amazon.platform (pid 17144) has
> died W/ActivityManager(  486):
> Scheduling restart of crashed service
> com.amazon.platform/com.amazon.geo.platform.GeoDeviceService
> in 89002ms I/ActivityManager(  486):
> Process com.here.odnp.service:remote
> (pid 17508) has died
> W/ActivityManager(  486): Scheduling
> restart of crashed service
> com.here.odnp.service/.LocationService
> in 98978ms D/WifiService(  486):
> Client connection lost with reason: 4
> D/UE4     (17845):
> [2016.06.29-04.21.44:239][-7646540]HeroQuestLog:
> AHeroQuestGameMode::BeginPlay() start
> D/UE4     (17845):
> [2016.06.29-04.21.44:239][-7646540]HeroQuestLog:
> zzzz XML BEGIN HQMap::GenerateMap()
> D/UE4     (17845):
> [2016.06.29-04.21.45:034][-7646540]LogLoad:
> Took 8.376545 seconds to
> LoadMap(/Game/TheOneMap) D/UE4    
> (17845):
> [2016.06.29-04.21.45:037][-7646540]LogInit:Display: Game Engine Initialized.
> I/libprocessgroup(  486): Killing pid
> 16205 in uid 32033 as part of process
> group 16076 I/libprocessgroup(  486):
> Killing pid 16205 in uid 32033 as part
> of process group 16076
> I/libprocessgroup(  486): Killing pid
> 16205 in uid 32033 as part of process
> group 16076 I/libprocessgroup(  486):
> Killing pid 16205 in uid 32033 as part
> of process group 16076
> I/libprocessgroup(  486): Killing pid
> 16205 in uid 32033 as part of process
> group 16076 I/libprocessgroup(  486):
> Killing pid 16205 in uid 32033 as part
> of process group 16076
> I/libprocessgroup(  486): Killing pid
> 16205 in uid 32033 as part of process
> group 16076 I/libprocessgroup(  486):
> Killing pid 16205 in uid 32033 as part
> of process group 16076
> V/BackupManagerService(  486):
> Disconnected from Amazon transport in
> user 0 V/BackupManagerService(  486):
> Registering transport
> com.amazon.device.backup/.transport.BackupTransportService::com.amazon.device.backup/.transport.BackupTrans
> portService = null in user 0
> I/libprocessgroup(  486): Killing pid
> 16205 in uid 32033 as part of process
> group 16076 I/ActivityManager(  486):
> Process com.amazon.client.metrics (pid
> 16076) has died W/ActivityManager( 
> 486): Scheduling restart of crashed
> service
> com.amazon.client.metrics/.AndroidMetricsServiceAdapter
> in 105756ms I/ActivityManager(  486):
> Process com.amazon.device.backup (pid
> 18075) has died W/ActivityManager( 
> 486): Scheduling restart of crashed
> service
> com.amazon.device.backup/.transport.BackupTransportService
> in 541876ms W/InputDispatcher(  486):
> channel '3ab0c051
> com.PemCode.HeroQuest/com.epicgames.ue4.GameActivity
> (server)' ~ Consumer closed input
> channel or an error occurred.  
> events=0x9 E/InputDispatcher(  486):
> channel '3ab0c051
> com.PemCode.HeroQuest/com.epicgames.ue4.GameActivity
> (server)' ~ Channel is unrecoverably
> broken and will be dispose d!
> W/InputDispatcher(  486): channel
> '14f198a8
> com.PemCode.HeroQuest/com.epicgames.ue4.GameActivity
> (server)' ~ Consumer closed input
> channel or an error occurred.  
> events=0x9 E/InputDispatcher(  486):
> channel '14f198a8
> com.PemCode.HeroQuest/com.epicgames.ue4.GameActivity
> (server)' ~ Channel is unrecoverably
> broken and will be dispose d!
> I/ActivityManager(  486): Process
> com.PemCode.HeroQuest (pid 17845) has
> died I/WindowState(  486): WIN DEATH:
> Window{14f198a8 u0
> com.PemCode.HeroQuest/com.epicgames.ue4.GameActivity}
> W/InputDispatcher(  486): Attempted to
> unregister already unregistered input
> channel '14f198a8
> com.PemCode.HeroQuest/com.epicgames.ue4.GameActivity
> (server)' W/WindowManager(  486):
> Force-removing child win
> Window{2bf876a7 u0 SurfaceView} from
> container Window{14f198a8 u0
> com.PemCode.HeroQuest/com.epicgames.ue4.GameA
> ctivity} I/WindowState(  486): WIN
> DEATH: Window{3ab0c051 u0
> com.PemCode.HeroQuest/com.epicgames.ue4.GameActivity}
> W/InputDispatcher(  486): Attempted to
> unregister already unregistered input
> channel '3ab0c051
> com.PemCode.HeroQuest/com.epicgames.ue4.GameActivity
> (server)' W/ActivityManager(  486):
> Force removing ActivityRecord{2386a660
> u0
> com.PemCode.HeroQuest/com.epicgames.ue4.GameActivity
> t108}: app died, no saved state
> W/WindowManager(  486): Failed looking
> up window W/WindowManager(  486):
> java.lang.IllegalArgumentException:
> Requested window
> android.os.BinderProxy@2b18c366 does
> not exist W/WindowManager(  486):     
> at
> com.android.server.wm.WindowManagerService.windowForClientLocked(WindowManagerService.java:9131)
> W/WindowManager(  486):         at
> com.android.server.wm.WindowManagerService.windowForClientLocked(WindowManagerService.java:9122)
> W/WindowManager(  486):         at
> com.android.server.wm.WindowState$DeathRecipient.binderDied(WindowState.java:1156)
> W/WindowManager(  486):         at
> android.os.BinderProxy.sendDeathNotice(Binder.java:551)
> I/WindowState(  486): WIN DEATH: null
> W/AmazonGidPackageManagerCallback( 
> 486): Launching
> com.amazon.firelauncher (32134) with
> AMZ_APP_GID W/art     (  217):
> PreZygoteFork called when we already
> have a zygote space.
> I/ActivityManager(  486): Start proc
> 18101:com.amazon.firelauncher/u0a22134
> for activity
> com.amazon.firelauncher/.Launcher
> D/BatteryStatsExtension.VitalEmitterBatteryAndTime(
> 486):
> VitalEmitterBatteryAndTime.start(-):
> not runnable
> W/AmazonGidPackageManagerCallback( 
> 486): Launching com.amazon.venezia
> (32095) with AMZ_APP_GID W/art     ( 
> 217): PreZygoteFork called when we
> already have a zygote space.
> I/ActivityManager(  486): Start proc
> 18118:com.amazon.venezia/u0a22095 for
> broadcast
> com.amazon.venezia/com.amazon.mas.client.ads.MobileAdsRegistrationReceiver
> V/GameCircleVendorCallback(  486):
> getImpliedSystemUiVisibility
> V/WindowManager(  486): Adding window
> Window{13be4a3b u0 Starting
> com.amazon.firelauncher} at 2 of 7
> (after Window{520c770 u0
> com.android.systemui/com.android.s
> ystemui.recents.RecentsActivity})
> D/VendorDisplayManagerGlobalCallback(18101):
> callGetInstance: nil
> D/VendorDisplayManagerGlobalCallback(18118):
> callGetInstance: nil
> I/ActivityManager(  486): Waited long
> enough for: ServiceRecord{21f22636 u0
> com.amazon.venezia/com.amazon.sdk.availability.AvailabilityService}
> W/AmazonGidPackageManagerCallback( 
> 486): Launching
> com.amazon.client.metrics (32033) with
> AMZ_APP_GID W/art     (  217):
> PreZygoteFork called when we already
> have a zygote space.
> I/ActivityManager(  486): Start proc
> 18136:com.amazon.client.metrics/u0a22033
> for service
> com.amazon.client.metrics/.AndroidMetricsServiceAdapter
> D/ActivityManager(  486): app =
> com.amazon.client.metrics, has single
> user service, setting process record!
> I/art     (  217): Explicit concurrent
> mark sweep GC freed 8676(368KB)
> AllocSpace objects, 0(0B) LOS objects,
> 39% free, 2MB/4MB, paused 557us total
> 38.764ms I/art     (  217): Explicit concurrent mark sweep GC freed 5(160B)
> AllocSpace objects, 0(0B) LOS objects,
> 39% free, 2MB/4MB, paused 383us total
> 23.269ms D/VendorDisplayManagerGlobalCallback(18136):
> callGetInstance: nil I/art     ( 
> 217): Explicit concurrent mark sweep
> GC freed 5(160B) AllocSpace objects,
> 0(0B) LOS objects, 39% free, 2MB/4MB,
> paused 214us total 15.600ms
> W/AmazonGidPackageManagerCallback( 
> 486): Launching
> com.amazon.device.settings (32039)
> with AMZ_APP_GID W/art     (  217):
> PreZygoteFork called when we already
> have a zygote space.
> I/ActivityManager(  486): Start proc
> 18157:com.amazon.device.settings/u0a22039
> for content provider
> com.amazon.device.settings/.SettingsProvider
> D/ActivityManager(  486): single user
> service: com.amazon.kindle.cms
> W/AmazonGidPackageManagerCallback( 
> 486): Launching com.amazon.kindle.cms
> (32073) with AMZ_APP_GID W/art     ( 
> 217): PreZygoteFork called when we
> already have a zygote space.
> I/ActivityManager(  486): Start proc
> 18177:com.amazon.kindle.cms/u0a22073
> for service
> com.amazon.kindle.cms/.CMSService
> D/ActivityManager(  486): app =
> com.amazon.kindle.cms, has single user
> service, setting process record!
> D/VendorDisplayManagerGlobalCallback(18157):
> callGetInstance: nil
> D/VendorDisplayManagerGlobalCallback(18177):
> callGetInstance: nil
> I/FrameworkJumpTable(18101):
> Successfully loaded all classes
> I/FrameworkJumpTable(18101):
> Successfully loaded all methods
> I/FrameworkJumpTable(18101):
> Successfully loaded all fields

Update 2016/06/29: here’s another data point. My APK is 36.8 MB and my OBB is 137 MB. I read that for Google Play Store the APK needs to be less than 50 MB. I don’t think this is relevant to me for two reasons. One, my APK is less than 50 MB (it’s 36.8MB) - I’m assuming this doesn’t include the OBB file? Two, I think that’s for Google Play Store. I’m not trying to do Google Play Store yet. At thsi point I’m just trying to upload the app onto my Kindle Fire via USB by running “Install_HeroQuest_DebugGame-armv7-es2.bat” that was created via File → Package Project → Android → Android (ETC1).

Update 2016/06/29: is the (E/libEGL (11423): called unimplemented OpenGL ES API) call normal? How can I even tell if that’s from my game or something else - the (adb devices) log has so much noise… Assuming it’s from my game… I don’t think it means UE4 doesn’t work on my Kindle Fire because I was able to run the ThirdPerson example… Unless it means some specific subset of UE4 calls an unsupported GLES API call?

Update 2016/06/29: I figured it out on my own. Here’s my notes in case it helps someone…

My game has a large texture (board_Tex.uasset) that is used as a material which is used by a single static mesh actor. I changed the static mesh actor to no longer use board_Tex.uasset (and instead use some other material). With this edit, I am now able to see my game run on my Kindle Fire.

board_Tex.uasset is 86.0 MB. The source file is a 68.9 png with the dimensions 6387x5123. A quick web search suggests that that 2048x2048 is a normal max texture size for OpenGLES 2.0 devices. I even found a UE4 document on this ( Rendering Features for Mobile Games in Unreal Engine | Unreal Engine 5.2 Documentation ). So I used mspaint to resize my source file png to 2048x1642.

Before using UE4 I was making small cross-platform GLES2 demos “from scratch” so I had already been exposed to GLES2 issues like this… I’m actually surprised UE4 doesn’t automatically handle this and/or print a warning (or error) somewhere.

How could UE4 handle it? In theory UE4 could cut the texture up into multiple textures and automatically modify your assets texture coordinates to handle this - though I realize that seems convoluted. A simpler way to handle it would be to just warn the developer about it. The warning could be printed when a developer uses the editor to import a texture bigger 2048x2048. And/or a warning could be printed on the command line during packaging. And/or when the game starts up in Android a warning could be printed to the (adb logcat -s UE4 -s Debug) log.