所以我想我现在可以使用不同的NDK编译库上传我的应用程序用于目标CPU体系结构,但似乎这是不可能的。
任何人都知道如何上传到Android Market不同的APK,每个APK包含专门针对不同CPU架构编译的库?
我没有试过这个,看起来像是空间的腰,但我们可以在一个APK中包含多个编译库吗?
更新
显然,当用户安装apk时,不支持的库将不会安装在设备上。这很好,但用户仍然需要下载整个apk浪费带宽。
答案 0 :(得分:11)
嗯,最后Google Play允许Multi-apk targeting!
“我们为使用多种APK支持的应用添加了新功能。您现在可以将每个APK定位到特定的原生平台。”
答案 1 :(得分:8)
除非您的应用程序有一堆代码,否则我建议只为Android支持的三种架构设置本机代码,即armv5,armv7和x86。它会使你的apk代码部分的大小增加三倍,但3 *(一个小数字)仍然是一个小数字。您可以通过修改jni / Application.mk文件来完成此操作,或者如果您还没有它,则创建它,并添加以下行:
APP_ABI := armeabi armeabi-v7a x86
这将为所有三个编译。
请注意,当前的ndk(ndk r6)存在一个错误,它试图将x86代码链接到arm代码。如果您获得AOSP项目source.android.com,则可以解决此问题,或者您可以等到谷歌发布r6b,这可能会有修复。否则,如果你不想这样做,你可以暂时不用线路的x86部分,然后在没有x86代码的情况下发布你的应用程序,并在新的ndk出来时推送更新。我还没有发现许多使用x86指令的流行设备。
答案 2 :(得分:1)
请参阅Android文档中的Multiple APK Support。这详细介绍了发布同一产品/应用程序的多个APK的一些细节。
至于NDK细节,如前所述,您可以在Android.mk的APP_ABI值中使用多个平台/ ABI。
答案 3 :(得分:0)
在新的Play商店开发者控制台中,如果要添加多个APK,则必须使用相同的包名称和相同的密钥库密钥,但版本代码不同。你有发布应用然后首先上传Apk例如mobile_release和rollout用于制作,在你上传另一个apk之后,你应该在以前的APK上选择RETAIN并使用当前的APK。
android {
// To create different apk per abi
splits {
abi {
enable true
reset()
include 'armeabi', 'armeabi-v7a', 'x86'
universalApk true
}
}
}
import com.android.build.OutputFile
// Map for the version code
ext.versionCodes = ['armeabi': 1, 'armeabi-v7a': 2, 'x86': 3]
android.applicationVariants.all { variant ->
// assign different version code for each output
variant.outputs.each { output ->
int abiVersionCode = project.ext.versionCodes.get(output.getFilter(OutputFile.ABI)) ?: 0
output.versionCodeOverride = (abiVersionCode * 1000) + android.defaultConfig.versionCode
}
}
答案 4 :(得分:-1)
您可以在AndroidManifest.xml
中为每个单独编译(并重新打包)的应用声明supports-gl-texture
。这将提供市场过滤功能,因此单个用户只能看到您应用的一个版本。