私はVs 2019 preをダウンロードしたばかりで、xamarin Android述べられているように、より多くの構成を提供します here
それは以下のように使用することを提案し、それはそれがプロガードの代わりであるため、プロガードはr8と一緒に使用できないことを伝えます。
<Project>
<PropertyGroup>
<AndroidEnableMultiDex>True</AndroidEnableMultiDex>
<AndroidDexTool>d8</AndroidDexTool>
<AndroidLinkTool>r8</AndroidLinkTool>
</PropertyGroup>
</Project>
しかし、私はr8がどのように機能するはずなのか本当にわかりませんか? Proguardを使用して、どのライブラリ、クラス、関数が保持するかを定義するなど、多くの構成を行ったためです。だから私たちはそれらのどれも必要としませんか?単純にr8をセットアップして実行しますか?私は提案されたようにすでに試みましたが、8>R8 : error : Compilation can't be completed because some library classes are missing.
それ以外に、これらの設定はネイティブアセンブリ、AotAssemblies、LLVMなどへのバンドルにどのように影響しますか?それらと一緒に使用できますか?私の設定は以下の通りです。しかし、残念ながらそれは機能しません。 D8とR8を削除すると機能します。 Proguard + D8のみを使用しようとしましたが、機能しません。
<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>
更新:
R8を削除し、プロガードを有効にしました。一般的に読んだ後(xamarinだけでなく)、r8はproguardほど成熟していないからです。そのため、d8をconfiguarionおよびEnableProguard = trueの上にのみ設定します。しかし、私は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>
Org.Apache.httpに関するエラーでビルドが失敗した問題以外(これは https://github.com/xamarin/xamarin-Android/issues/267 で修正されました)この構成を見つけました私のために働いた...
<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>
これは正常に展開され、より速くなり、AOTを追加した後でもAPKサイズは、ProGuard/AOTを使用しなかった元のビルドよりもわずかに小さくなりました。
Xamarin Studio(コミュニティ)ではAndroidのAOT/LLVMオプションを設定できないため、プロジェクトを直接編集する必要があることに注意してください。
また、非常に長い時間がかかるので(特に、アーキテクチャごとに個別のABIを吐いている場合)、しばらくの間、Xamarin Studioが動かなくなったと思ったので、ビルド/アーカイブウィンドウを開いておく価値があります。