使用 Visual Studio 2015 定向 x86 和 ARM 设备上的 Android 应用





5.00/5 (2投票s)
使用 Visual Studio 2015 定向 x86 和 ARM 设备上的 Android 应用
英特尔® 开发人员专区提供跨平台应用开发的工具和操作信息、平台和技术信息、代码示例以及同行专业知识,以帮助开发人员进行创新并取得成功。加入我们的 Android、物联网、英特尔® 实感™ 技术和 Windows 社区,下载工具、访问开发套件、与志同道合的开发人员分享想法,并参与编程马拉松、竞赛、路演和本地活动。
Android APK 可以支持七种不同的架构,这些架构由 APK 中 lib/<ABI> 文件夹中存在的 .so 文件(原生库)定义。 其中 <ABI> 对应于支持的架构,即在 Android 上:armeabi、armeabi-v7a、x86、mips、arm64-v8a、mips64、x86_64。
如果 APK 中没有 .so 文件,则会自动支持所有架构,但 Visual Studio* 2015 项目并非如此。来自 Visual Studio* 2015 Android* 应用程序项目的 APK 会生成特定于 CPU 的 APK,无论是 C# (Xamarin) 还是 Visual C++ 项目。
从单个 APK 支持 Android* 可以运行的所有架构是一种很好的做法。如果这使得 APK 太大,或者使用特定的工具链根本无法做到,则应用程序也可以在 Play* 商店上拥有多个 APK,每个 APK 针对不同的架构。
您必须遵循一个简单的规则才能正确打包和分发多个 APK:版本代码必须不同,并且最好按以下方式排序
x86_64 versionCode > arm64-v8a > mips64 > x86 > mips > armeabi-v7a > armeabi
此规则的原因是,Play 商店将始终分发具有最高版本代码的 APK,这些 APK 与客户端设备兼容。 x86(_64) 设备可能也能够运行 ARM APK,因此最高的版本代码必须分配给 x86_84 和 x86 APK,以便将正确的 APK 分发到可以更好地运行它们的设备上。
对于 Visual C# (Xamarin) 项目
在调试模式下,默认情况下会嵌入所有架构的 .so 文件。这可能会让您觉得在开发时一切正常,但实际上,在发布模式下,默认情况下仅集成 armeabi 库。
要更改此设置,请打开您的应用程序属性,并在Android 选项,高级下,勾选所有您想要支持的架构
当您运行发布版本时,输出将是一个包含所有选定架构的库的 APK
如果您想缩小此 APK 的大小,您可以启用构建以生成每个架构一个 APK(版本代码将默认正确处理)
要了解如何将这些多个 APK 上传到 Play 商店上的单个应用程序,您需要按照本文末尾描述的步骤操作。
对于 Visual C++ 项目
默认情况下,Visual C++ 项目启用了两个目标:ARM (armeabi-v7a) 和 x86。
但是,为 x86 或 ARM 构建会生成仅包含 x86 或 ARM .so 文件的 APK。这很好,但这些 APK 具有完全相同的 versionCode
,即在 AndroidManifest.xml 中设置的版本代码。这意味着它们不能都上传到同一应用程序的 Play 商店。
您可以通过添加自定义 ant 规则来让 Visual Studio 2015 生成具有不同版本代码的 ARM 和 x86 APK 来解决此问题。
创建一个名为 "custom_rules.xml" 的文件,内容如下
<project name="custom_rules">
<available file="libs/x86" property="x86Dir.exists"/>
<available file="libs/armeabi-v7a" property="armDir.exists"/>
<target name="-pre-build-x86" if="x86Dir.exists" unless="armDir.exists">
<echo>prefixing version code with 5 (for x86 ABI).</echo>
<replaceregexp file="AndroidManifest.xml" match="android:versionCode.*([0-9]+).*"
replace='android:versionCode="5\1"'/>
</target>
<target name="-pre-build-arm" if="armDir.exists" unless="x86Dir.exists">
<echo>prefixing version code with 3 (for armeabi-v7a ABI).</echo>
<replaceregexp file="AndroidManifest.xml" match="android:versionCode.*([0-9]+).*"
replace='android:versionCode="3\1"'/>
</target>
<target name="-pre-build" depends="-pre-build-x86,-pre-build-arm" />
</project>
并将其放在 build.xml 文件旁边,位于 Packaging 项目的根目录中
完成此操作后,版本代码将在 x86 APK 中以 5 为前缀,在 ARM APK 中以 3 为前缀。这样,生成的 APK 就可以直接上传到 Play 商店,如下一节中所述。
将多个 APK 发布到 Play 商店
转到 APK 上传页面,如果需要,请单击“切换到高级模式”
然后,上传具有不同 ABI 支持和版本代码的 APK。它们应该像在 APK 管理屏幕上一样显示,并包含其差异和版本代码的摘要
如果出现问题,您可以使用 Android 构建工具中的 aapt 来检查 APK 支持哪些 versionCode
和 native-code
>C:\Android\sdk\build-tools\23.0.0-preview\aapt.exe dump badging App1.apk
package: name='com.xhallade.test versionCode='81' versionName='1.0' platformBuildVersionName='5.1.1-1819727'
…
native-code: 'x86_64'
>
如果您想直接从 Android 设备执行相同的操作并检查同时安装了哪些 .so 文件,您可以使用 Native Libs Monitor。