diff --git a/.github/workflows/IKVM.yml b/.github/workflows/IKVM.yml
index 4c3345ea88..7fabb007ca 100644
--- a/.github/workflows/IKVM.yml
+++ b/.github/workflows/IKVM.yml
@@ -88,6 +88,7 @@ jobs:
if: runner.os == 'Linux'
uses: jlumbroso/free-disk-space@main
with:
+ android: false
swap-storage: false
- name: Checkout Source
uses: actions/checkout@v4
diff --git a/Directory.Build.props b/Directory.Build.props
index b21c579650..a3636ec3b2 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -1,18 +1,18 @@
- win-x64;win-x86;win-arm64;linux-x64;linux-arm;linux-arm64;linux-musl-x64;linux-musl-arm;linux-musl-arm64;osx-x64;osx-arm64
+ win-x64;win-x86;win-arm64;linux-x64;linux-arm;linux-arm64;linux-musl-x64;linux-musl-arm;linux-musl-arm64;osx-x64;osx-arm64;android-arm;android-arm64
$(SupportedRuntimes)
+ win-x64;win-x86;win-arm64;linux-x64;linux-arm;linux-arm64;linux-musl-x64;linux-musl-arm;linux-musl-arm64;osx-x64;osx-arm64;android-arm;android-arm64
+ $(SupportedImageRuntimes)
win-x64;win-arm64;linux-x64;linux-arm;linux-arm64;linux-musl-x64;linux-musl-arm;linux-musl-arm64;osx-x64;osx-arm64
$(SupportedToolRuntimes)
- win-x64;win-x86;win-arm64;linux-x64;linux-arm;linux-arm64;linux-musl-x64;linux-musl-arm;linux-musl-arm64;osx-x64;osx-arm64
- $(SupportedImageRuntimes)
<_SupportedRuntimes>;$(SupportedRuntimes);
<_EnabledRuntimes>;$(EnabledRuntimes);
- <_SupportedToolRuntimes>;$(SupportedToolRuntimes);
- <_EnabledToolRuntimes>;$(EnabledToolRuntimes);
<_SupportedImageRuntimes>;$(SupportedImageRuntimes);
<_EnabledImageRuntimes>;$(EnabledImageRuntimes);
+ <_SupportedToolRuntimes>;$(SupportedToolRuntimes);
+ <_EnabledToolRuntimes>;$(EnabledToolRuntimes);
@@ -99,7 +99,7 @@
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
diff --git a/IKVM.sln b/IKVM.sln
index ee294afdbc..b7e472fd15 100644
--- a/IKVM.sln
+++ b/IKVM.sln
@@ -349,6 +349,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IKVM.Benchmarks", "src\IKVM
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IKVM.Benchmarks.Java", "src\IKVM.Benchmarks.Java\IKVM.Benchmarks.Java.csproj", "{9F5CDC85-BCD8-468E-9FC6-4DC9E3A576D0}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IKVM.Image.runtime.android-arm64", "src\IKVM.Image.runtime.android-arm64\IKVM.Image.runtime.android-arm64.csproj", "{843B0704-DA5E-4357-B683-3D6F64DEF57B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IKVM.Image.runtime.android-arm", "src\IKVM.Image.runtime.android-arm\IKVM.Image.runtime.android-arm.csproj", "{72994D7F-A9A8-45F9-A74B-0718DD192943}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -939,6 +943,14 @@ Global
{9F5CDC85-BCD8-468E-9FC6-4DC9E3A576D0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9F5CDC85-BCD8-468E-9FC6-4DC9E3A576D0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9F5CDC85-BCD8-468E-9FC6-4DC9E3A576D0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {843B0704-DA5E-4357-B683-3D6F64DEF57B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {843B0704-DA5E-4357-B683-3D6F64DEF57B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {843B0704-DA5E-4357-B683-3D6F64DEF57B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {843B0704-DA5E-4357-B683-3D6F64DEF57B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {72994D7F-A9A8-45F9-A74B-0718DD192943}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {72994D7F-A9A8-45F9-A74B-0718DD192943}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {72994D7F-A9A8-45F9-A74B-0718DD192943}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {72994D7F-A9A8-45F9-A74B-0718DD192943}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/ext/openjdk b/ext/openjdk
index da7fb6cbfa..f2320fd28b 160000
--- a/ext/openjdk
+++ b/ext/openjdk
@@ -1 +1 @@
-Subproject commit da7fb6cbfaecdabd7630acbdc0d74a68c310fcd9
+Subproject commit f2320fd28b8edc0b410e96a583880ab57c0225f0
diff --git a/src/IKVM.Image-bin/IKVM.Image-bin.csproj b/src/IKVM.Image-bin/IKVM.Image-bin.csproj
index de1f1e880e..7a560671f3 100644
--- a/src/IKVM.Image-bin/IKVM.Image-bin.csproj
+++ b/src/IKVM.Image-bin/IKVM.Image-bin.csproj
@@ -16,7 +16,7 @@
-
+
@@ -26,16 +26,16 @@
-
+
-
+
-
+
-
+
diff --git a/src/IKVM.Image.runtime.android-arm/IKVM.Image.runtime.android-arm.csproj b/src/IKVM.Image.runtime.android-arm/IKVM.Image.runtime.android-arm.csproj
new file mode 100644
index 0000000000..3ce48240b9
--- /dev/null
+++ b/src/IKVM.Image.runtime.android-arm/IKVM.Image.runtime.android-arm.csproj
@@ -0,0 +1,17 @@
+
+
+
+
+ net472;net6.0;net8.0
+ LICENSE.md
+ README.md
+ IKVM Runtime Image
+ false
+ android-arm
+ net6.0;net8.0
+
+
+
+
+
+
diff --git a/src/IKVM.Image.runtime.android-arm/README.md b/src/IKVM.Image.runtime.android-arm/README.md
new file mode 100644
index 0000000000..0a3a5b6614
--- /dev/null
+++ b/src/IKVM.Image.runtime.android-arm/README.md
@@ -0,0 +1,3 @@
+# IKVM.Image
+
+Native requirements for IKVM.Image.
diff --git a/src/IKVM.Image.runtime.android-arm/buildTransitive/IKVM.Image.runtime.android-arm.props b/src/IKVM.Image.runtime.android-arm/buildTransitive/IKVM.Image.runtime.android-arm.props
new file mode 100644
index 0000000000..0fe2d7c358
--- /dev/null
+++ b/src/IKVM.Image.runtime.android-arm/buildTransitive/IKVM.Image.runtime.android-arm.props
@@ -0,0 +1,24 @@
+
+
+ $(MSBuildAllProjects);$(MSBuildThisFileFullPath)
+
+
+
+
+ any
+ android-arm
+ %(RecursiveDir)%(FileName)%(Extension)
+
+
+ net6.0
+ android-arm
+ %(RecursiveDir)%(FileName)%(Extension)
+
+
+ net8.0
+ android-arm
+ %(RecursiveDir)%(FileName)%(Extension)
+
+
+
+
diff --git a/src/IKVM.Image.runtime.android-arm/lib/net472/_._ b/src/IKVM.Image.runtime.android-arm/lib/net472/_._
new file mode 100644
index 0000000000..5f282702bb
--- /dev/null
+++ b/src/IKVM.Image.runtime.android-arm/lib/net472/_._
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/IKVM.Image.runtime.android-arm/lib/net6.0/_._ b/src/IKVM.Image.runtime.android-arm/lib/net6.0/_._
new file mode 100644
index 0000000000..5f282702bb
--- /dev/null
+++ b/src/IKVM.Image.runtime.android-arm/lib/net6.0/_._
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/IKVM.Image.runtime.android-arm/lib/net8.0/_._ b/src/IKVM.Image.runtime.android-arm/lib/net8.0/_._
new file mode 100644
index 0000000000..5f282702bb
--- /dev/null
+++ b/src/IKVM.Image.runtime.android-arm/lib/net8.0/_._
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/IKVM.Image.runtime.android-arm64/IKVM.Image.runtime.android-arm64.csproj b/src/IKVM.Image.runtime.android-arm64/IKVM.Image.runtime.android-arm64.csproj
new file mode 100644
index 0000000000..eb1242d9c2
--- /dev/null
+++ b/src/IKVM.Image.runtime.android-arm64/IKVM.Image.runtime.android-arm64.csproj
@@ -0,0 +1,17 @@
+
+
+
+
+ net472;net6.0;net8.0
+ LICENSE.md
+ README.md
+ IKVM Runtime Image
+ false
+ android-arm64
+ net6.0;net8.0
+
+
+
+
+
+
diff --git a/src/IKVM.Image.runtime.android-arm64/README.md b/src/IKVM.Image.runtime.android-arm64/README.md
new file mode 100644
index 0000000000..0a3a5b6614
--- /dev/null
+++ b/src/IKVM.Image.runtime.android-arm64/README.md
@@ -0,0 +1,3 @@
+# IKVM.Image
+
+Native requirements for IKVM.Image.
diff --git a/src/IKVM.Image.runtime.android-arm64/buildTransitive/IKVM.Image.runtime.android-arm64.props b/src/IKVM.Image.runtime.android-arm64/buildTransitive/IKVM.Image.runtime.android-arm64.props
new file mode 100644
index 0000000000..b886d081e7
--- /dev/null
+++ b/src/IKVM.Image.runtime.android-arm64/buildTransitive/IKVM.Image.runtime.android-arm64.props
@@ -0,0 +1,24 @@
+
+
+ $(MSBuildAllProjects);$(MSBuildThisFileFullPath)
+
+
+
+
+ any
+ android-arm64
+ %(RecursiveDir)%(FileName)%(Extension)
+
+
+ net6.0
+ android-arm64
+ %(RecursiveDir)%(FileName)%(Extension)
+
+
+ net8.0
+ android-arm64
+ %(RecursiveDir)%(FileName)%(Extension)
+
+
+
+
diff --git a/src/IKVM.Image.runtime.android-arm64/lib/net472/_._ b/src/IKVM.Image.runtime.android-arm64/lib/net472/_._
new file mode 100644
index 0000000000..5f282702bb
--- /dev/null
+++ b/src/IKVM.Image.runtime.android-arm64/lib/net472/_._
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/IKVM.Image.runtime.android-arm64/lib/net6.0/_._ b/src/IKVM.Image.runtime.android-arm64/lib/net6.0/_._
new file mode 100644
index 0000000000..5f282702bb
--- /dev/null
+++ b/src/IKVM.Image.runtime.android-arm64/lib/net6.0/_._
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/IKVM.Image.runtime.android-arm64/lib/net8.0/_._ b/src/IKVM.Image.runtime.android-arm64/lib/net8.0/_._
new file mode 100644
index 0000000000..5f282702bb
--- /dev/null
+++ b/src/IKVM.Image.runtime.android-arm64/lib/net8.0/_._
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/IKVM.Image/IKVM.Image.csproj b/src/IKVM.Image/IKVM.Image.csproj
index a9b47afdfe..1b35c21273 100644
--- a/src/IKVM.Image/IKVM.Image.csproj
+++ b/src/IKVM.Image/IKVM.Image.csproj
@@ -23,6 +23,8 @@
+
+
diff --git a/src/IKVM.Image/IKVM.Image.runtime.targets b/src/IKVM.Image/IKVM.Image.runtime.targets
index d632f7f79a..9f89f89627 100644
--- a/src/IKVM.Image/IKVM.Image.runtime.targets
+++ b/src/IKVM.Image/IKVM.Image.runtime.targets
@@ -29,16 +29,16 @@
windows
- solaris
+ solaris
windows
- linux
+ linux
macosx
-
+
diff --git a/src/IKVM.Image/buildTransitive/IKVM.Image.targets b/src/IKVM.Image/buildTransitive/IKVM.Image.targets
index fa6a7729a7..3cab5988b0 100644
--- a/src/IKVM.Image/buildTransitive/IKVM.Image.targets
+++ b/src/IKVM.Image/buildTransitive/IKVM.Image.targets
@@ -5,7 +5,7 @@
-
+
diff --git a/src/IKVM.Java/IKVM.Java.runtime.props b/src/IKVM.Java/IKVM.Java.runtime.props
index 7de4381491..6023c43ac8 100644
--- a/src/IKVM.Java/IKVM.Java.runtime.props
+++ b/src/IKVM.Java/IKVM.Java.runtime.props
@@ -13,9 +13,9 @@
windows
- solaris
+ solaris
windows
- linux
+ linux
macosx
diff --git a/src/IKVM.MSBuild.Tests/IKVM.MSBuild.Tests.csproj b/src/IKVM.MSBuild.Tests/IKVM.MSBuild.Tests.csproj
index 0bcdb6c2bd..06cc3c2bb8 100644
--- a/src/IKVM.MSBuild.Tests/IKVM.MSBuild.Tests.csproj
+++ b/src/IKVM.MSBuild.Tests/IKVM.MSBuild.Tests.csproj
@@ -52,6 +52,8 @@
+
+
diff --git a/src/IKVM.NET.Sdk.Tests/IKVM.NET.Sdk.Tests.csproj b/src/IKVM.NET.Sdk.Tests/IKVM.NET.Sdk.Tests.csproj
index 29cc4b91f8..c4b30d230b 100644
--- a/src/IKVM.NET.Sdk.Tests/IKVM.NET.Sdk.Tests.csproj
+++ b/src/IKVM.NET.Sdk.Tests/IKVM.NET.Sdk.Tests.csproj
@@ -46,6 +46,8 @@
+
+
diff --git a/src/dist-nuget/dist-nuget.csproj b/src/dist-nuget/dist-nuget.csproj
index 093f3f31b3..b758544e4c 100644
--- a/src/dist-nuget/dist-nuget.csproj
+++ b/src/dist-nuget/dist-nuget.csproj
@@ -75,6 +75,12 @@
.
+
+ .
+
+
+ .
+
.
diff --git a/src/libawt/libawt.clangproj b/src/libawt/libawt.clangproj
index 08ff1b49ad..be92d70eb9 100644
--- a/src/libawt/libawt.clangproj
+++ b/src/libawt/libawt.clangproj
@@ -7,6 +7,7 @@
awt
dll
+ win-x64;win-x86;win-arm64;linux-arm;linux-arm64;linux-x64;linux-musl-arm;linux-musl-arm64;linux-musl-x64;osx-x64;osx-arm64
@@ -210,7 +211,7 @@
-
+
diff --git a/src/libfontmanager/libfontmanager.clangproj b/src/libfontmanager/libfontmanager.clangproj
index ad8df0a00d..ac0942be79 100644
--- a/src/libfontmanager/libfontmanager.clangproj
+++ b/src/libfontmanager/libfontmanager.clangproj
@@ -7,6 +7,7 @@
fontmanager
dll
+ win-x64;win-x86;win-arm64;linux-arm;linux-arm64;linux-x64;linux-musl-arm;linux-musl-arm64;linux-musl-x64;osx-x64;osx-arm64
@@ -43,7 +44,7 @@
-
+
diff --git a/src/libiava/libiava.clangproj b/src/libiava/libiava.clangproj
index 59f6b07c1f..df27270f10 100644
--- a/src/libiava/libiava.clangproj
+++ b/src/libiava/libiava.clangproj
@@ -90,7 +90,7 @@
-
+
diff --git a/src/libj2gss/libj2gss.clangproj b/src/libj2gss/libj2gss.clangproj
index a1e7a47a19..fa0b3851dc 100644
--- a/src/libj2gss/libj2gss.clangproj
+++ b/src/libj2gss/libj2gss.clangproj
@@ -18,7 +18,7 @@
-
+
diff --git a/src/libj2pkcs11/libj2pkcs11.clangproj b/src/libj2pkcs11/libj2pkcs11.clangproj
index 6a687e105d..6b76dff385 100644
--- a/src/libj2pkcs11/libj2pkcs11.clangproj
+++ b/src/libj2pkcs11/libj2pkcs11.clangproj
@@ -24,7 +24,7 @@
-
+
diff --git a/src/libjaas/libjaas.clangproj b/src/libjaas/libjaas.clangproj
index 7bcfcaa802..9d4ba56cbc 100644
--- a/src/libjaas/libjaas.clangproj
+++ b/src/libjaas/libjaas.clangproj
@@ -25,7 +25,7 @@
-
+
diff --git a/src/libjsound/libjsound.clangproj b/src/libjsound/libjsound.clangproj
index 2ba9bcb64e..02d20ed6be 100644
--- a/src/libjsound/libjsound.clangproj
+++ b/src/libjsound/libjsound.clangproj
@@ -7,7 +7,6 @@
jsound
dll
- win-x64;win-x86;win-arm64;linux-x64;linux-arm;linux-arm64;linux-musl-x64;linux-musl-arm;linux-musl-arm64
@@ -60,7 +59,7 @@
-
+
diff --git a/src/libjvm/jvm.cpp b/src/libjvm/jvm.cpp
index 38c6ddbff7..d216f2238e 100644
--- a/src/libjvm/jvm.cpp
+++ b/src/libjvm/jvm.cpp
@@ -14,7 +14,7 @@
#include
#endif
-#if defined LINUX || defined MACOS
+#if defined LINUX || defined MACOS || defined ANDROID
#include
#include
#include
@@ -25,6 +25,7 @@
#include
#include
#include
+#include
#endif
#ifdef __cplusplus
diff --git a/src/libjvm/libjvm.clangproj b/src/libjvm/libjvm.clangproj
index a3afd14fa8..2f11d6d3d9 100644
--- a/src/libjvm/libjvm.clangproj
+++ b/src/libjvm/libjvm.clangproj
@@ -23,12 +23,12 @@
-
-
+
+
-
-
+
+
@@ -48,7 +48,7 @@
-
+
diff --git a/src/liblcms/liblcms.clangproj b/src/liblcms/liblcms.clangproj
index 7d9aadf3db..293c4864ea 100644
--- a/src/liblcms/liblcms.clangproj
+++ b/src/liblcms/liblcms.clangproj
@@ -7,6 +7,7 @@
lcms
dll
+ win-x64;win-x86;win-arm64;linux-arm;linux-arm64;linux-x64;linux-musl-arm;linux-musl-arm64;linux-musl-x64;osx-x64;osx-arm64
c99
@@ -23,7 +24,7 @@
-
+
diff --git a/src/libmanagement/libmanagement.clangproj b/src/libmanagement/libmanagement.clangproj
index eae94019e1..71325812ba 100644
--- a/src/libmanagement/libmanagement.clangproj
+++ b/src/libmanagement/libmanagement.clangproj
@@ -26,7 +26,7 @@
-
+
diff --git a/src/libnet/libnet.clangproj b/src/libnet/libnet.clangproj
index 4942675be1..5f7042ed5e 100644
--- a/src/libnet/libnet.clangproj
+++ b/src/libnet/libnet.clangproj
@@ -32,7 +32,7 @@
-
+
@@ -51,7 +51,7 @@
-
+
diff --git a/src/libnio/libnio.clangproj b/src/libnio/libnio.clangproj
index 91e3825c62..e5c8827e0a 100644
--- a/src/libnio/libnio.clangproj
+++ b/src/libnio/libnio.clangproj
@@ -52,7 +52,7 @@
-
+
diff --git a/src/libsctp/libsctp.clangproj b/src/libsctp/libsctp.clangproj
index 0f9c2fd7bc..1465b99fa2 100644
--- a/src/libsctp/libsctp.clangproj
+++ b/src/libsctp/libsctp.clangproj
@@ -7,7 +7,7 @@
sctp
dll
- linux-x64;linux-arm;linux-arm64;linux-musl-x64;linux-musl-arm;linux-musl-arm64
+ linux-x64;linux-arm;linux-arm64;linux-musl-x64;linux-musl-arm;linux-musl-arm64;android-arm;android-arm64
c99
@@ -17,7 +17,7 @@
-
+
diff --git a/src/libsunec/libsunec.clangproj b/src/libsunec/libsunec.clangproj
index 98203e9219..9e7b1c6c7f 100644
--- a/src/libsunec/libsunec.clangproj
+++ b/src/libsunec/libsunec.clangproj
@@ -22,7 +22,7 @@
-
+
diff --git a/src/libunpack/libunpack.clangproj b/src/libunpack/libunpack.clangproj
index 2322eaa0c5..900e2f6dbc 100644
--- a/src/libunpack/libunpack.clangproj
+++ b/src/libunpack/libunpack.clangproj
@@ -22,7 +22,7 @@
-
+
diff --git a/src/libverify/libverify.clangproj b/src/libverify/libverify.clangproj
index 712374410f..61fb7ae7a5 100644
--- a/src/libverify/libverify.clangproj
+++ b/src/libverify/libverify.clangproj
@@ -16,7 +16,7 @@
-
+
diff --git a/src/libzip/libzip.clangproj b/src/libzip/libzip.clangproj
index 43f2afe533..381144173b 100644
--- a/src/libzip/libzip.clangproj
+++ b/src/libzip/libzip.clangproj
@@ -35,7 +35,7 @@
-
+
diff --git a/targets/lib.props b/targets/lib.props
index dc63574921..f90f9c9195 100644
--- a/targets/lib.props
+++ b/targets/lib.props
@@ -26,11 +26,14 @@
arm-unknown-linux-musleabihf
x86_64-apple-macosx
arm64-apple-macosx
+ arm-linux-androideabi
+ aarch64-linux-android
+
@@ -116,11 +119,25 @@
-
+
+ windows-x86_64
+ windows
+ linux-x86_64
+ linux
+ $(ANDROID_NDK_HOME)\toolchains\llvm\prebuilt\$(AndroidHostTag)\sysroot
+
+
+
+
+
+
+
+
+
true
-
+
@@ -146,4 +163,8 @@
+
+
+
+
diff --git a/targets/openjdk.lib.props b/targets/openjdk.lib.props
index 10d2f4ad83..09049b263a 100644
--- a/targets/openjdk.lib.props
+++ b/targets/openjdk.lib.props
@@ -35,14 +35,16 @@
-
+
solaris
i386
amd64
+ arm
+ aarch64
true
-
+