Android Market多个APK ...不同的CPU架构怎么样?

时间:2011-08-11 15:45:16

标签: android android-ndk

所以我想我现在可以使用不同的NDK编译库上传我的应用程序用于目标CPU体系结构,但似乎这是不可能的。

任何人都知道如何上传到Android Market不同的APK,每个APK包含专门针对不同CPU架构编译的库?

我没有试过这个,看起来像是空间的腰,但我们可以在一个APK中包含多个编译库吗?

更新
显然,当用户安装apk时,不支持的库将不会安装在设备上。这很好,但用户仍然需要下载整个apk浪费带宽。

5 个答案:

答案 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。这将提供市场过滤功能,因此单个用户只能看到您应用的一个版本。