Dans Visual Studio 2017 15.4, tout se passe bien. Mais après la mise à niveau vers la version 15.5, mon projet Android xamarin ne peut pas être généré correctement, en affichant:
error XA4212: Type `Android.Support.V4.App.JobIntentService/JobServiceEngineImpl` implements `Android.Runtime.IJavaObject` but does not inherit `Java.Lang.Object` or `Java.Lang.Throwable`. This is not supported.
Suite à la réponse de @Ironman, cela se produit avec Xamarin.Android 8.0. J'ai donc défini la propriété sur false dans le fichier .csproj du projet dans la section suivante.
<PropertyGroup>
<!-- Other properties -->
<AndroidErrorOnCustomJavaObject>false</AndroidErrorOnCustomJavaObject>
</PropertyGroup>
Dans la plupart des cas, vous devez ajouter la propriété car elle n'existe pas par défaut.
Vous pouvez maintenant créer et exécuter l'application normalement, avec un avertissement uniquement.
Méfiez-vous des autres balises PropertyGroup _ à l'intérieur du fichier .csproj, spécifiques aux conditions de construction.
Vous pouvez voir les autres propriétés et configurations de construction dans https://github.com/xamarin/xamarin-Android/blob/master/Documentation/build_process.md
J'ai donc rencontré cette erreur lors de la mise à jour de Visual Studio. Je l'ai finalement retrouvé dans le fichier csproj, pointant toujours vers la version 4.1 de mono.Android. Entrer et pointer le curseur vers la nouvelle version (8.1 au moment de mon écriture) l’a corrigé.
<Reference Include="Mono.Android">
<HintPath>C:\Program Files (x86)\Microsoft Visual Studio\Preview\Professional\Common7\IDE\ReferenceAssemblies\Microsoft\Framework\MonoAndroid\v8.1\Mono.Android.dll<HintPath> </Reference>
J'ai résolu le problème en cliquant avec le bouton droit de la souris sur la solution et en choisissant Nettoyer. Si vous recevez un message vous demandant de vérifier que le projet est sélectionné pour être déployé dans le Gestionnaire de configuration de solution après avoir essayé de nettoyer, vous pouvez trouver des instructions sur la façon de résoudre ce problème ici .
AndroidErrorOnCustomJavaObject:
Une propriété booléenne qui détermine si les types peuvent implémenter
Android.Runtime.IJavaObject
sans hériter également deJava.Lang.Object
ouJava.Lang.Throwable
:
class BadType : IJavaObject {
public IntPtr Handle {
get {return IntPtr.Zero;}
}
public void Dispose()
{
}
}
Lorsque True, de tels types généreront une erreur XA4212, sinon un avertissement XA4212 sera généré.
La prise en charge de cette propriété a été ajoutée dans Xamarin.Android 8.1.
Cette propriété est True par défaut.
Je devais hériter de Lava.Lang.object et supprimer Android.Runtime.IJavaObject pour résoudre le problème.