我正在修补适用于Mac的Visual Studio社区版本7.3.2
上的 Xamarin.Forms我想要完成的是使用 MyApp.Droid.csproj 中的这些选项将所有托管代码转换为本机可执行文件:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<EmbedAssembliesIntoApk>false</EmbedAssembliesIntoApk>
<AotAssemblies>true</AotAssemblies>
<EnableLLVM>true</EnableLLVM>
</PropertyGroup>
EmbedAssembliesIntoApk
确实将程序集嵌入到apk中,因此我将其设置为false,因为这些正是我想要摆脱的。
我还将AotAssemblies
和EnableLLVM
设置为true,以便托管代码经过AOT编译并转换为本机代码。
这些选项构建了一个带有lib/
文件夹的签名apk,其中包含下面的文件而没有任何程序集文件夹,这就是我想要的。
lib/
armeabi-v7a/
libgdbserver.so
libmono-profiler-log.so
libmonodroid.so
libmonosgen-2.0.so
问题是,如果我清除设备上的应用程序数据并尝试再次运行该应用程序,它将不会开始给我一些错误,说'找不到程序集'或'同一个程序集
的不同版本之间的冲突是否可以为 Android 构建和发布 Xamarin.Forms 应用程序,而不使用任何托管程序集,只能使用本机可执行文件?
更新
我尝试了Xamarin Studio并添加了选项BundleAssemblies
,因此项目设置如下,但Xamarin无法构建目标:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AndroidManagedSymbols>true</AndroidManagedSymbols>
<AndroidUseSharedRuntime>false</AndroidUseSharedRuntime>
<AndroidLinkMode>Full</AndroidLinkMode>
<EmbedAssembliesIntoApk>true</EmbedAssembliesIntoApk>
<AotAssemblies>true</AotAssemblies>
<EnableLLVM>true</EnableLLVM>
<BundleAssemblies>true</BundleAssemblies>
</PropertyGroup>
在Visual Studio上使用这些选项,我得到了这个可执行文件:
lib/
armeabi-v7a/
libmonodroid_bundle_app.so
libmonodroid.so
libmonosgen-2.0.so
加上一堆文件something.dll.so