@@ -72,6 +72,14 @@ public class GenerateJavaStubs : AndroidTask
72
72
[ Required ]
73
73
public string AndroidRuntime { get ; set ; } = "" ;
74
74
75
+ public string CodeGenerationTarget { get ; set ; } = "" ;
76
+
77
+ [ Required ]
78
+ public string TargetName { get ; set ; } = "" ;
79
+
80
+ AndroidRuntime androidRuntime ;
81
+ JavaPeerStyle codeGenerationTarget ;
82
+
75
83
internal const string AndroidSkipJavaStubGeneration = "AndroidSkipJavaStubGeneration" ;
76
84
77
85
public override bool RunTask ( )
@@ -243,10 +251,23 @@ void Run (bool useMarshalMethods)
243
251
244
252
internal static Dictionary < string , ITaskItem > MaybeGetArchAssemblies ( Dictionary < AndroidTargetArch , Dictionary < string , ITaskItem > > dict , AndroidTargetArch arch )
245
253
{
246
- if ( androidRuntime != Xamarin . Android . Tasks . AndroidRuntime . MonoVM &&
247
- androidRuntime != Xamarin . Android . Tasks . AndroidRuntime . CoreCLR ) {
248
- Log . LogDebugMessage ( $ "Skipping MonoRuntimeProvider generation for: { androidRuntime } ") ;
249
- return ;
254
+ if ( androidRuntime != Xamarin . Android . Tasks . AndroidRuntime . CoreCLR ) {
255
+ // Create additional runtime provider java sources.
256
+ bool isMonoVM = androidRuntime == Xamarin . Android . Tasks . AndroidRuntime . MonoVM ;
257
+ string providerTemplateFile = isMonoVM ?
258
+ "MonoRuntimeProvider.Bundled.java" :
259
+ "NativeAotRuntimeProvider.java" ;
260
+ string providerTemplate = GetResource ( providerTemplateFile ) ;
261
+
262
+ foreach ( var provider in additionalProviders ) {
263
+ var contents = providerTemplate . Replace ( isMonoVM ? "MonoRuntimeProvider" : "NativeAotRuntimeProvider" , provider ) ;
264
+ var real_provider = isMonoVM ?
265
+ Path . Combine ( OutputDirectory , "src" , "mono" , provider + ".java" ) :
266
+ Path . Combine ( OutputDirectory , "src" , "net" , "dot" , "jni" , "nativeaot" , provider + ".java" ) ;
267
+ Files . CopyIfStringChanged ( contents , real_provider ) ;
268
+ }
269
+ } else {
270
+ Log . LogDebugMessage ( $ "Skipping android.content.ContentProvider generation for: { androidRuntime } ") ;
250
271
}
251
272
252
273
// For NativeAOT, generate JavaInteropRuntime.java
@@ -304,7 +325,7 @@ IList<string> MergeManifest (NativeCodeGenState codeGenState, Dictionary<string,
304
325
Debug = Debug ,
305
326
MultiDex = MultiDex ,
306
327
NeedsInternet = NeedsInternet ,
307
- AndroidRuntime = AndroidRuntime ,
328
+ AndroidRuntime = androidRuntime ,
308
329
} ;
309
330
// Only set manifest.VersionCode if there is no existing value in AndroidManifest.xml.
310
331
if ( manifest . HasVersionCode ) {
@@ -338,7 +359,7 @@ IList<string> MergeManifest (NativeCodeGenState codeGenState, Dictionary<string,
338
359
( List < TypeDefinition > allJavaTypes , List < TypeDefinition > javaTypesForJCW ) = ScanForJavaTypes ( resolver , tdCache , assemblies , userAssemblies , useMarshalMethods ) ;
339
360
var jcwContext = new JCWGeneratorContext ( arch , resolver , assemblies . Values , javaTypesForJCW , tdCache , useMarshalMethods ) ;
340
361
var jcwGenerator = new JCWGenerator ( Log , jcwContext ) {
341
- CodeGenerationTarget = androidRuntime == Xamarin . Android . Tasks . AndroidRuntime . MonoVM ? JavaPeerStyle . XAJavaInterop1 : JavaPeerStyle . JavaInterop1
362
+ CodeGenerationTarget = codeGenerationTarget ,
342
363
} ;
343
364
bool success ;
344
365
0 commit comments