如何在 Xamarin Droid 构建系统中不单独指定每个资产的情况下打包 Android 资产?



使用Xamarin,我想制作一个包含大量资产的android apk。我不想在 csproj 中单独添加每个,因为数量很大,而且资产的可变性。(通过先前的构建步骤生成)

这需要在单个 apk 模式下和每个 ABI 模式下一个 apk 都有效。

资产在磁盘上的位置

在项目目录中,创建以下目录:

ExtraAssetsassets
ExtraAssets-armeabi-v7a-23.0.0assets 
ExtraAssets-x86_64-23.0.0assets  

(一个平台少一个,每个必需的支持平台一个) 出自:

armeabi, armeabi-v7a, arm64-v8a, x86, x86_64

其中 23.0.0 是目标 Android API。

将所有必需的资产文件放入资产目录中。

修改 csproj

在Droid csproj(例如。MyApp.Droid.csproj) 添加以下部分:

(每个必需的受支持平台的执行,加上一个平台减去一个)

<Target Name="DebugDeploy" BeforeTargets="_Sign">
<Exec Command="&quot;$(JavaToolPath)jar.exe&quot; -uMf &quot;$(MonoAndroidIntermediate)androidbin$(_AndroidPackage).apk&quot; -C &quot;$(ProjectDir)ExtraAssets-x86-64-$(AndroidSdkBuildToolsVersion)&quot; assets" Condition="Exists('$(OutDir)$(_AndroidPackage).apk') and '$(Configuration)|$(Platform)' == 'Debug|AnyCPU'" />  
</Target>
<Target Name="BeforePublish" BeforeTargets="_Sign">  
<Exec Command="&quot;$(JavaToolPath)jar.exe&quot; -uMf  &quot;$(MonoAndroidIntermediate)androidbin$(_AndroidPackage).apk&quot; -C &quot;$(ProjectDir)ExtraAssets&quot; assets" Condition="Exists('$(OutDir)$(_AndroidPackage).apk')" />
<Exec Command="&quot;$(JavaToolPath)jar.exe&quot; -uMf &quot;$(MonoAndroidIntermediate)androidbin$(_AndroidPackage)-armeabi-v7a.apk&quot; -C &quot;$(ProjectDir)ExtraAssets-armeabi-v7a-$(AndroidSdkBuildToolsVersion)&quot; assets" Condition="Exists('$(OutDir)$(_AndroidPackage)-armeabi-v7a.apk')" />
<Exec Command="&quot;$(JavaToolPath)jar.exe&quot; -uMf &quot;$(MonoAndroidIntermediate)androidbin$(_AndroidPackage)-x86_64.apk&quot; -C &quot;$(ProjectDir)ExtraAssets-x86_64-$(AndroidSdkBuildToolsVersion)&quot; assets" Condition="Exists('$(OutDir)$(_AndroidPackage)-x86_64.apk')" />     
</Target>

调试部署目标在使用模拟器进行调试时会有所帮助,您只想生成单个 apk。

这应该在 apk 的包创建后运行,并在 apk 签名发生之前将 ExtraAsserts\assets 中的所有文件插入(无平台)apk 中。

特定于平台的 ExtraAsserts入到特定于平台的 apk 中。

Xamarin 特定的 BuildVars 描述:

_BuildTargetAbis- 部署目标 ABI 例如:"Armeabi-V7A;x86_64">

_AndroidPackage- 不带平台和.apk分机的软件包名称

JavaToolPath- Java 工具的位置 - jar 需要.exe

AndroidSdkBuildToolsVersion- 安卓API版本。(例如:"23.0.0")

ApkFileIntermediate- 在 obj dir 中路径 tp apk 文件 -这是签名的文件(而不是 OutDir 中的那个)

MonoAndroidIntermediate- 包含 "android\bin\" 的 obj 目录,该文件引用的文件所在的位置ApkFileIntermedate该目录。

相关内容

最新更新