在Xamarin Droid构建系统中,如果不单独指定每个资源,如何打包Android资产?
我想使用Xamarin生成一个android apk,它包含大量资产。我不想在csproj中单独添加每一个,因为数量很大,而且资产是可变的。(通过先前的构建步骤生成)在Xamarin Droid构建系统中,如果不单独指定每个资源,如何打包Android资产?,android,xamarin,csproj,Android,Xamarin,Csproj,我想使用Xamarin生成一个android apk,它包含大量资产。我不想在csproj中单独添加每一个,因为数量很大,而且资产是可变的。(通过先前的构建步骤生成) 这需要在单个apk模式和每个ABI模式下都工作。磁盘上的资产位置 在项目目录中创建以下目录: ExtraAssets\assets ExtraAssets-armeabi-v7a-23.0.0\assets ExtraAssets-x86_64-23.0.0\assets (一个平台少一个,每个所需支撑平台一个) 其中:
这需要在单个apk模式和每个ABI模式下都工作。磁盘上的资产位置 在项目目录中创建以下目录:
ExtraAssets\assets
ExtraAssets-armeabi-v7a-23.0.0\assets
ExtraAssets-x86_64-23.0.0\assets
(一个平台少一个,每个所需支撑平台一个)
其中:
其中23.0.0是目标Android API
将所有必需的资产文件放在资产目录中
修改csproj
在Droid csproj(例如MyApp.Droid.csproj
)中添加以下部分:
(每个所需支持平台的Exec,加上一个无平台的Exec)
当使用模拟器进行调试时,DebugDeploy目标会有所帮助,您只需要生成一个apk
这应该在创建apk包之后运行,并在apk签名之前将ExtraAsserts\assets中的所有文件插入(无平台)apk
平台特定的外部断言被插入到平台特定的APK中
Xamarin特定构建变量说明:
\u BuildTargetAbis
-部署目标abi,例如:“armeabi-v7a;x86\u 64”
\u AndroidPackage
-不带平台和.apk ext的包名
JavaToolPath
-java工具的位置-jar.exe需要
AndroidSdkBuildToolsVersion
-android API版本。(例如:“23.0.0”)
ApkFileIntermediate
-Path tp obj dir中的apk文件-这是一个已签名的文件(而不是OutDir中的文件)
MonoAndroidIntermediate
-包含“android\bin\”的obj目录,其中包含ApkFileIntermedate
文件引用的文件
armeabi, armeabi-v7a, arm64-v8a, x86, x86_64
<Target Name="DebugDeploy" BeforeTargets="_Sign">
<Exec Command=""$(JavaToolPath)\jar.exe" -uMf "$(MonoAndroidIntermediate)android\bin\$(_AndroidPackage).apk" -C "$(ProjectDir)\ExtraAssets-x86-64-$(AndroidSdkBuildToolsVersion)" assets" Condition="Exists('$(OutDir)\$(_AndroidPackage).apk') and '$(Configuration)|$(Platform)' == 'Debug|AnyCPU'" />
</Target>
<Target Name="BeforePublish" BeforeTargets="_Sign">
<Exec Command=""$(JavaToolPath)\jar.exe" -uMf "$(MonoAndroidIntermediate)android\bin\$(_AndroidPackage).apk" -C "$(ProjectDir)\ExtraAssets" assets" Condition="Exists('$(OutDir)\$(_AndroidPackage).apk')" />
<Exec Command=""$(JavaToolPath)\jar.exe" -uMf "$(MonoAndroidIntermediate)android\bin\$(_AndroidPackage)-armeabi-v7a.apk" -C "$(ProjectDir)\ExtraAssets-armeabi-v7a-$(AndroidSdkBuildToolsVersion)" assets" Condition="Exists('$(OutDir)\$(_AndroidPackage)-armeabi-v7a.apk')" />
<Exec Command=""$(JavaToolPath)\jar.exe" -uMf "$(MonoAndroidIntermediate)android\bin\$(_AndroidPackage)-x86_64.apk" -C "$(ProjectDir)\ExtraAssets-x86_64-$(AndroidSdkBuildToolsVersion)" assets" Condition="Exists('$(OutDir)\$(_AndroidPackage)-x86_64.apk')" />
</Target>