web-dev-qa-db-fra.com

Comment utiliser D8, R8 dans Xamarin.Forms Apps pour Android?

Je viens de télécharger vs 2019 Pre et il offre plus de configuration pour xamarin Android comme indiqué ici

Il suggère d'utiliser comme ci-dessous et dit que PROGUARD ne peut pas être utilisé avec R8 car il est remplacé par PROGUARD.

<Project>
    <PropertyGroup>
        <AndroidEnableMultiDex>True</AndroidEnableMultiDex>
        <AndroidDexTool>d8</AndroidDexTool>
        <AndroidLinkTool>r8</AndroidLinkTool>
    </PropertyGroup>
</Project>

mais je ne comprends pas vraiment comment R8 est censé travailler? Parce que l'utilisation de PROGUARD, j'ai effectué beaucoup de configurations, comme définissant la bibliothèque, la classe, la fonction de fonction. Donc, nous n'en avons pas besoin de ceux-ci? Définir simplement R8 et aller? J'ai déjà tenté comme suggéré mais j'ai une erreur que 8>R8 : error : Compilation can't be completed because some library classes are missing.

À côté de cela, comment ces paramètres sont-ils dans des ensembles natales, AoTassemblies, LLVM, etc.? Pouvons-nous utiliser ensemble avec eux. Ma configuration est comme ci-dessous. Mais malheureusement, cela ne fonctionne pas. Si je supprimais D8 et R8, cela fonctionne. J'ai essayé d'utiliser PROGUARD + D8 uniquement mais aussi ne fonctionne pas.

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>Prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <AndroidUseSharedRuntime>False</AndroidUseSharedRuntime>
    <DebugType>portable</DebugType>
    <AndroidLinkMode>Full</AndroidLinkMode>
    <EmbedAssembliesIntoApk>true</EmbedAssembliesIntoApk>
    <AndroidCreatePackagePerAbi>true</AndroidCreatePackagePerAbi>
    <JavaMaximumHeapSize>1G</JavaMaximumHeapSize>
    <AotAssemblies>true</AotAssemblies>
    <EnableLLVM>true</EnableLLVM>
    <AndroidAotAdditionalArguments>no-write-symbols,nodebug</AndroidAotAdditionalArguments>
    <DebugSymbols>false</DebugSymbols>
    <BundleAssemblies>true</BundleAssemblies>
    <AndroidEnableMultiDex>True</AndroidEnableMultiDex>
    <EnableProguard>false</EnableProguard>
    <Debugger>Xamarin</Debugger>
    <AndroidSupportedAbis>armeabi-v7a;x86;x86_64</AndroidSupportedAbis>
    <AndroidLinkSkip> </AndroidLinkSkip>
    <AndroidEnableMultipleDex>true</AndroidEnableMultipleDex>
    <AndroidExplicitCrunch>true</AndroidExplicitCrunch>
    <AndroidDexTool>d8</AndroidDexTool>
    <AndroidLinkTool>r8</AndroidLinkTool>
  </PropertyGroup>

METTRE À JOUR:

J'ai enlevé R8 et a permis à PROGUARD. Parce qu'après la lecture en général (non seulement xamarin) R8 n'est pas aussi mature que PROGUARD. J'ai donc laissé D8 seulement au-dessus de la configuration et de la mise en majusculation = true. Mais je reçois des avertissements et des erreurs concernant R8

8>"\myApp.Droid\myApp.Droid.csproj" (Rebuild;BuiltProjectOutputGroup;BuiltProjectOutputGroupDependencies;DebugSymbolsProjectOutputGroup;DebugSymbolsProjectOutputGroupDependencies;DocumentationProjectOutputGroup;DocumentationProjectOutputGroupDependencies;SatelliteDllsProjectOutputGroup;SatelliteDllsProjectOutputGroupDependencies;SGenFilesOutputGroup;SGenFilesOutputGroupDependencies target) (1) ->
8>(_CompileToDalvikWithD8 target) -> 
8>  R8 : warning : Missing class: com.Amazon.device.messaging.ADMMessageReceiver
8>  R8 : warning : Missing class: com.google.Android.gms.location.LocationListener
8>  R8 : warning : Missing class: com.Amazon.device.messaging.ADMMessageHandlerBase
8>  R8 : warning : Missing class: com.Amazon.device.iap.PurchasingListener
8>  R8 : warning : Missing class: org.Apache.http.client.methods.HttpEntityEnclosingRequestBase
8>
8>
8>"\myApp.Droid\myApp.Droid.csproj" (Rebuild;BuiltProjectOutputGroup;BuiltProjectOutputGroupDependencies;DebugSymbolsProjectOutputGroup;DebugSymbolsProjectOutputGroupDependencies;DocumentationProjectOutputGroup;DocumentationProjectOutputGroupDependencies;SatelliteDllsProjectOutputGroup;SatelliteDllsProjectOutputGroupDependencies;SGenFilesOutputGroup;SGenFilesOutputGroupDependencies target) (1) ->
8>(_CompileToDalvikWithD8 target) -> 
8>  R8 : error : Compilation can't be completed because some library classes are missing.
8>
8>    45 Warning(s)
8>    1 Error(s)
8>
13
Emil

Autre qu'un problème dans lequel ma construction a échoué avec des erreurs sur org.apache.http (qui a été corrigée avec https://github.com/xamarin/xamarin-andrroid/issues/267 ) J'ai trouvé cette configuration travaillé pour moi ...

 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>Prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <AndroidLinkMode>SdkOnly</AndroidLinkMode>
    <AndroidSupportedAbis>armeabi-v7a;x86;arm64-v8a;x86_64</AndroidSupportedAbis>
    <AndroidCreatePackagePerAbi>true</AndroidCreatePackagePerAbi>
    <AndroidHttpClientHandlerType>Xamarin.Android.Net.AndroidClientHandler</AndroidHttpClientHandlerType>

<!-- Alternative to using Proguard -->
<AndroidDexTool>d8</AndroidDexTool>
<AndroidLinkTool>r8</AndroidLinkTool>

<!-- (A) Recommended AOT settings based on https://forums.xamarin.com/discussion/104165/when-will-be-aot-available-again -->
<EmbedAssembliesIntoApk>True</EmbedAssembliesIntoApk> <!-- See (A) -->
<BundleAssemblies>True</BundleAssemblies> <!-- See (A) -->
<AotAssemblies>True</AotAssemblies> <!-- See (A) -->
<EnableLLVM>True</EnableLLVM> <!-- See (A) -->

<!-- TODO Startup Tracing -->

</PropertyGroup>

Cela déployé avec succès, il est plus rapide et la taille de l'APK même après avoir ajouté AOT est maintenant légèrement plus petite que mes constructions d'origine n'utilisables PROGUARD/AOT.

Notez que Xamarin Studio (communauté) ne vous permet pas de définir les options AOT/LLVM pour Android afin de modifier directement le projet.

En outre, cela vaut la peine d'avoir les fenêtres de construction/archives ouvertes comme il faut très longtemps (surtout si vous crachez une abi distincte par architecture), pendant un moment où je pensais que Xamarin Studio est resté coincé.

0
Devology Ltd