Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,7 @@ public void OSVersion_ValidVersion()
[InlineData("nelknet 4.15.0-24201807041620-generic", 4, 15, 0, int.MaxValue)] // integer overflow
[InlineData("", 0, 0, 0, 0)]
[InlineData("1abc", 1, 0, 0, 0)]
[InlineData("36.1", 36, 1, 0, 0)] // Android 36.1 minor SDK version
public void OSVersion_ParseVersion(string input, int major, int minor, int build, int revision)
{
var getOSMethod = typeof(Environment).GetMethod("GetOperatingSystem", BindingFlags.Static | BindingFlags.NonPublic);
Expand All @@ -190,6 +191,25 @@ public void OSVersion_ValidVersion_OSX()
Assert.Equal(-1, version.Revision); // Revision is never set on OSX
}

[Fact]
[PlatformSpecific(TestPlatforms.Android)]
public void OSVersion_ValidVersion_AndroidMinor()
{
Version version = Environment.OSVersion.Version;

// Compare with what Java reports (if available)
string? javaVersion = Environment.GetEnvironmentVariable("DOTNET_ANDROID_VERSION_FROM_JAVA");
if (javaVersion != null)
{
// For Android, MonoRunner.java sets "36.1", so compare major and minor only
Assert.Equal(javaVersion, $"{version.Major}.{version.Minor}");
}
else
{
Assert.Fail("$DOTNET_ANDROID_VERSION_FROM_JAVA environment variable not set");
}
}

[Fact]
public void SystemPageSize_Valid()
{
Expand Down
6 changes: 5 additions & 1 deletion src/native/libs/System.Native/pal_runtimeinformation.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,11 @@ char* SystemNative_GetUnixRelease(void)
#if defined(TARGET_ANDROID)
// get the Android API level
char sdk_ver_str[PROP_VALUE_MAX];
if (__system_property_get("ro.build.version.sdk", sdk_ver_str))
if (__system_property_get("ro.build.version.sdk_full", sdk_ver_str))
{
return strdup(sdk_ver_str);
}
else if (__system_property_get("ro.build.version.sdk", sdk_ver_str))
{
return strdup(sdk_ver_str);
}
Expand Down
15 changes: 15 additions & 0 deletions src/tasks/AndroidAppBuilder/Templates/MonoRunner.java
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ public static void initializeRuntime(String entryPointLibName, Context context)
setEnv("ASSETS_DIR", filesDir);
setEnv("TMPDIR", cacheDir);
setEnv("TEST_RESULTS_DIR", testResultsDir);
setEnv("DOTNET_ANDROID_VERSION_FROM_JAVA", getAndroidVersion());

Log.i("DOTNET", "MonoRunner initializeRuntime, entryPointLibName=" + entryPointLibName);
int localDateTimeOffset = getLocalDateTimeOffset();
Expand Down Expand Up @@ -188,6 +189,20 @@ static int getLocalDateTimeOffset() {
}
}

static String getAndroidVersion() {
String majorSdk = String.valueOf(android.os.Build.VERSION.SDK_INT);

// Check if Build.getMinorSdkVersion() is available (Android 16+ / API 36+)
if (android.os.Build.VERSION.SDK_INT >= 36) {
int minorSdk = android.os.Build.getMinorSdkVersion(android.os.Build.VERSION.SDK_INT_FULL);
if (minorSdk > 0) {
return majorSdk + "." + minorSdk;
}
}

return majorSdk + ".0";
}

static native int setEnv(String key, String value);

static native int initRuntime(String libsDir, String entryPointLibName, int local_date_time_offset);
Expand Down
Loading