当前位置: 首页 > 知识库问答 >
问题:

Android build具有Gradle和product口味(不包括库)

徐景明
2023-03-14

我有一个Android应用程序,我已经能够用Gradle成功构建(使用Gradle0.7)。现在,我想设置Gradle来构建两个单独的.apk,一个只有ARM本机库,另一个只有Intel x86本机库。我尝试使用productFlavors,如下例所示:
How to configure NDK with Android Gradle Plugin0.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/armeabi-v7a
build/javaresources/debug/lib/x86
如果没有Gradle脚本中的productFlavors,Gradle似乎知道在这些目录中查找库。所以我不知道到底发生了什么。为什么productFlavors的加入会阻止Gradle在那里寻找库呢?

共有1个答案

司空俊悟
2023-03-14

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

您必须在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
    }
}

请注意,在本例中,我还为每个ProductFlave修改了应用程序的版本代码,因此它可以与Play Store上的多个APK处理功能一起正常工作。

您可以在这里获得更多关于这一切如何工作的背景信息:http://ph0b.com/android-studio-gradle-and-ndk-integration/

 类似资料:
  • 我一直在寻找在中包含FXML和图像的适当方法,以便将它们构建到JAR中。我看过这里,试过它,但它仍然不起作用。 抛出此错误: 以下是(Github): 下面是gui.java(Github): stacktrace表示导致了错误 在外面的树,他们都不在,我已经摆弄了几个小时,试图解决这个问题。如有任何帮助,将不胜感激。 如果需要更多信息,这里还有Github存储库

  • null 我尝试过的相关帖子: 从单个生成类型生成使用不同密钥签名的多个生成 这需要为每种口味配置 它似乎没有使用我自定义的 null null 我的的重要部分如下所示:

  • 我正在尝试将我的项目迁移到gradle。我的一个项目有多种产品风格,并且每个项目都必须在其发布版本中使用不同的进行签名。所以这是我到目前为止尝试的: 当我运行时,我得到一个和以下错误消息: 所以我假设。*Gradle脚本的一部分不是放置代码签名配置的正确位置。

  • 在app.gradle中,我只为专业版添加了LockPattern库: 我在两种风格中都描述了相同的类(所以在主文件夹中),因为它很大,我不想在两种风格中重复代码。pro版本成功构建,但lite版本显示了一个错误,因为我没有导入lite版本的依赖项。 我看到的一个解决方案是将lockpattern库添加到两种口味中,然后使用proGuard,将其从lite口味中删除。虽然我相信这可能奏效,但这可能

  • 当我试图给我的项目添加一种风格时,Gradle就是不想同步,即使我同步了,我也看不到构建变量中的风格。什么会导致这个问题?该项目有几个模块,我需要添加应用程序的味道。我的文件: 我从这里删除了一些信息,比如依赖关系、id等等,只是为了显示一个结构。