ClearScript icon indicating copy to clipboard operation
ClearScript copied to clipboard

Android V8 Support

Open KurtGokhan opened this issue 3 years ago • 8 comments

This PR partially adds support for using V8 with ClearScript in Android Mono. It is partial because it requires some manual steps, and it uses some solutions which can be considered as hacks.

The PR may not be up to merging standards but I opened it hoping that I can get some feedback or other people may find it useful.

Summary of what was done:

  • Adds -a flag to V8Update.sh, and ANDROID symbol to Makefile to build V8 for Android. It can build for arm and arm64 architectures and can only be built in Linux. To be able to build, it is required to install install-build-deps-android.sh of v8 as far as I can tell.
    • This builds ClearScriptV8.android-arm.so and ClearScriptV8.android-arm64.so but they need to be prefixed with lib like libClearScriptV8.android-arm.so otherwise DLLImport can't find it when built with release configuration for some reason (works with debug though, I guess it is a Mono bug).
  • Added HostSettings.IsAndroid to tell the ClearScript that current platform is Android. The user must set this setting to true in Android platforms. (For example, I am using #if UNITY_ANDROID build flag to conditionally add it)
    • This is because .NET (and Mono) cannot differentiate between Android and Linux so I had to add this setting. Likewise it incorrectly reports Arm as X86 so I had to add some hacks for that.
  • Added interfaces to Android native libraries. They were similar to Linux so it was fairly easy.

KurtGokhan avatar Sep 12 '21 15:09 KurtGokhan

Hi @KurtGokhan,

Thanks so much for contributing! At the moment we're focused on the next point release, so we'll evaluate Android support a bit later – most likely toward the end of the year.

Apparently .NET 6 will support Android and iOS in some capacity; that could eliminate the need for new APIs such as HostSettings.IsAndroid, but we'll have to wait to know for sure. Our preference would be for ClearScript to be aligned with official .NET mobile support – whatever that ends up looking like.

Thanks again!

ClearScriptLib avatar Sep 13 '21 13:09 ClearScriptLib

Hi @KurtGokhan,

Thanks so much for contributing! At the moment we're focused on the next point release, so we'll evaluate Android support a bit later – most likely toward the end of the year.

Apparently .NET 6 will support Android and iOS in some capacity; that could eliminate the need for new APIs such as HostSettings.IsAndroid, but we'll have to wait to know for sure. Our preference would be for ClearScript to be aligned with official .NET mobile support – whatever that ends up looking like.

Thanks again!

image Seems the latest .net 6 rc2 still does not have "android" as an os platform option...

nextfool avatar Oct 18 '21 07:10 nextfool

Hi @KurtGokhan so I am now able to build the arm64 version for android. how ever I also want to build x86 from android, so I just start the command like this: make -f Unix/Makefile CPU=x86 ANDROID=1 every thing runs perfectly until here: image

I checked the "build-android-x86-release.log" and the detail error is this: image

it seems the libatomic library is missing, but when I try to install it , it says image

Can you please point me out whats goes wrong here? Thank you very much!

nextfool avatar Oct 19 '21 05:10 nextfool

@nextfool you are probably missing one of the build dependencies. Try running build-dependencies.sh once in the v8 folder before trying to build.

KurtGokhan avatar Oct 19 '21 10:10 KurtGokhan

Sorry, the correct file name is install-build-deps-android.sh and it is under V8/build/v8/build.

KurtGokhan avatar Oct 19 '21 12:10 KurtGokhan

Tested with 7.1.7 and works well. install-build-deps-android.sh must be run again with the new V8 version before building.

KurtGokhan avatar Oct 23 '21 18:10 KurtGokhan

This does not work currently. Can't build the V8 Android library anymore with the current V8 source code. Android NDK removed linkers I used so the build scripts must be changed. I haven't figured how yet.

KurtGokhan avatar Apr 13 '22 11:04 KurtGokhan

I didn't have time to update this PR so converting it to draft. PR can be closed if not needed anymore.

KurtGokhan avatar Jun 16 '22 13:06 KurtGokhan