Remove obsolete System.AndroidPlatform methods and native implementations - #10385

Merged
jonathanpeppers merged 9 commits into
mainfrom
copilot/fix-10381
Sep 25, 2025
Merged

Remove obsolete System.AndroidPlatform methods and native implementations#10385
jonathanpeppers merged 9 commits into
mainfrom
copilot/fix-10381

Conversation

CopilotAI commented Aug 7, 2025

Copy link
Copy Markdown
Contributor

This PR removes obsolete managed code that references System.AndroidPlatform, which was part of the Mono Android runtime but was never used in modern .NET. The issue was identified by @filipnavara and confirmed safe to remove by @jonathanpeppers after verifying that these APIs don't exist in dotnet/runtime.

Changes Made

Removed Methods from AndroidEnvironment.cs:

  • GetDisplayDPI() - Previously called by System.Drawing.GraphicsAndroid.FromAndroidSurface() (already marked as obsolete for android31.0)
  • GetDefaultTimeZone() - Previously called by System.Core!System.AndroidPlatform.GetDefaultTimeZone()
  • GetDefaultSyncContext() - Previously called by mscorlib.dll!System.AndroidPlatform.GetDefaultSyncContext()
  • GetInterfaceAddresses() - Previously called by System.dll!System.AndroidPlatform.getifaddrs
  • FreeInterfaceAddresses() - Previously called by System.dll!System.AndroidPlatform.freeifaddrs
  • GetDefaultProxy() - Previously called by System.dll!System.AndroidPlatform.GetDefaultProxy()

Additional Cleanup:

  • Removed the _Proxy class that was only used by GetDefaultProxy()
  • Removed unused P/Invoke declarations from RuntimeNativeMethods.cs:
    • _monodroid_timezone_get_default_id()
    • _monodroid_getifaddrs()
    • _monodroid_freeifaddrs()

Native Code Cleanup:

  • Removed P/Invoke method entries from both CLR and Mono P/Invoke table generators
  • Regenerated P/Invoke tables using generate-pinvoke-tables.sh
  • Removed unused native C++ implementations:
    • _monodroid_timezone_get_default_id() functions (CLR & Mono)
    • Complete xamarin_getifaddrs.cc files and header (CLR & Mono - 2,200+ lines)
    • Updated CMakeLists.txt files to remove build references
  • Fixed linker error by removing obsolete symbols from Mono version script

Impact

This is a breaking change that removes internal APIs that were never intended for public use in modern .NET for Android. No external code should be affected as these were internal implementation details for obsolete System.AndroidPlatform methods.

Total lines removed: 2,456 lines across 16 files
Build status: ✅ Successful with no new warnings or errors

Fixes#10381.


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
CopilotAI changed the title [WIP] Obsolete code referring to System.AndroidPlatformRemove obsolete System.AndroidPlatform methods and dependenciesAug 7, 2025
@jonathanpeppers

Copy link
Copy Markdown
Member

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot check my review comments

Comment threadsrc/Mono.Android/Android.Runtime/RuntimeNativeMethods.cs
CopilotAIand others added 2 commits August 7, 2025 20:36
Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
CopilotAI changed the title Remove obsolete System.AndroidPlatform methods and dependenciesRemove obsolete System.AndroidPlatform methods and native implementationsAug 7, 2025

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot there is a new error:

(_BuildAndroidRuntimes target) -> ld.lld : error : version script assignment of 'LIBMONO_ANDROID' to symbol '_monodroid_freeifaddrs' failed: symbol not defined [/Users/builder/azdo/_work/4/s/android/src/native/native-mono.csproj]
ld.lld : error : version script assignment of 'LIBMONO_ANDROID' to symbol '_monodroid_getifaddrs' failed: symbol not defined [/Users/builder/azdo/_work/4/s/android/src/native/native-mono.csproj]
clang++ : error : linker command failed with exit code 1 (use -v to see invocation)

Is something using these methods? or is there another file to update?

Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>

CopilotAI commented Aug 8, 2025

Copy link
Copy Markdown
ContributorAuthor

@copilot there is a new error:

(_BuildAndroidRuntimes target) -> 

...

The error was caused by the Mono version script file still referencing the removed symbols. I've fixed it by removing _monodroid_freeifaddrs and _monodroid_getifaddrs from src/native/mono/libmono-android.map.txt. The CLR version was unaffected since it didn't have these symbols in its version script. Fix in commit a6a34d5.

@filipnavarafilipnavara left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM (if the build passes)

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot there are a few minor formatting issues

Comment threadsrc/native/clr/pinvoke-override/generate-pinvoke-tables.cc Outdated
Comment threadsrc/native/mono/pinvoke-override/generate-pinvoke-tables.cc Outdated
Comment threadsrc/native/mono/runtime-base/internal-pinvokes.hh Outdated
Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>

CopilotAI commented Aug 8, 2025

Copy link
Copy Markdown
ContributorAuthor

@copilot there are a few minor formatting issues

Fixed all formatting issues in commit 0dc673c - removed unnecessary blank lines from the three affected files.

@jonathanpeppers
jonathanpeppers marked this pull request as ready for review August 8, 2025 16:00
@grendello

Copy link
Copy Markdown
Contributor

I would hold off with this PR until we branch for .NET10 release. The Mono changes can potentially be breaking ones, especially removal of the *ifaddr p/invokes. There's a slim but non-zero chance that some app out there is using any of those APIs.

@filipnavara

filipnavara commented Aug 8, 2025

Copy link
Copy Markdown
Member

I find it very unlikely that any app would depend on it. This was internal implementation detail that has not been used since .NET 5 (unified .NET always shipped the shims in their native libraries).

The reason I found this in the first place is that I looked into reusing the native code for CoreCLR GC bridge for NativeAOT (which now has the same API). I was very surprised to find that this is still lurking around and that it was even ported to CoreCLR host code base.

