Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
d9dfce0
Add trimmable [Export] callback support
simonrozsival Apr 13, 2026
22d6b11
Refactor [Export] code generation
simonrozsival Apr 13, 2026
6b69c63
Exclude Mono.Android.Export from trimmable packages
simonrozsival Apr 13, 2026
9e92791
Refine export method dispatch model
simonrozsival Apr 13, 2026
2c8dae7
Scope export method dispatch emission
simonrozsival Apr 13, 2026
ce1aa36
Tighten trimmable export cleanup
simonrozsival Apr 13, 2026
f6232bb
Propagate deferred registerNatives to base classes and fix test plumbing
simonrozsival Apr 13, 2026
67ecfbd
Remove unrelated changes: revert test plumbing, CI lane, and manifest…
simonrozsival Apr 16, 2026
a0e5e30
Revert whitespace-only changes and restore EmitRegisterNatives position
simonrozsival Apr 16, 2026
f2aa14e
Fix stack corruption in TryEmitExportParameterArgument
simonrozsival Apr 16, 2026
c6fe56d
Revert MonoAndroidExportTest changes that force trimmable typemap
simonrozsival Apr 17, 2026
d0acd52
Fix instrumentation targetPackage default
simonrozsival Apr 18, 2026
88ca58f
Fix missing 'static' keyword in Java codegen for static [Export] methods
simonrozsival Apr 21, 2026
430d5e3
Address review: perf optimization + code organization
simonrozsival Apr 21, 2026
c4aac55
Fix test: TypeMapAssociationAttribute is no longer generic
simonrozsival Apr 22, 2026
d8dc37f
Remove dead ManagedParameterTypeNames/ManagedReturnTypeName propertie…
simonrozsival Apr 22, 2026
80b2986
Fix test: TypeMapAssociationAttribute is generic (TypeMapAssociationA…
simonrozsival Apr 26, 2026
e6b38e1
Restore ExcludedTestNames for trimmable typemap tests
simonrozsival Apr 26, 2026
ffb5093
Trimmable typemap: invoke user-visible parameterless ctor in UCO wrap…
simonrozsival Apr 26, 2026
308a961
Fix bad-rebase artifacts: restore CI lane and submodule SHA
simonrozsival Apr 27, 2026
85e0b65
Reduce diff churn against base
simonrozsival Apr 27, 2026
f136461
Drop unnecessary Java_mono_android_Runtime_registerNatives JNI export
simonrozsival Apr 27, 2026
d49ba61
Move EmitRegisterNatives + AddUnmanagedCallersOnlyAttribute back to o…
simonrozsival Apr 27, 2026
586eeda
Clean up UCO ctor comment: drop test-specific detail, point at the sa…
simonrozsival Apr 27, 2026
e5c7810
Address review feedback: lazy export emitter, hoist deferred check, d…
simonrozsival Apr 27, 2026
deb6874
Add device tests for parameterized ctor activation contract
simonrozsival Apr 27, 2026
4aaf705
Redesign parameterized ctor activation tests around Throwable args
simonrozsival Apr 27, 2026
c1cc2b6
[trimmable typemap] Gate user-ctor UCO emission on matching managed .…
simonrozsival Apr 27, 2026
5d623bf
[trimmable typemap] Forward JNI args to user-visible parameterized .ctor
simonrozsival Apr 27, 2026
f438f1f
[trimmable typemap] Simplify ManagedParameterTypes plumbing
simonrozsival Apr 27, 2026
1f6ffbf
[trimmable typemap] Extract user-visible ctor wrapper emission helper
simonrozsival Apr 27, 2026
07b14f9
Reuse export primitive marshalling for parameterized UCO ctor args
simonrozsival Apr 27, 2026
71317c0
Add Mono.Android.NET-Tests device coverage for [Export] marshalling
simonrozsival Apr 27, 2026
bca9cd1
Wrap [Export] UCO methods with OnUserUnhandledException routing
simonrozsival Apr 27, 2026
27dfe39
Skip parameterized [Export] ctors with unsupported types
simonrozsival Apr 27, 2026
c6c8ea6
Update [Export] throws tests for OnUserUnhandledException semantics
simonrozsival Apr 27, 2026
8835615
Marshal enum [Export] params/returns via underlying primitive JNI ABI
simonrozsival Apr 27, 2026
82dc863
Marshal ICharSequence and non-generic collection [Export] returns via…
simonrozsival Apr 27, 2026
e5767fa
Update export-comparison.md to reflect Phase 1 marshalling parity work
simonrozsival Apr 27, 2026
e06d2d2
Make enum scanner resolution assembly-aware and resilient to FQN coll…
simonrozsival Apr 27, 2026
372c1ac
Simplify enum scanner helpers in JavaPeerScanner
simonrozsival Apr 27, 2026
9292fc6
Remove export-comparison.md — analysis doc not intended for merge
simonrozsival Apr 27, 2026
ef712f0
Add scanner integration coverage for advanced [Export] shapes
simonrozsival Apr 27, 2026
f1272b9
Scanner integration: cover [ExportField] and [ExportParameter]; fix u…
simonrozsival Apr 27, 2026
f577304
Phase A scanner coverage: dispatch & declaration shapes
simonrozsival Apr 27, 2026
fb8ed6c
Phase B scanner coverage: edge marshalling shapes
simonrozsival Apr 27, 2026
e2a45df
Phase C scanner coverage: robustness shapes
simonrozsival Apr 27, 2026
16382c2
Fix trimmable export rebase fallout
simonrozsival May 5, 2026
a730499
Merge branch 'main' into dev/simonrozsival/trimmable-typemap-export-a…
Copilot May 6, 2026
2d76be1
Merge remote-tracking branch 'origin/main' into dev/simonrozsival/tri…
simonrozsival May 7, 2026
fbef8ee
Merge main into dev/simonrozsival/trimmable-typemap-export-attribute …
simonrozsival May 9, 2026
3507f3e
Surface diagnostic for silent user-ctor fallback in trimmable typemap
simonrozsival May 11, 2026
11c95d2
Add scanner regression tests for HasMatchingManagedCtor + CtorFallbac…
simonrozsival May 11, 2026
7f1c2ae
Phase D integration: [Export] on a [Register]'d interface implementor
simonrozsival May 11, 2026
fcbf35f
Build-task coverage: trimmable [Export]/[ExportField] artifacts + tri…
simonrozsival May 11, 2026
399ed83
Device tests for nested + re-entrant exception routing through [Export]
simonrozsival May 11, 2026
a6017e4
fixup! Build-task coverage: match generated JCW Java by content not f…
simonrozsival May 11, 2026
fee4ce4
Release notes: document trimmable [Export]/[ExportField] support + Mo…
simonrozsival May 11, 2026
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
@@ -0,0 +1,36 @@
#### App build and runtime

- [GitHub PR #11123](https://github.com/dotnet/android/pull/11123):
Add trimming-friendly support for the `[Export]` and `[ExportField]`
attributes to the trimmable type map (`_AndroidTypeMapImplementation=trimmable`).

Customer-visible behavior notes when building with
`_AndroidTypeMapImplementation=trimmable`:

- `[Export]` and `[ExportField]` are supported on user types deriving from
_Java.Lang.Object_ (and other registered Java peers). The build emits
`[UnmanagedCallersOnly]` wrappers and registers them with the matching
Java _native_ methods directly — no dynamic codegen at runtime.

- The _Mono.Android.Export_ assembly is excluded from the trimmable build
because its `DynamicMethod`-based codegen is incompatible with trimming
and AOT. Applications that only consume the `[Export]` /
`[ExportField]` attributes are unaffected (the attribute types are
defined on the user assembly's referenced types).

Apps or libraries that directly call APIs in the _Mono.Android.Export_
assembly are not supported under the trimmable type map.

- User-visible managed constructors are now invoked when Java instantiates
a peer via a registered Java constructor (for example, the `(Throwable cause)`
constructor on `Throwable` subclasses and parameterized `[Export]` constructors).
Previously the trimmable path always built the peer via the activation
constructor `(IntPtr, JniHandleOwnership)`, which skipped any user
constructor body.

- Unhandled managed exceptions thrown from an `[Export]` method are routed
through `JniRuntime.OnUserUnhandledException` (matching the modern
_JavaInterop_ exception contract). The original managed exception type
and message are preserved across the JNI boundary. This differs from
the legacy _LLVM IR_ type map path, which converted the exception into
a _Java.Lang.Throwable_ via `AndroidEnvironment.UnhandledException`.
Loading