如何在没有托管可执行文件的情况下构建Xamarin.Android项目?

时间:2017-12-29 17:02:32

标签: visual-studio xamarin xamarin.forms xamarin.android

我正在修补适用于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,因为这些正是我想要摆脱的。

我还将AotAssembliesEnableLLVM设置为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

0 个答案:

没有答案