(in fact, I would argue that from security perspective it's safer to ship less dead code in a LTS release; well, even if LTS is irrelevant for the mobile workloads)

@jonathanpeppers

Copy link
Copy Markdown
Member

main is basically .NET 10 RC 1, given it is deleting 2,400 lines. I'm ok to defer to @grendello's suggestion. We can wait to merge until we've branched for .NET 10 to put this in .NET 11. If we were on earlier previews, I would say just merge it.

It must not affect app size too much, as we have tests that fail if file sizes change within a certain percentage.

@dartasen

Copy link
Copy Markdown
Contributor

There's a slim but non-zero chance that some app out there is using any of those APIs.

Isn't it internal APIs ?

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

main is now .NET 11.

@jonathanpeppers
jonathanpeppers merged commit 6e91776 into mainSep 25, 2025
59 checks passed
@jonathanpeppers
jonathanpeppers deleted the copilot/fix-10381 branch September 25, 2025 20:58
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Oct 26, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Obsolete code referring to System.AndroidPlatform

5 participants

@jonathanpeppers@grendello@filipnavara@dartasen
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Remove obsolete System.AndroidPlatform methods and native implementations - #10385

Merged
jonathanpeppers merged 9 commits into
mainfrom
copilot/fix-10381
Sep 25, 2025
Merged

Remove obsolete System.AndroidPlatform methods and native implementations#10385
jonathanpeppers merged 9 commits into
mainfrom
copilot/fix-10381

Conversation

CopilotAI commented Aug 7, 2025

Copy link
Copy Markdown
Contributor

This PR removes obsolete managed code that references System.AndroidPlatform, which was part of the Mono Android runtime but was never used in modern .NET. The issue was identified by @filipnavara and confirmed safe to remove by @jonathanpeppers after verifying that these APIs don't exist in dotnet/runtime.

Changes Made

Removed Methods from AndroidEnvironment.cs:

  • GetDisplayDPI() - Previously called by System.Drawing.GraphicsAndroid.FromAndroidSurface() (already marked as obsolete for android31.0)
  • GetDefaultTimeZone() - Previously called by System.Core!System.AndroidPlatform.GetDefaultTimeZone()
  • GetDefaultSyncContext() - Previously called by mscorlib.dll!System.AndroidPlatform.GetDefaultSyncContext()
  • GetInterfaceAddresses() - Previously called by System.dll!System.AndroidPlatform.getifaddrs
  • FreeInterfaceAddresses() - Previously called by System.dll!System.AndroidPlatform.freeifaddrs
  • GetDefaultProxy() - Previously called by System.dll!System.AndroidPlatform.GetDefaultProxy()

Additional Cleanup:

  • Removed the _Proxy class that was only used by GetDefaultProxy()
  • Removed unused P/Invoke declarations from RuntimeNativeMethods.cs:
    • _monodroid_timezone_get_default_id()
    • _monodroid_getifaddrs()
    • _monodroid_freeifaddrs()

Native Code Cleanup:

  • Removed P/Invoke method entries from both CLR and Mono P/Invoke table generators
  • Regenerated P/Invoke tables using generate-pinvoke-tables.sh
  • Removed unused native C++ implementations:
    • _monodroid_timezone_get_default_id() functions (CLR & Mono)
    • Complete xamarin_getifaddrs.cc files and header (CLR & Mono - 2,200+ lines)
    • Updated CMakeLists.txt files to remove build references
  • Fixed linker error by removing obsolete symbols from Mono version script

Impact

This is a breaking change that removes internal APIs that were never intended for public use in modern .NET for Android. No external code should be affected as these were internal implementation details for obsolete System.AndroidPlatform methods.

Total lines removed: 2,456 lines across 16 files
Build status: ✅ Successful with no new warnings or errors

Fixes#10381.


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
CopilotAI changed the title [WIP] Obsolete code referring to System.AndroidPlatformRemove obsolete System.AndroidPlatform methods and dependenciesAug 7, 2025
@jonathanpeppers

Copy link
Copy Markdown
Member

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot check my review comments

Comment threadsrc/Mono.Android/Android.Runtime/RuntimeNativeMethods.cs
CopilotAIand others added 2 commits August 7, 2025 20:36
Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
CopilotAI changed the title Remove obsolete System.AndroidPlatform methods and dependenciesRemove obsolete System.AndroidPlatform methods and native implementationsAug 7, 2025

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot there is a new error:

(_BuildAndroidRuntimes target) -> ld.lld : error : version script assignment of 'LIBMONO_ANDROID' to symbol '_monodroid_freeifaddrs' failed: symbol not defined [/Users/builder/azdo/_work/4/s/android/src/native/native-mono.csproj]
ld.lld : error : version script assignment of 'LIBMONO_ANDROID' to symbol '_monodroid_getifaddrs' failed: symbol not defined [/Users/builder/azdo/_work/4/s/android/src/native/native-mono.csproj]
clang++ : error : linker command failed with exit code 1 (use -v to see invocation)

Is something using these methods? or is there another file to update?

Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>

CopilotAI commented Aug 8, 2025

Copy link
Copy Markdown
ContributorAuthor

@copilot there is a new error:

(_BuildAndroidRuntimes target) -> 

...

The error was caused by the Mono version script file still referencing the removed symbols. I've fixed it by removing _monodroid_freeifaddrs and _monodroid_getifaddrs from src/native/mono/libmono-android.map.txt. The CLR version was unaffected since it didn't have these symbols in its version script. Fix in commit a6a34d5.

@filipnavarafilipnavara left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM (if the build passes)

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot there are a few minor formatting issues

Comment threadsrc/native/clr/pinvoke-override/generate-pinvoke-tables.cc Outdated
Comment threadsrc/native/mono/pinvoke-override/generate-pinvoke-tables.cc Outdated
Comment threadsrc/native/mono/runtime-base/internal-pinvokes.hh Outdated
Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>

CopilotAI commented Aug 8, 2025

Copy link
Copy Markdown
ContributorAuthor

@copilot there are a few minor formatting issues

Fixed all formatting issues in commit 0dc673c - removed unnecessary blank lines from the three affected files.

@jonathanpeppers
jonathanpeppers marked this pull request as ready for review August 8, 2025 16:00
@grendello

Copy link
Copy Markdown
Contributor

I would hold off with this PR until we branch for .NET10 release. The Mono changes can potentially be breaking ones, especially removal of the *ifaddr p/invokes. There's a slim but non-zero chance that some app out there is using any of those APIs.

@filipnavara

filipnavara commented Aug 8, 2025

Copy link
Copy Markdown
Member

I find it very unlikely that any app would depend on it. This was internal implementation detail that has not been used since .NET 5 (unified .NET always shipped the shims in their native libraries).

The reason I found this in the first place is that I looked into reusing the native code for CoreCLR GC bridge for NativeAOT (which now has the same API). I was very surprised to find that this is still lurking around and that it was even ported to CoreCLR host code base.

(in fact, I would argue that from security perspective it's safer to ship less dead code in a LTS release; well, even if LTS is irrelevant for the mobile workloads)

@jonathanpeppers

Copy link
Copy Markdown
Member

main is basically .NET 10 RC 1, given it is deleting 2,400 lines. I'm ok to defer to @grendello's suggestion. We can wait to merge until we've branched for .NET 10 to put this in .NET 11. If we were on earlier previews, I would say just merge it.

It must not affect app size too much, as we have tests that fail if file sizes change within a certain percentage.

@dartasen

Copy link
Copy Markdown
Contributor

There's a slim but non-zero chance that some app out there is using any of those APIs.

Isn't it internal APIs ?

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

main is now .NET 11.

@jonathanpeppers
jonathanpeppers merged commit 6e91776 into mainSep 25, 2025
59 checks passed
@jonathanpeppers
jonathanpeppers deleted the copilot/fix-10381 branch September 25, 2025 20:58
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Oct 26, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Obsolete code referring to System.AndroidPlatform

5 participants

@jonathanpeppers@grendello@filipnavara@dartasen
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Remove obsolete System.AndroidPlatform methods and native implementations - #10385

Merged
jonathanpeppers merged 9 commits into
mainfrom
copilot/fix-10381
Sep 25, 2025
Merged

Remove obsolete System.AndroidPlatform methods and native implementations#10385
jonathanpeppers merged 9 commits into
mainfrom
copilot/fix-10381

Conversation

CopilotAI commented Aug 7, 2025

Copy link
Copy Markdown
Contributor

This PR removes obsolete managed code that references System.AndroidPlatform, which was part of the Mono Android runtime but was never used in modern .NET. The issue was identified by @filipnavara and confirmed safe to remove by @jonathanpeppers after verifying that these APIs don't exist in dotnet/runtime.

Changes Made

Removed Methods from AndroidEnvironment.cs:

  • GetDisplayDPI() - Previously called by System.Drawing.GraphicsAndroid.FromAndroidSurface() (already marked as obsolete for android31.0)
  • GetDefaultTimeZone() - Previously called by System.Core!System.AndroidPlatform.GetDefaultTimeZone()
  • GetDefaultSyncContext() - Previously called by mscorlib.dll!System.AndroidPlatform.GetDefaultSyncContext()
  • GetInterfaceAddresses() - Previously called by System.dll!System.AndroidPlatform.getifaddrs
  • FreeInterfaceAddresses() - Previously called by System.dll!System.AndroidPlatform.freeifaddrs
  • GetDefaultProxy() - Previously called by System.dll!System.AndroidPlatform.GetDefaultProxy()

Additional Cleanup:

  • Removed the _Proxy class that was only used by GetDefaultProxy()
  • Removed unused P/Invoke declarations from RuntimeNativeMethods.cs:
    • _monodroid_timezone_get_default_id()
    • _monodroid_getifaddrs()
    • _monodroid_freeifaddrs()

Native Code Cleanup:

  • Removed P/Invoke method entries from both CLR and Mono P/Invoke table generators
  • Regenerated P/Invoke tables using generate-pinvoke-tables.sh
  • Removed unused native C++ implementations:
    • _monodroid_timezone_get_default_id() functions (CLR & Mono)
    • Complete xamarin_getifaddrs.cc files and header (CLR & Mono - 2,200+ lines)
    • Updated CMakeLists.txt files to remove build references
  • Fixed linker error by removing obsolete symbols from Mono version script

Impact

This is a breaking change that removes internal APIs that were never intended for public use in modern .NET for Android. No external code should be affected as these were internal implementation details for obsolete System.AndroidPlatform methods.

Total lines removed: 2,456 lines across 16 files
Build status: ✅ Successful with no new warnings or errors

Fixes#10381.


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
CopilotAI changed the title [WIP] Obsolete code referring to System.AndroidPlatformRemove obsolete System.AndroidPlatform methods and dependenciesAug 7, 2025
@jonathanpeppers

Copy link
Copy Markdown
Member

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot check my review comments

Comment threadsrc/Mono.Android/Android.Runtime/RuntimeNativeMethods.cs
CopilotAIand others added 2 commits August 7, 2025 20:36
Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
CopilotAI changed the title Remove obsolete System.AndroidPlatform methods and dependenciesRemove obsolete System.AndroidPlatform methods and native implementationsAug 7, 2025

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot there is a new error:

(_BuildAndroidRuntimes target) -> ld.lld : error : version script assignment of 'LIBMONO_ANDROID' to symbol '_monodroid_freeifaddrs' failed: symbol not defined [/Users/builder/azdo/_work/4/s/android/src/native/native-mono.csproj]
ld.lld : error : version script assignment of 'LIBMONO_ANDROID' to symbol '_monodroid_getifaddrs' failed: symbol not defined [/Users/builder/azdo/_work/4/s/android/src/native/native-mono.csproj]
clang++ : error : linker command failed with exit code 1 (use -v to see invocation)

Is something using these methods? or is there another file to update?

Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>

CopilotAI commented Aug 8, 2025

Copy link
Copy Markdown
ContributorAuthor

@copilot there is a new error:

(_BuildAndroidRuntimes target) -> 

...

The error was caused by the Mono version script file still referencing the removed symbols. I've fixed it by removing _monodroid_freeifaddrs and _monodroid_getifaddrs from src/native/mono/libmono-android.map.txt. The CLR version was unaffected since it didn't have these symbols in its version script. Fix in commit a6a34d5.

@filipnavarafilipnavara left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM (if the build passes)

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot there are a few minor formatting issues

Comment threadsrc/native/clr/pinvoke-override/generate-pinvoke-tables.cc Outdated
Comment threadsrc/native/mono/pinvoke-override/generate-pinvoke-tables.cc Outdated
Comment threadsrc/native/mono/runtime-base/internal-pinvokes.hh Outdated
Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>

CopilotAI commented Aug 8, 2025

Copy link
Copy Markdown
ContributorAuthor

@copilot there are a few minor formatting issues

Fixed all formatting issues in commit 0dc673c - removed unnecessary blank lines from the three affected files.

@jonathanpeppers
jonathanpeppers marked this pull request as ready for review August 8, 2025 16:00
@grendello

Copy link
Copy Markdown
Contributor

I would hold off with this PR until we branch for .NET10 release. The Mono changes can potentially be breaking ones, especially removal of the *ifaddr p/invokes. There's a slim but non-zero chance that some app out there is using any of those APIs.

@filipnavara

filipnavara commented Aug 8, 2025

Copy link
Copy Markdown
Member

I find it very unlikely that any app would depend on it. This was internal implementation detail that has not been used since .NET 5 (unified .NET always shipped the shims in their native libraries).

The reason I found this in the first place is that I looked into reusing the native code for CoreCLR GC bridge for NativeAOT (which now has the same API). I was very surprised to find that this is still lurking around and that it was even ported to CoreCLR host code base.

(in fact, I would argue that from security perspective it's safer to ship less dead code in a LTS release; well, even if LTS is irrelevant for the mobile workloads)

@jonathanpeppers

Copy link
Copy Markdown
Member

main is basically .NET 10 RC 1, given it is deleting 2,400 lines. I'm ok to defer to @grendello's suggestion. We can wait to merge until we've branched for .NET 10 to put this in .NET 11. If we were on earlier previews, I would say just merge it.

It must not affect app size too much, as we have tests that fail if file sizes change within a certain percentage.

@dartasen

Copy link
Copy Markdown
Contributor

There's a slim but non-zero chance that some app out there is using any of those APIs.

Isn't it internal APIs ?

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

main is now .NET 11.

@jonathanpeppers
jonathanpeppers merged commit 6e91776 into mainSep 25, 2025
59 checks passed
@jonathanpeppers
jonathanpeppers deleted the copilot/fix-10381 branch September 25, 2025 20:58
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Oct 26, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Obsolete code referring to System.AndroidPlatform

5 participants

@jonathanpeppers@grendello@filipnavara@dartasen
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Remove obsolete System.AndroidPlatform methods and native implementations - #10385

Merged
jonathanpeppers merged 9 commits into
mainfrom
copilot/fix-10381
Sep 25, 2025
Merged

Remove obsolete System.AndroidPlatform methods and native implementations#10385
jonathanpeppers merged 9 commits into
mainfrom
copilot/fix-10381

Conversation

CopilotAI commented Aug 7, 2025

Copy link
Copy Markdown
Contributor

This PR removes obsolete managed code that references System.AndroidPlatform, which was part of the Mono Android runtime but was never used in modern .NET. The issue was identified by @filipnavara and confirmed safe to remove by @jonathanpeppers after verifying that these APIs don't exist in dotnet/runtime.

Changes Made

Removed Methods from AndroidEnvironment.cs:

  • GetDisplayDPI() - Previously called by System.Drawing.GraphicsAndroid.FromAndroidSurface() (already marked as obsolete for android31.0)
  • GetDefaultTimeZone() - Previously called by System.Core!System.AndroidPlatform.GetDefaultTimeZone()
  • GetDefaultSyncContext() - Previously called by mscorlib.dll!System.AndroidPlatform.GetDefaultSyncContext()
  • GetInterfaceAddresses() - Previously called by System.dll!System.AndroidPlatform.getifaddrs
  • FreeInterfaceAddresses() - Previously called by System.dll!System.AndroidPlatform.freeifaddrs
  • GetDefaultProxy() - Previously called by System.dll!System.AndroidPlatform.GetDefaultProxy()

Additional Cleanup:

  • Removed the _Proxy class that was only used by GetDefaultProxy()
  • Removed unused P/Invoke declarations from RuntimeNativeMethods.cs:
    • _monodroid_timezone_get_default_id()
    • _monodroid_getifaddrs()
    • _monodroid_freeifaddrs()

Native Code Cleanup:

  • Removed P/Invoke method entries from both CLR and Mono P/Invoke table generators
  • Regenerated P/Invoke tables using generate-pinvoke-tables.sh
  • Removed unused native C++ implementations:
    • _monodroid_timezone_get_default_id() functions (CLR & Mono)
    • Complete xamarin_getifaddrs.cc files and header (CLR & Mono - 2,200+ lines)
    • Updated CMakeLists.txt files to remove build references
  • Fixed linker error by removing obsolete symbols from Mono version script

Impact

This is a breaking change that removes internal APIs that were never intended for public use in modern .NET for Android. No external code should be affected as these were internal implementation details for obsolete System.AndroidPlatform methods.

Total lines removed: 2,456 lines across 16 files
Build status: ✅ Successful with no new warnings or errors

Fixes#10381.


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
CopilotAI changed the title [WIP] Obsolete code referring to System.AndroidPlatformRemove obsolete System.AndroidPlatform methods and dependenciesAug 7, 2025
@jonathanpeppers

Copy link
Copy Markdown
Member

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot check my review comments

Comment threadsrc/Mono.Android/Android.Runtime/RuntimeNativeMethods.cs
CopilotAIand others added 2 commits August 7, 2025 20:36
Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
CopilotAI changed the title Remove obsolete System.AndroidPlatform methods and dependenciesRemove obsolete System.AndroidPlatform methods and native implementationsAug 7, 2025

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot there is a new error:

(_BuildAndroidRuntimes target) -> ld.lld : error : version script assignment of 'LIBMONO_ANDROID' to symbol '_monodroid_freeifaddrs' failed: symbol not defined [/Users/builder/azdo/_work/4/s/android/src/native/native-mono.csproj]
ld.lld : error : version script assignment of 'LIBMONO_ANDROID' to symbol '_monodroid_getifaddrs' failed: symbol not defined [/Users/builder/azdo/_work/4/s/android/src/native/native-mono.csproj]
clang++ : error : linker command failed with exit code 1 (use -v to see invocation)

Is something using these methods? or is there another file to update?

Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>

CopilotAI commented Aug 8, 2025

Copy link
Copy Markdown
ContributorAuthor

@copilot there is a new error:

(_BuildAndroidRuntimes target) -> 

...

The error was caused by the Mono version script file still referencing the removed symbols. I've fixed it by removing _monodroid_freeifaddrs and _monodroid_getifaddrs from src/native/mono/libmono-android.map.txt. The CLR version was unaffected since it didn't have these symbols in its version script. Fix in commit a6a34d5.

@filipnavarafilipnavara left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM (if the build passes)

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot there are a few minor formatting issues

Comment threadsrc/native/clr/pinvoke-override/generate-pinvoke-tables.cc Outdated
Comment threadsrc/native/mono/pinvoke-override/generate-pinvoke-tables.cc Outdated
Comment threadsrc/native/mono/runtime-base/internal-pinvokes.hh Outdated
Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>

CopilotAI commented Aug 8, 2025

Copy link
Copy Markdown
ContributorAuthor

@copilot there are a few minor formatting issues

Fixed all formatting issues in commit 0dc673c - removed unnecessary blank lines from the three affected files.

@jonathanpeppers
jonathanpeppers marked this pull request as ready for review August 8, 2025 16:00
@grendello

Copy link
Copy Markdown
Contributor

I would hold off with this PR until we branch for .NET10 release. The Mono changes can potentially be breaking ones, especially removal of the *ifaddr p/invokes. There's a slim but non-zero chance that some app out there is using any of those APIs.

@filipnavara

filipnavara commented Aug 8, 2025

Copy link
Copy Markdown
Member

I find it very unlikely that any app would depend on it. This was internal implementation detail that has not been used since .NET 5 (unified .NET always shipped the shims in their native libraries).

The reason I found this in the first place is that I looked into reusing the native code for CoreCLR GC bridge for NativeAOT (which now has the same API). I was very surprised to find that this is still lurking around and that it was even ported to CoreCLR host code base.

(in fact, I would argue that from security perspective it's safer to ship less dead code in a LTS release; well, even if LTS is irrelevant for the mobile workloads)

@jonathanpeppers

Copy link
Copy Markdown
Member

main is basically .NET 10 RC 1, given it is deleting 2,400 lines. I'm ok to defer to @grendello's suggestion. We can wait to merge until we've branched for .NET 10 to put this in .NET 11. If we were on earlier previews, I would say just merge it.

It must not affect app size too much, as we have tests that fail if file sizes change within a certain percentage.

@dartasen

Copy link
Copy Markdown
Contributor

There's a slim but non-zero chance that some app out there is using any of those APIs.

Isn't it internal APIs ?

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

main is now .NET 11.

@jonathanpeppers
jonathanpeppers merged commit 6e91776 into mainSep 25, 2025
59 checks passed
@jonathanpeppers
jonathanpeppers deleted the copilot/fix-10381 branch September 25, 2025 20:58
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Oct 26, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Obsolete code referring to System.AndroidPlatform

5 participants

@jonathanpeppers@grendello@filipnavara@dartasen
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Remove obsolete System.AndroidPlatform methods and native implementations - #10385

Merged
jonathanpeppers merged 9 commits into
mainfrom
copilot/fix-10381
Sep 25, 2025
Merged

Remove obsolete System.AndroidPlatform methods and native implementations#10385
jonathanpeppers merged 9 commits into
mainfrom
copilot/fix-10381

Conversation

CopilotAI commented Aug 7, 2025

Copy link
Copy Markdown
Contributor

This PR removes obsolete managed code that references System.AndroidPlatform, which was part of the Mono Android runtime but was never used in modern .NET. The issue was identified by @filipnavara and confirmed safe to remove by @jonathanpeppers after verifying that these APIs don't exist in dotnet/runtime.

Changes Made

Removed Methods from AndroidEnvironment.cs:

  • GetDisplayDPI() - Previously called by System.Drawing.GraphicsAndroid.FromAndroidSurface() (already marked as obsolete for android31.0)
  • GetDefaultTimeZone() - Previously called by System.Core!System.AndroidPlatform.GetDefaultTimeZone()
  • GetDefaultSyncContext() - Previously called by mscorlib.dll!System.AndroidPlatform.GetDefaultSyncContext()
  • GetInterfaceAddresses() - Previously called by System.dll!System.AndroidPlatform.getifaddrs
  • FreeInterfaceAddresses() - Previously called by System.dll!System.AndroidPlatform.freeifaddrs
  • GetDefaultProxy() - Previously called by System.dll!System.AndroidPlatform.GetDefaultProxy()

Additional Cleanup:

  • Removed the _Proxy class that was only used by GetDefaultProxy()
  • Removed unused P/Invoke declarations from RuntimeNativeMethods.cs:
    • _monodroid_timezone_get_default_id()
    • _monodroid_getifaddrs()
    • _monodroid_freeifaddrs()

Native Code Cleanup:

  • Removed P/Invoke method entries from both CLR and Mono P/Invoke table generators
  • Regenerated P/Invoke tables using generate-pinvoke-tables.sh
  • Removed unused native C++ implementations:
    • _monodroid_timezone_get_default_id() functions (CLR & Mono)
    • Complete xamarin_getifaddrs.cc files and header (CLR & Mono - 2,200+ lines)
    • Updated CMakeLists.txt files to remove build references
  • Fixed linker error by removing obsolete symbols from Mono version script

Impact

This is a breaking change that removes internal APIs that were never intended for public use in modern .NET for Android. No external code should be affected as these were internal implementation details for obsolete System.AndroidPlatform methods.

Total lines removed: 2,456 lines across 16 files
Build status: ✅ Successful with no new warnings or errors

Fixes#10381.


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
CopilotAI changed the title [WIP] Obsolete code referring to System.AndroidPlatformRemove obsolete System.AndroidPlatform methods and dependenciesAug 7, 2025
@jonathanpeppers

Copy link
Copy Markdown
Member

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot check my review comments

Comment threadsrc/Mono.Android/Android.Runtime/RuntimeNativeMethods.cs
CopilotAIand others added 2 commits August 7, 2025 20:36
Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
CopilotAI changed the title Remove obsolete System.AndroidPlatform methods and dependenciesRemove obsolete System.AndroidPlatform methods and native implementationsAug 7, 2025

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot there is a new error:

(_BuildAndroidRuntimes target) -> ld.lld : error : version script assignment of 'LIBMONO_ANDROID' to symbol '_monodroid_freeifaddrs' failed: symbol not defined [/Users/builder/azdo/_work/4/s/android/src/native/native-mono.csproj]
ld.lld : error : version script assignment of 'LIBMONO_ANDROID' to symbol '_monodroid_getifaddrs' failed: symbol not defined [/Users/builder/azdo/_work/4/s/android/src/native/native-mono.csproj]
clang++ : error : linker command failed with exit code 1 (use -v to see invocation)

Is something using these methods? or is there another file to update?

Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>

CopilotAI commented Aug 8, 2025

Copy link
Copy Markdown
ContributorAuthor

@copilot there is a new error:

(_BuildAndroidRuntimes target) -> 

...

The error was caused by the Mono version script file still referencing the removed symbols. I've fixed it by removing _monodroid_freeifaddrs and _monodroid_getifaddrs from src/native/mono/libmono-android.map.txt. The CLR version was unaffected since it didn't have these symbols in its version script. Fix in commit a6a34d5.

@filipnavarafilipnavara left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM (if the build passes)

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot there are a few minor formatting issues

Comment threadsrc/native/clr/pinvoke-override/generate-pinvoke-tables.cc Outdated
Comment threadsrc/native/mono/pinvoke-override/generate-pinvoke-tables.cc Outdated
Comment threadsrc/native/mono/runtime-base/internal-pinvokes.hh Outdated
Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>

CopilotAI commented Aug 8, 2025

Copy link
Copy Markdown
ContributorAuthor

@copilot there are a few minor formatting issues

Fixed all formatting issues in commit 0dc673c - removed unnecessary blank lines from the three affected files.

@jonathanpeppers
jonathanpeppers marked this pull request as ready for review August 8, 2025 16:00
@grendello

Copy link
Copy Markdown
Contributor

I would hold off with this PR until we branch for .NET10 release. The Mono changes can potentially be breaking ones, especially removal of the *ifaddr p/invokes. There's a slim but non-zero chance that some app out there is using any of those APIs.

@filipnavara

filipnavara commented Aug 8, 2025

Copy link
Copy Markdown
Member

I find it very unlikely that any app would depend on it. This was internal implementation detail that has not been used since .NET 5 (unified .NET always shipped the shims in their native libraries).

The reason I found this in the first place is that I looked into reusing the native code for CoreCLR GC bridge for NativeAOT (which now has the same API). I was very surprised to find that this is still lurking around and that it was even ported to CoreCLR host code base.

(in fact, I would argue that from security perspective it's safer to ship less dead code in a LTS release; well, even if LTS is irrelevant for the mobile workloads)

@jonathanpeppers

Copy link
Copy Markdown
Member

main is basically .NET 10 RC 1, given it is deleting 2,400 lines. I'm ok to defer to @grendello's suggestion. We can wait to merge until we've branched for .NET 10 to put this in .NET 11. If we were on earlier previews, I would say just merge it.

It must not affect app size too much, as we have tests that fail if file sizes change within a certain percentage.

@dartasen

Copy link
Copy Markdown
Contributor

There's a slim but non-zero chance that some app out there is using any of those APIs.

Isn't it internal APIs ?

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

main is now .NET 11.

@jonathanpeppers
jonathanpeppers merged commit 6e91776 into mainSep 25, 2025
59 checks passed
@jonathanpeppers
jonathanpeppers deleted the copilot/fix-10381 branch September 25, 2025 20:58
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Oct 26, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Obsolete code referring to System.AndroidPlatform

5 participants

@jonathanpeppers@grendello@filipnavara@dartasen
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Remove obsolete System.AndroidPlatform methods and native implementations - #10385

Merged
jonathanpeppers merged 9 commits into
mainfrom
copilot/fix-10381
Sep 25, 2025
Merged

Remove obsolete System.AndroidPlatform methods and native implementations#10385
jonathanpeppers merged 9 commits into
mainfrom
copilot/fix-10381

Conversation

CopilotAI commented Aug 7, 2025

Copy link
Copy Markdown
Contributor

This PR removes obsolete managed code that references System.AndroidPlatform, which was part of the Mono Android runtime but was never used in modern .NET. The issue was identified by @filipnavara and confirmed safe to remove by @jonathanpeppers after verifying that these APIs don't exist in dotnet/runtime.

Changes Made

Removed Methods from AndroidEnvironment.cs:

  • GetDisplayDPI() - Previously called by System.Drawing.GraphicsAndroid.FromAndroidSurface() (already marked as obsolete for android31.0)
  • GetDefaultTimeZone() - Previously called by System.Core!System.AndroidPlatform.GetDefaultTimeZone()
  • GetDefaultSyncContext() - Previously called by mscorlib.dll!System.AndroidPlatform.GetDefaultSyncContext()
  • GetInterfaceAddresses() - Previously called by System.dll!System.AndroidPlatform.getifaddrs
  • FreeInterfaceAddresses() - Previously called by System.dll!System.AndroidPlatform.freeifaddrs
  • GetDefaultProxy() - Previously called by System.dll!System.AndroidPlatform.GetDefaultProxy()

Additional Cleanup:

  • Removed the _Proxy class that was only used by GetDefaultProxy()
  • Removed unused P/Invoke declarations from RuntimeNativeMethods.cs:
    • _monodroid_timezone_get_default_id()
    • _monodroid_getifaddrs()
    • _monodroid_freeifaddrs()

Native Code Cleanup:

  • Removed P/Invoke method entries from both CLR and Mono P/Invoke table generators
  • Regenerated P/Invoke tables using generate-pinvoke-tables.sh
  • Removed unused native C++ implementations:
    • _monodroid_timezone_get_default_id() functions (CLR & Mono)
    • Complete xamarin_getifaddrs.cc files and header (CLR & Mono - 2,200+ lines)
    • Updated CMakeLists.txt files to remove build references
  • Fixed linker error by removing obsolete symbols from Mono version script

Impact

This is a breaking change that removes internal APIs that were never intended for public use in modern .NET for Android. No external code should be affected as these were internal implementation details for obsolete System.AndroidPlatform methods.

Total lines removed: 2,456 lines across 16 files
Build status: ✅ Successful with no new warnings or errors

Fixes#10381.


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
CopilotAI changed the title [WIP] Obsolete code referring to System.AndroidPlatformRemove obsolete System.AndroidPlatform methods and dependenciesAug 7, 2025
@jonathanpeppers

Copy link
Copy Markdown
Member

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot check my review comments

Comment threadsrc/Mono.Android/Android.Runtime/RuntimeNativeMethods.cs
CopilotAIand others added 2 commits August 7, 2025 20:36
Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
CopilotAI changed the title Remove obsolete System.AndroidPlatform methods and dependenciesRemove obsolete System.AndroidPlatform methods and native implementationsAug 7, 2025

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot there is a new error:

(_BuildAndroidRuntimes target) -> ld.lld : error : version script assignment of 'LIBMONO_ANDROID' to symbol '_monodroid_freeifaddrs' failed: symbol not defined [/Users/builder/azdo/_work/4/s/android/src/native/native-mono.csproj]
ld.lld : error : version script assignment of 'LIBMONO_ANDROID' to symbol '_monodroid_getifaddrs' failed: symbol not defined [/Users/builder/azdo/_work/4/s/android/src/native/native-mono.csproj]
clang++ : error : linker command failed with exit code 1 (use -v to see invocation)

Is something using these methods? or is there another file to update?

Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>

CopilotAI commented Aug 8, 2025

Copy link
Copy Markdown
ContributorAuthor

@copilot there is a new error:

(_BuildAndroidRuntimes target) -> 

...

The error was caused by the Mono version script file still referencing the removed symbols. I've fixed it by removing _monodroid_freeifaddrs and _monodroid_getifaddrs from src/native/mono/libmono-android.map.txt. The CLR version was unaffected since it didn't have these symbols in its version script. Fix in commit a6a34d5.

@filipnavarafilipnavara left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM (if the build passes)

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot there are a few minor formatting issues

Comment threadsrc/native/clr/pinvoke-override/generate-pinvoke-tables.cc Outdated
Comment threadsrc/native/mono/pinvoke-override/generate-pinvoke-tables.cc Outdated
Comment threadsrc/native/mono/runtime-base/internal-pinvokes.hh Outdated
Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>

CopilotAI commented Aug 8, 2025

Copy link
Copy Markdown
ContributorAuthor

@copilot there are a few minor formatting issues

Fixed all formatting issues in commit 0dc673c - removed unnecessary blank lines from the three affected files.

@jonathanpeppers
jonathanpeppers marked this pull request as ready for review August 8, 2025 16:00
@grendello

Copy link
Copy Markdown
Contributor

I would hold off with this PR until we branch for .NET10 release. The Mono changes can potentially be breaking ones, especially removal of the *ifaddr p/invokes. There's a slim but non-zero chance that some app out there is using any of those APIs.

@filipnavara

filipnavara commented Aug 8, 2025

Copy link
Copy Markdown
Member

I find it very unlikely that any app would depend on it. This was internal implementation detail that has not been used since .NET 5 (unified .NET always shipped the shims in their native libraries).

The reason I found this in the first place is that I looked into reusing the native code for CoreCLR GC bridge for NativeAOT (which now has the same API). I was very surprised to find that this is still lurking around and that it was even ported to CoreCLR host code base.

(in fact, I would argue that from security perspective it's safer to ship less dead code in a LTS release; well, even if LTS is irrelevant for the mobile workloads)

@jonathanpeppers

Copy link
Copy Markdown
Member

main is basically .NET 10 RC 1, given it is deleting 2,400 lines. I'm ok to defer to @grendello's suggestion. We can wait to merge until we've branched for .NET 10 to put this in .NET 11. If we were on earlier previews, I would say just merge it.

It must not affect app size too much, as we have tests that fail if file sizes change within a certain percentage.

@dartasen

Copy link
Copy Markdown
Contributor

There's a slim but non-zero chance that some app out there is using any of those APIs.

Isn't it internal APIs ?

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

main is now .NET 11.

@jonathanpeppers
jonathanpeppers merged commit 6e91776 into mainSep 25, 2025
59 checks passed
@jonathanpeppers
jonathanpeppers deleted the copilot/fix-10381 branch September 25, 2025 20:58
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Oct 26, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Obsolete code referring to System.AndroidPlatform

5 participants

@jonathanpeppers@grendello@filipnavara@dartasen
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Remove obsolete System.AndroidPlatform methods and native implementations - #10385

Merged
jonathanpeppers merged 9 commits into
mainfrom
copilot/fix-10381
Sep 25, 2025
Merged

Remove obsolete System.AndroidPlatform methods and native implementations#10385
jonathanpeppers merged 9 commits into
mainfrom
copilot/fix-10381

Conversation

CopilotAI commented Aug 7, 2025

Copy link
Copy Markdown
Contributor

This PR removes obsolete managed code that references System.AndroidPlatform, which was part of the Mono Android runtime but was never used in modern .NET. The issue was identified by @filipnavara and confirmed safe to remove by @jonathanpeppers after verifying that these APIs don't exist in dotnet/runtime.

Changes Made

Removed Methods from AndroidEnvironment.cs:

  • GetDisplayDPI() - Previously called by System.Drawing.GraphicsAndroid.FromAndroidSurface() (already marked as obsolete for android31.0)
  • GetDefaultTimeZone() - Previously called by System.Core!System.AndroidPlatform.GetDefaultTimeZone()
  • GetDefaultSyncContext() - Previously called by mscorlib.dll!System.AndroidPlatform.GetDefaultSyncContext()
  • GetInterfaceAddresses() - Previously called by System.dll!System.AndroidPlatform.getifaddrs
  • FreeInterfaceAddresses() - Previously called by System.dll!System.AndroidPlatform.freeifaddrs
  • GetDefaultProxy() - Previously called by System.dll!System.AndroidPlatform.GetDefaultProxy()

Additional Cleanup:

  • Removed the _Proxy class that was only used by GetDefaultProxy()
  • Removed unused P/Invoke declarations from RuntimeNativeMethods.cs:
    • _monodroid_timezone_get_default_id()
    • _monodroid_getifaddrs()
    • _monodroid_freeifaddrs()

Native Code Cleanup:

  • Removed P/Invoke method entries from both CLR and Mono P/Invoke table generators
  • Regenerated P/Invoke tables using generate-pinvoke-tables.sh
  • Removed unused native C++ implementations:
    • _monodroid_timezone_get_default_id() functions (CLR & Mono)
    • Complete xamarin_getifaddrs.cc files and header (CLR & Mono - 2,200+ lines)
    • Updated CMakeLists.txt files to remove build references
  • Fixed linker error by removing obsolete symbols from Mono version script

Impact

This is a breaking change that removes internal APIs that were never intended for public use in modern .NET for Android. No external code should be affected as these were internal implementation details for obsolete System.AndroidPlatform methods.

Total lines removed: 2,456 lines across 16 files
Build status: ✅ Successful with no new warnings or errors

Fixes#10381.


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
CopilotAI changed the title [WIP] Obsolete code referring to System.AndroidPlatformRemove obsolete System.AndroidPlatform methods and dependenciesAug 7, 2025
@jonathanpeppers

Copy link
Copy Markdown
Member

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot check my review comments

Comment threadsrc/Mono.Android/Android.Runtime/RuntimeNativeMethods.cs
CopilotAIand others added 2 commits August 7, 2025 20:36
Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
CopilotAI changed the title Remove obsolete System.AndroidPlatform methods and dependenciesRemove obsolete System.AndroidPlatform methods and native implementationsAug 7, 2025

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot there is a new error:

(_BuildAndroidRuntimes target) -> ld.lld : error : version script assignment of 'LIBMONO_ANDROID' to symbol '_monodroid_freeifaddrs' failed: symbol not defined [/Users/builder/azdo/_work/4/s/android/src/native/native-mono.csproj]
ld.lld : error : version script assignment of 'LIBMONO_ANDROID' to symbol '_monodroid_getifaddrs' failed: symbol not defined [/Users/builder/azdo/_work/4/s/android/src/native/native-mono.csproj]
clang++ : error : linker command failed with exit code 1 (use -v to see invocation)

Is something using these methods? or is there another file to update?

Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>

CopilotAI commented Aug 8, 2025

Copy link
Copy Markdown
ContributorAuthor

@copilot there is a new error:

(_BuildAndroidRuntimes target) -> 

...

The error was caused by the Mono version script file still referencing the removed symbols. I've fixed it by removing _monodroid_freeifaddrs and _monodroid_getifaddrs from src/native/mono/libmono-android.map.txt. The CLR version was unaffected since it didn't have these symbols in its version script. Fix in commit a6a34d5.

@filipnavarafilipnavara left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM (if the build passes)

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot there are a few minor formatting issues

Comment threadsrc/native/clr/pinvoke-override/generate-pinvoke-tables.cc Outdated
Comment threadsrc/native/mono/pinvoke-override/generate-pinvoke-tables.cc Outdated
Comment threadsrc/native/mono/runtime-base/internal-pinvokes.hh Outdated
Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>

CopilotAI commented Aug 8, 2025

Copy link
Copy Markdown
ContributorAuthor

@copilot there are a few minor formatting issues

Fixed all formatting issues in commit 0dc673c - removed unnecessary blank lines from the three affected files.

@jonathanpeppers
jonathanpeppers marked this pull request as ready for review August 8, 2025 16:00
@grendello

Copy link
Copy Markdown
Contributor

I would hold off with this PR until we branch for .NET10 release. The Mono changes can potentially be breaking ones, especially removal of the *ifaddr p/invokes. There's a slim but non-zero chance that some app out there is using any of those APIs.

@filipnavara

filipnavara commented Aug 8, 2025

Copy link
Copy Markdown
Member

I find it very unlikely that any app would depend on it. This was internal implementation detail that has not been used since .NET 5 (unified .NET always shipped the shims in their native libraries).

The reason I found this in the first place is that I looked into reusing the native code for CoreCLR GC bridge for NativeAOT (which now has the same API). I was very surprised to find that this is still lurking around and that it was even ported to CoreCLR host code base.

(in fact, I would argue that from security perspective it's safer to ship less dead code in a LTS release; well, even if LTS is irrelevant for the mobile workloads)

@jonathanpeppers

Copy link
Copy Markdown
Member

main is basically .NET 10 RC 1, given it is deleting 2,400 lines. I'm ok to defer to @grendello's suggestion. We can wait to merge until we've branched for .NET 10 to put this in .NET 11. If we were on earlier previews, I would say just merge it.

It must not affect app size too much, as we have tests that fail if file sizes change within a certain percentage.

@dartasen

Copy link
Copy Markdown
Contributor

There's a slim but non-zero chance that some app out there is using any of those APIs.

Isn't it internal APIs ?

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

main is now .NET 11.

@jonathanpeppers
jonathanpeppers merged commit 6e91776 into mainSep 25, 2025
59 checks passed
@jonathanpeppers
jonathanpeppers deleted the copilot/fix-10381 branch September 25, 2025 20:58
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Oct 26, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Obsolete code referring to System.AndroidPlatform

5 participants

@jonathanpeppers@grendello@filipnavara@dartasen
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Remove obsolete System.AndroidPlatform methods and native implementations - #10385

Merged
jonathanpeppers merged 9 commits into
mainfrom
copilot/fix-10381
Sep 25, 2025
Merged

Remove obsolete System.AndroidPlatform methods and native implementations#10385
jonathanpeppers merged 9 commits into
mainfrom
copilot/fix-10381

Conversation

CopilotAI commented Aug 7, 2025

Copy link
Copy Markdown
Contributor

This PR removes obsolete managed code that references System.AndroidPlatform, which was part of the Mono Android runtime but was never used in modern .NET. The issue was identified by @filipnavara and confirmed safe to remove by @jonathanpeppers after verifying that these APIs don't exist in dotnet/runtime.

Changes Made

Removed Methods from AndroidEnvironment.cs:

  • GetDisplayDPI() - Previously called by System.Drawing.GraphicsAndroid.FromAndroidSurface() (already marked as obsolete for android31.0)
  • GetDefaultTimeZone() - Previously called by System.Core!System.AndroidPlatform.GetDefaultTimeZone()
  • GetDefaultSyncContext() - Previously called by mscorlib.dll!System.AndroidPlatform.GetDefaultSyncContext()
  • GetInterfaceAddresses() - Previously called by System.dll!System.AndroidPlatform.getifaddrs
  • FreeInterfaceAddresses() - Previously called by System.dll!System.AndroidPlatform.freeifaddrs
  • GetDefaultProxy() - Previously called by System.dll!System.AndroidPlatform.GetDefaultProxy()

Additional Cleanup:

  • Removed the _Proxy class that was only used by GetDefaultProxy()
  • Removed unused P/Invoke declarations from RuntimeNativeMethods.cs:
    • _monodroid_timezone_get_default_id()
    • _monodroid_getifaddrs()
    • _monodroid_freeifaddrs()

Native Code Cleanup:

  • Removed P/Invoke method entries from both CLR and Mono P/Invoke table generators
  • Regenerated P/Invoke tables using generate-pinvoke-tables.sh
  • Removed unused native C++ implementations:
    • _monodroid_timezone_get_default_id() functions (CLR & Mono)
    • Complete xamarin_getifaddrs.cc files and header (CLR & Mono - 2,200+ lines)
    • Updated CMakeLists.txt files to remove build references
  • Fixed linker error by removing obsolete symbols from Mono version script

Impact

This is a breaking change that removes internal APIs that were never intended for public use in modern .NET for Android. No external code should be affected as these were internal implementation details for obsolete System.AndroidPlatform methods.

Total lines removed: 2,456 lines across 16 files
Build status: ✅ Successful with no new warnings or errors

Fixes#10381.


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
CopilotAI changed the title [WIP] Obsolete code referring to System.AndroidPlatformRemove obsolete System.AndroidPlatform methods and dependenciesAug 7, 2025
@jonathanpeppers

Copy link
Copy Markdown
Member

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot check my review comments

Comment threadsrc/Mono.Android/Android.Runtime/RuntimeNativeMethods.cs
CopilotAIand others added 2 commits August 7, 2025 20:36
Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
CopilotAI changed the title Remove obsolete System.AndroidPlatform methods and dependenciesRemove obsolete System.AndroidPlatform methods and native implementationsAug 7, 2025

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot there is a new error:

(_BuildAndroidRuntimes target) -> ld.lld : error : version script assignment of 'LIBMONO_ANDROID' to symbol '_monodroid_freeifaddrs' failed: symbol not defined [/Users/builder/azdo/_work/4/s/android/src/native/native-mono.csproj]
ld.lld : error : version script assignment of 'LIBMONO_ANDROID' to symbol '_monodroid_getifaddrs' failed: symbol not defined [/Users/builder/azdo/_work/4/s/android/src/native/native-mono.csproj]
clang++ : error : linker command failed with exit code 1 (use -v to see invocation)

Is something using these methods? or is there another file to update?

Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>

CopilotAI commented Aug 8, 2025

Copy link
Copy Markdown
ContributorAuthor

@copilot there is a new error:

(_BuildAndroidRuntimes target) -> 

...

The error was caused by the Mono version script file still referencing the removed symbols. I've fixed it by removing _monodroid_freeifaddrs and _monodroid_getifaddrs from src/native/mono/libmono-android.map.txt. The CLR version was unaffected since it didn't have these symbols in its version script. Fix in commit a6a34d5.

@filipnavarafilipnavara left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM (if the build passes)

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot there are a few minor formatting issues

Comment threadsrc/native/clr/pinvoke-override/generate-pinvoke-tables.cc Outdated
Comment threadsrc/native/mono/pinvoke-override/generate-pinvoke-tables.cc Outdated
Comment threadsrc/native/mono/runtime-base/internal-pinvokes.hh Outdated
Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>

CopilotAI commented Aug 8, 2025

Copy link
Copy Markdown
ContributorAuthor

@copilot there are a few minor formatting issues

Fixed all formatting issues in commit 0dc673c - removed unnecessary blank lines from the three affected files.

@jonathanpeppers
jonathanpeppers marked this pull request as ready for review August 8, 2025 16:00
@grendello

Copy link
Copy Markdown
Contributor

I would hold off with this PR until we branch for .NET10 release. The Mono changes can potentially be breaking ones, especially removal of the *ifaddr p/invokes. There's a slim but non-zero chance that some app out there is using any of those APIs.

@filipnavara

filipnavara commented Aug 8, 2025

Copy link
Copy Markdown
Member

I find it very unlikely that any app would depend on it. This was internal implementation detail that has not been used since .NET 5 (unified .NET always shipped the shims in their native libraries).

The reason I found this in the first place is that I looked into reusing the native code for CoreCLR GC bridge for NativeAOT (which now has the same API). I was very surprised to find that this is still lurking around and that it was even ported to CoreCLR host code base.

(in fact, I would argue that from security perspective it's safer to ship less dead code in a LTS release; well, even if LTS is irrelevant for the mobile workloads)

@jonathanpeppers

Copy link
Copy Markdown
Member

main is basically .NET 10 RC 1, given it is deleting 2,400 lines. I'm ok to defer to @grendello's suggestion. We can wait to merge until we've branched for .NET 10 to put this in .NET 11. If we were on earlier previews, I would say just merge it.

It must not affect app size too much, as we have tests that fail if file sizes change within a certain percentage.

@dartasen

Copy link
Copy Markdown
Contributor

There's a slim but non-zero chance that some app out there is using any of those APIs.

Isn't it internal APIs ?

@jonathanpeppersjonathanpeppers left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

main is now .NET 11.

@jonathanpeppers
jonathanpeppers merged commit 6e91776 into mainSep 25, 2025
59 checks passed
@jonathanpeppers
jonathanpeppers deleted the copilot/fix-10381 branch September 25, 2025 20:58
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Oct 26, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Obsolete code referring to System.AndroidPlatform

5 participants

@jonathanpeppers@grendello@filipnavara@dartasen