使用Gradle和产品风格构建Android应用程序时,不包括库。

3
我有一个Android应用程序,我已经成功地使用Gradle(使用Gradle 0.7)构建。现在我想设置Gradle来构建两个单独的.APK文件,一个只包含ARM本机库,另一个只包含Intel x86本机库。我尝试使用productFlavors,如下例所示:
如何配置NDK与Android Gradle插件0.7
但是,在Gradle脚本中指定productFlavors后,.APK文件根本不包括任何库(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在那里查找库呢?
1个回答

4
关于您提到的示例,您是使用主贴还是最佳答案中的代码段?主贴中的代码有点过时,可能这就是为什么它不能与您的项目一起使用的原因。
您需要在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
    }
}

请注意,在此示例中,我还修改了每个产品口味的应用程序versionCode,以便它可以正确地处理Play商店上的多个APK处理功能。
您可以在此处获取有关所有这些操作方式的更多背景信息:http://ph0b.com/android-studio-gradle-and-ndk-integration/

谢谢您的回复。我已经尝试将库放在src/main/jniLibs文件夹中,就像我阅读的链接所描述的那样,但它仍然没有从那里获取库。不过,我想知道是否有一种设置可以告诉Gradle在您想要将它们放在不同目录中时找到库的位置? - CalicoSkies
奇怪,你是否停用了之前的集成方法?你可以像这样更改libs目录:android { ... sourceSets.main { jniLibs.srcDir 'src/main/libs' } }。此外,为使其正常工作,您需要使用至少android插件0.7.3(最好使用最新版本)。 - ph0b
在我的情况下,只是添加到BuilTypes可以工作,但添加到flavors时应用程序会崩溃。 - Mahdi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接