kotlin 有人能为我解释一些关于口味和构建变体的事情吗

laik7k3q  于 2022-11-16  发布在  Kotlin
关注(0)|答案(1)|浏览(127)

好的,我不确定以前是否有人问过这个问题。但是我正在为构建变体、口味和它们的结构方式的核心概念而挣扎。
我在Google Play上有一个应用程序,所以我要用它作为参考。我的应用程序Nexus Notes是一个One Build。我在考虑把它和一些未来的应用程序沿着变成付费/免费版本。
当我进入项目视图时,在Gradle中添加风格和定义。然后,我添加资源以匹配主资源。我的问题是,当我设置了布局和所有内容时,我如何在代码中调用它们?
我看了机器人的文档,但我不明白整个画面。对我来说,他们跳过了某个步骤。我需要添加一些其他的代码,而不仅仅是在项目中。比如一个覆盖资源函数。
我有我的版本,免费和付费版本。为了测试的目的,我选择了PaidDebug变体,但我的设计没有显示。它只是在主要的。
我试图完成一个应用程序构建变体,而不是在Google Play上有两个应用程序,一个免费,一个付费。
我知道如何添加它,只是不知道如何使用它。我知道谷歌不喜欢重复的应用程序,所以我只是试图清理我的结构,使它成为一个统一的应用程序,而不是两个独立的应用程序。
如果有任何文档是一个完整的一步一步的过程,这样我就可以学习添加构建变体和口味的正确方法,我非常感激。

我将在更新中添加我的代码。目前我不在代码中。

w8f9ii69

w8f9ii691#

我的典型策略是创建一个构建配置布尔值字段,用于指示是否启用高级功能。这可以用于关闭Kotlin/Java代码中的功能,以便您可以将所有内容保留在一个模块中。对于每个变量,您可以指定替代资源目录,这些目录将覆盖默认res目录中具有相同ID的目录。您也可以指定额外的信息清单档案,将项目加入至基底信息清单。
我保留了res的基本目录,其中包含高级版本的所有资源,并将相关资源的其他免费版本变体放在res-free中。每个变体都可以有自己的额外清单,用于声明该版本独有的Activities/Services/Receivers。
我使用BuildConfig.IS_PREMIUM(如下所示设置)来打开和关闭功能或广告。

sourceSets {
    main {
        manifest.srcFile 'AndroidManifest.xml'
        java.srcDirs = ['src']
        aidl.srcDirs = ['src']
        renderscript.srcDirs = ['src']
        res.srcDirs = ['res']
        assets.srcDirs = ['assets']
        jniLibs.srcDirs = ['libs']
    }

    free {
        manifest.srcFile 'AndroidManifest-free.xml' // extra manifest file in same directory as original
        res.srcDirs = ['resFree'] // extra resource directory in same directory as res
    }

    premium {
        manifest.srcFile 'AndroidManifest-premium.xml'
    }

}

flavorDimensions 'content'

productFlavors {

    free {
        dimension "content"
        applicationId "com.me.mypackage.free"
        buildConfigField "boolean", "IS_PREMIUM", "false"
    }

    premium {
        dimension "content"
        applicationId "com.me.mypackage.premium"
        buildConfigField "boolean", "IS_PREMIUM", "true"
    }

}

相关问题