使用Gradle的Android构建和不包括库的产品风格

时间:2014-09-16 20:09:38

标签: android gradle libraries android-productflavors

我有一个Android应用程序,我已经能够使用Gradle成功构建(使用Gradle 0.7)。现在我想设置Gradle来构建两个独立的.APK,一个只有ARM本机库,另一个只有Intel x86本机库。我尝试过使用productFlavors,如下例所示:
How to configure NDK with Android Gradle plugin 0.7
但是,使用我的Gradle脚本中指定的productFlavor,.APKs根本不包含任何库(libs目录本身不在.APK中)。如果没有productFlavors,则包含库 - 尽管生成的APK将包含ARM和x86库。

使用Gradle,似乎我们的库被放置在以下目录中: 建立/ javaResources / release / lib目录/ armeabi-V7A
建立/ javaResources / release / lib目录/ 86
建立/ javaResources /调试/ lib目录/ armeabi-V7A
建立/ javaResources /调试/ lib目录/ 86
如果没有Gradle脚本中的productFlavors,Gradle似乎知道在这些目录中查找库。所以我对于发生了什么感到茫然。为什么包含productFlavor会阻止Gradle查找库?

1 个答案:

答案 0 :(得分:3)

关于您所指的示例,您使用的是主帖或其最佳答案的片段吗?主帖中的那个有点过时,也许这就是为什么它不适用于你的项目。

您必须使用productFlavors中的abiFilter属性,并将您的本机库放在jniLibs文件夹中。这是一个示例build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 20
    buildToolsVersion "20"

    defaultConfig{
        minSdkVersion 15
        targetSdkVersion 20
        versionCode 101
        versionName "1.0.1"
    }

   flavorDimensions "abi"

    productFlavors {
        x86 {
            flavorDimension "abi"
            ndk {
                abiFilter "x86"
            }
            versionCode 5
        }
        arm {
            flavorDimension "abi"
            ndk {
                abiFilter "armeabi-v7a"
            }
            versionCode 2
        }
        all {
            flavorDimension "abi"
            versionCode 0
        }
    }

    // make per-variant version code
    applicationVariants.all { variant ->
        // get the version code of each flavor
        def abiVersion = variant.productFlavors.get(0).versionCode

        // set the composite code
        variant.mergedFlavor.versionCode = abiVersion * 100000 + defaultConfig.versionCode
    }
}

请注意,在此示例中,我还修改了每个productFlavor应用的versionCode,因此它可以正常使用Play商店中的多个APK处理功能。

您可以在此处获取有关所有这些内容的更多背景信息:http://ph0b.com/android-studio-gradle-and-ndk-integration/