I have a several web application that I want to be able to run through a webview in a native android application. I am currently embedding a crosswalk browser and loading the applications in that. It works great for some of the web applications but as the size of the web application increases I get errors that crash my android application.
Things I have tried:
- android:largeHeap="true" - helped I was able to run larger web applications.
- android:hardwareAccelerated="true" - helped I got better performance.
- xwalk-command-line='--ignore-gpu-blacklist' in assets/xwalk-commandline - also helps
There are still some web applications (created through unity) that required me to allocate about 1Gb when I was creating them for desktop testing. I am will be using this android app on the newest phones and would be ok with such a high memory usage.
It works if I try to open this application on a desktop browser so that is what leads me to believe that it is a memory allocation issue. I am using crosswalk 17 which has webGL enabled and the smaller applications run webgl just fine.
I have a few questions:
- Is there a way to force the crosswalk embedded browser to allocate 1GB of memory for itself. (I know this is going to crush my device and is probably not great but please indulge me)
- Can I expand my application's memory usage beyond largeHeap. If so how? And do I need to do so to enable such large web applications?
- Are there any issues that I am missing that are possibly masking the real issues here.
- I know this type of application would only ever run on the newest kinds of phones. what are the repercussions for an application that has such a high memory usage?
- Are there any other avenues I should explore to enable me to run large web applications within an android app?
Here are the answers to the FAQs of stack overflow users :)
Xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.mycompany.myproject.webapplicationActivity">
<org.xwalk.core.XWalkView
android:id="@+id/xwalkWebView"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#000000"
/>
</RelativeLayout>
Activity onCreate:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.webapplicationActivity);
xWalkWebView=(XWalkView)findViewById(R.id.xwalkWebView);
// turn on debugging
XWalkPreferences.setValue(XWalkPreferences.REMOTE_DEBUGGING, true);
xWalkWebView.setKeepScreenOn(true);
xWalkWebView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
String urlToBeLoaded = "http://www.google.com";
Bundle bundle = getIntent().getExtras();
if (savedInstanceState == null) {
Bundle extras = getIntent().getExtras();
if(extras == null) {
Log.i(TAG,"error in reading extras");
} else {
urlToBeLoaded = extras.getString("url");
}
}
xWalkWebView.load(urlToBeLoaded, null);
Permissions
*Crosswalk requires a lot of these and I am using the remainder. But maybe there is a conflict there.
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
ADB logcat
GL : validate_display:255 error 3008 (EGL_BAD_DISPLAY)
02-17 18:11:55.862 23023 23023 W art : Attempt to remove non-JNI local reference, dumping thread
02-17 18:11:55.903 4335 4448 I ActivityManager: Displayed com.mycompany.myProject/.GamePlayActivity: +464ms
02-17 18:11:55.904 23023 23023 W cr.BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 23023
02-17 18:11:55.904 22463 22463 I Keyboard.Facilitator: onFinishInput()
02-17 18:11:55.931 23023 23023 E chromium: [ERROR:layer_tree_host_impl.cc(2121)] Forcing zero-copy tile initialization as worker context is missing
02-17 18:11:55.980 4335 4448 I WindowManager: Screen frozen for +541ms due to Window{f87dd7b u0 com.mycompany.myProject/com.mycompany.myProject.GamePlayActivity}
02-17 18:11:57.987 4335 4448 I art : Starting a blocking GC Explicit
02-17 18:11:58.205 4335 4448 I art : Explicit concurrent mark sweep GC freed 12393(780KB) AllocSpace objects, 5(100KB) LOS objects, 23% free, 52MB/68MB, paused 1.298ms total 216.765ms
02-17 18:11:58.206 4335 15896 W InputMethodManagerService: Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@3b6394f attribute=null, token = android.os.BinderProxy@d44f10a
02-17 18:11:58.726 23023 23023 I chromium: [INFO:CONSOLE(1)] "Decompressed Release/StuntRunner_WebGL.memgz in 254ms. You can remove this delay if you configure your web server to host files using gzip compression.", source: https://<source>/Release/UnityLoader.js (1)
02-17 18:11:59.103 22037 22037 I ServiceManager: Waiting for service AtCmdFwd...
02-17 18:11:59.663 23023 23023 I chromium: [INFO:CONSOLE(1)] "Decompressed Release/StuntRunner_WebGL.jsgz in 853ms. You can remove this delay if you configure your web server to host files using gzip compression.", source: https://<source>/Release/UnityLoader.js (1)
02-17 18:11:59.985 23023 23023 I chromium: [INFO:CONSOLE(1)] "optimizing out Math.fround calls", source: https://<source>/Release/UnityLoader.js (1)
02-17 18:12:00.103 22037 22037 I ServiceManager: Waiting for service AtCmdFwd...
02-17 18:12:01.104 22037 22037 I ServiceManager: Waiting for service AtCmdFwd...
02-17 18:12:02.105 22037 22037 I ServiceManager: Waiting for service AtCmdFwd...
02-17 18:12:03.105 22037 22037 I ServiceManager: Waiting for service AtCmdFwd...
02-17 18:12:03.174 4335 22386 D NetlinkSocketObserver: NeighborEvent{elapsedMs=775340136, 192.168.1.1, [100D7F6DFA6E], RTM_NEWNEIGH, NUD_REACHABLE}
02-17 18:12:04.106 22037 22037 W Atfwd_Sendcmd: AtCmdFwd service not published, waiting... retryCnt : 5
02-17 18:12:10.387 4335 6452 D ConnectivityService: ConnectivityService NetworkRequestInfo binderDied(NetworkRequest [ id=842, legacyType=-1, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN] ], android.os.BinderProxy@82c1e86)
02-17 18:12:10.392 4335 6549 I ActivityManager: Process com.instagram.android (pid 14465) has died
02-17 18:12:10.409 4335 5621 D ConnectivityService: releasing NetworkRequest NetworkRequest [ id=842, legacyType=-1, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN] ]
02-17 18:12:10.504 4335 5621 E ConnectivityService: RemoteException caught trying to send a callback msg for NetworkRequest [ id=842, legacyType=-1, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN] ]
02-17 18:12:10.781 23023 23263 F libc : Fatal signal 4 (SIGILL), code 1, fault addr 0xd3781358 in tid 23263 (Chrome_InProcRe)
02-17 18:12:10.886 3293 3293 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
02-17 18:12:10.887 3293 3293 F DEBUG : Build fingerprint: 'google/angler/angler:6.0.1/MMB29P/2473553:user/release-keys'
02-17 18:12:10.887 3293 3293 F DEBUG : Revision: '0'
02-17 18:12:10.887 3293 3293 F DEBUG : ABI: 'arm'
02-17 18:12:10.887 3293 3293 F DEBUG : pid: 23023, tid: 23263, name: Chrome_InProcRe >>> com.mycompany.myProject <<<
02-17 18:12:10.887 3293 3293 F DEBUG : signal 4 (SIGILL), code 1 (ILL_ILLOPC), fault addr 0xd3781358
02-17 18:12:10.933 3293 3293 F DEBUG : r0 d5366044 r1 40005000 r2 0855d000 r3 02182000
02-17 18:12:10.933 3293 3293 F DEBUG : r4 d5366044 r5 40000000 r6 00000000 r7 00000000
02-17 18:12:10.933 3293 3293 F DEBUG : r8 40005000 r9 d66d4050 sl 40000000 fp d66bee10
02-17 18:12:10.934 3293 3293 F DEBUG : ip f70ff624 sp d66bed40 lr d3dfa5e1 pc d3781358 cpsr 80030030
02-17 18:12:10.938 3293 3293 F DEBUG :
02-17 18:12:10.938 3293 3293 F DEBUG : backtrace:
02-17 18:12:10.926 3293 3293 W debuggerd: type=1400 audit(0.0:9681): avc: denied { read } for name="kgsl-3d0" dev="tmpfs" ino=1150 scontext=u:r:debuggerd:s0 tcontext=u:object_r:gpu_device:s0 tclass=chr_file permissive=0
02-17 18:12:10.938 3293 3293 F DEBUG : #00 pc 001e3358 /data/app/com.mycompany.myProject-1/lib/arm/libxwalkcore.so
02-17 18:12:10.938 3293 3293 F DEBUG : #01 pc 0085c5dd /data/app/com.mycompany.myProject-1/lib/arm/libxwalkcore.so
02-17 18:12:11.276 3293 3293 W debuggerd: type=1400 audit(0.0:9682): avc: denied { read } for name="kgsl-3d0" dev="tmpfs" ino=1150 scontext=u:r:debuggerd:s0 tcontext=u:object_r:gpu_device:s0 tclass=chr_file permissive=0
02-17 18:12:11.817 4335 23497 W ActivityManager: Force finishing activity com.mycompany.myProject/.GamePlayActivity
02-17 18:12:11.818 3293 3293 F DEBUG :
02-17 18:12:11.818 3293 3293 F DEBUG : Tombstone written to: /data/tombstones/tombstone_05
02-17 18:12:11.818 3293 3293 E DEBUG : AM write failed: Broken pipe
02-17 18:12:11.890 4335 22149 I OpenGLRenderer: Initialized EGL, version 1.4
02-17 18:12:11.987 4335 5717 D GraphicsStats: Buffer count: 4
02-17 18:12:11.989 4335 5980 I WindowState: WIN DEATH: Window{def3a97 u0 com.mycompany.myProject/com.mycompany.myProject.LibraryActivity}
02-17 18:12:11.994 4335 5709 I WindowState: WIN DEATH: Window{9ffe3af u0 com.mycompany.myProject/com.mycompany.myProject.LoginActivity}
02-17 18:12:11.996 4335 4351 I WindowState: WIN DEATH: Window{ee84425 u0 com.mycompany.myProject/com.mycompany.myProject.GameDescriptionActivity}
02-17 18:12:11.999 4335 7252 I WindowState: WIN DEATH: Window{a09b55b u0 SurfaceView}
02-17 18:12:12.001 4335 5717 I WindowState: WIN DEATH: Window{f87dd7b u0 com.mycompany.myProject/com.mycompany.myProject.GamePlayActivity}
02-17 18:12:12.022 3309 3309 I Zygote : Process 23023 exited due to signal (4)
02-17 18:12:12.024 4335 28075 I ActivityManager: Process com.mycompany.myProject (pid 23023) has died
02-17 18:12:12.073 4335 28075 I ActivityManager: Start proc 23507:com.mycompany.myProject/u0a179 for activity com.mycompany.myProject/.GameDescriptionActivity
02-17 18:12:12.076 23507 23507 I art : Late-enabling -Xcheck:jni
Thank you in advance!
I had a problem like that. I thought this problem came with ads like adsense or some went wrong with JavaScript
Try
I hope that helps you