我认为现在可以使用不同的NDK编译库来上传我的应用程序,以针对不同的CPU架构,但似乎这是不可能的。
有人知道如何上传到Android市场,每个APK都包含专门为不同CPU架构编译的库吗?
我还没有尝试过这种方法,这看起来很浪费空间,但我们能否将多个编译后的库放在一个APK中?
更新:
显然,当用户安装apk时,不支持的库将不会被安装到设备上。这很好,但用户仍然需要下载整个apk,浪费带宽。
我认为现在可以使用不同的NDK编译库来上传我的应用程序,以针对不同的CPU架构,但似乎这是不可能的。
有人知道如何上传到Android市场,每个APK都包含专门为不同CPU架构编译的库吗?
我还没有尝试过这种方法,这看起来很浪费空间,但我们能否将多个编译后的库放在一个APK中?
更新:
显然,当用户安装apk时,不支持的库将不会被安装到设备上。这很好,但用户仍然需要下载整个apk,浪费带宽。
如果你的应用程序没有大量代码,我建议只放置android支持的三种架构(armv5、armv7和x86)的本地代码。虽然这将使你的apk文件中的代码部分大小增加三倍,但3*(一个小数字)仍然是一个小数字。你可以通过修改jni/Application.mk文件或创建该文件来实现此功能,并添加以下行:
APP_ABI := armeabi armeabi-v7a x86
这将编译成三个版本。
注意,当前的ndk(r6)存在一个错误,即尝试将x86代码链接到arm代码上。如果你获得AOSP项目(source.android.com),那么可以解决这个问题。或者你可以等待谷歌发布r6b,它可能会修复这个问题。否则,如果你不想这样做,现在可以省略该行中的x86部分,在应用程序中不包含x86代码,并在新的ndk推出时推出更新。我不知道有多少流行设备使用了x86指令。
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
}
}
AndroidManifest.xml
中声明supports-gl-texture
。这将提供市场过滤,因此单个用户只能看到您的应用程序的一个版本。