3

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

使用 Gradle,我们的库似乎被放置在以下目录中: build/javaResources/release/lib/armeabi-v7a
build/javaResources/release/lib/x86
build/javaResources/debug/lib/armeabi-v7a
build/javaResources /debug/lib/x86
如果 Gradle 脚本中没有 productFlavors,Gradle 似乎知道在这些目录中查找库。所以我不知道发生了什么。为什么包含 productFlavors 会阻止 Gradle 在那里寻找库?

4

1 回答 1

4

关于您所指的示例,您是使用主帖还是最佳答案中的片段?主要帖子中的那个有点过时了,也许这就是它不适用于您的项目的原因。

您必须使用abiFilterproductFlavors 中的属性,并将本机库放在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/

于 2014-09-17T11:15:02.883 回答