Android 具有ABI拆分的特定体系结构的渐变依赖性

Android 具有ABI拆分的特定体系结构的渐变依赖性,android,android-gradle-plugin,build.gradle,gradle-dependencies,Android,Android Gradle Plugin,Build.gradle,Gradle Dependencies,我面临着这个似乎无法解决的问题。下面是一个场景: Im正在构建使用渐变依赖项的apk,并且此依赖项是特定于体系结构的,因此对于x86的apk,我需要不同的依赖项,对于arm也需要不同的依赖项 我用产品口味解决了这个问题: productFlavors { dev { ... } develx86 { ... } production { ... } productionx86 { ... } } 然后我定义了如下的依赖关系: develCompile 'depend

我面临着这个似乎无法解决的问题。下面是一个场景:

Im正在构建使用渐变依赖项的apk,并且此依赖项是特定于体系结构的,因此对于x86的apk,我需要不同的依赖项,对于arm也需要不同的依赖项

我用产品口味解决了这个问题:

productFlavors {

   dev { ... }
   develx86 { ... }
   production { ... }
   productionx86 { ... }

}
然后我定义了如下的依赖关系:

develCompile 'dependency_for_arm'
develx86Compile 'dependency_for_x86'
这很有效。但最近我不得不在我的应用程序中添加renderscript的用法。我是这样做的:

renderscriptTargetApi 22
renderscriptSupportModeEnabled true
之后,当我在Google Play上上传apk时,它说apk适合arm x86。我不知道这怎么可能。正如您所想,它将在具有不同CPU的设备上崩溃(若我为arm生成apk,用户将在x86上执行它,那个么应用程序将崩溃)

所以我决定使用ABI拆分:

splits {
        abi {
            enable true
            reset()
            include 'armeabi', 'x86'
            universalApk false
        }
    }

//Ensures architecture specific APKs have a higher version code
//(otherwise an x86 build would end up using the arm build, which x86 devices can run)
ext.versionCodes = [armeabi:0, x86:1]

import com.android.build.OutputFile

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 = android.defaultConfig.versionCode + abiVersionCode
    }
但现在,当我看到生成的apk文件时,我的依赖项(即特定于味道的依赖项)没有包含在apk中,当我打开使用此依赖项的API的部分时,apk将崩溃

有人知道如何解决这个问题吗?或者有人知道为什么Google Play在我加入renderscript时说apk适用于这两种体系结构吗?(如果没有它,它可以正常工作,但我需要renderscript)


谢谢你抽出时间。我将非常感谢您的帮助。

很抱歉,我还不能在线发表评论

apk中有什么,特别是在res/raw/和lib/中?
另外,您是否正在使用gradle插件2.1.0?(由于您使用的是renderscript TargetAPI 22,您是否尝试过构建工具23.0.3?

如果查看APK内部的lib文件夹,您应该会看到renderscript支持模式为您支持的架构之外的其他架构添加了lib

您可以使用特定于ABI的风格保留早期配置。 但为了确保不包括其他体系结构的lib,请尝试向您的风格添加abiFilters:

productFlavors {

   dev { ... ndk.abiFilters 'armeabi-v7a' }
   develx86 { ... ndk.abiFilters 'x86' }
   production { ... ndk.abiFilters 'armeabi-v7a' }
   productionx86 { ... ndk.abiFilters 'x86' }

}

运气好吗?如果你找到了答案,请把它贴出来