我一直在看一个关于android studio的productFlavors功能的教程,我真的觉得它很乱,我想出了一些问题,
1) 好的,无论模块如何,我都了解构建类型,您有 2 种构建类型发布和调试,我们可以配置发布,默认情况下我们不需要将调试配置为其配置,如果我们必须这样做,我们可以从 initWith 和什么开始见鬼是jnidebug,除了调试之外还有别的吗?
2)他们在 gradle 脚本中添加 productFlavors,并在 2 种 flavor 中添加了一个带有 .flavorName 的包名称,然后他们创建了两个与 main 名称相同的包,为什么不与我们在 productFlavor 的每种 flavor 中声明的包名称相同?像 com.example.xx.flavor1 和 com.example.xx.flavor2?
为什么与 main 相同的包名称也是 applicationIDSuffix 的目的是什么?
3)然后他们在每个flavor中创建了两个类,并在main文件夹的mainActivity.java中访问它的方法,我们可以像我们可以从mainActivity.java中获取flavors.java中的方法一样反转它吗,如果我们有不同的包名怎么办? mainActivity 的方法在每个flavors.javas 中仍然可用吗?
最佳答案
您可以在此页面上找到很多关于您的问题的详细信息:Gradle Definitions and Configurations .但是,通过进一步澄清您的问题,我可以改进答案以适应您的问题。
对于问题 1:我不确定 jnidebug 来自哪里。可能是文件夹和源集的一部分。
对于问题 2:productFlavor 是创建不同的应用程序但具有相同的代码库。例如,可以创建两个版本的应用程序,假设是 。免费版本和 付费 版本,免费版本包含展示广告的实现,但 付费 版本没有。为此,免费版本包含不同于 的布局和逻辑代码付费 版本。然而,两者将共享相同的 main
基本代码。此外,一些不同风格的应用程序可能都需要安装在 Android 上,这样它们才能共存。要做到这一点,它们应该有不同的应用程序 ID,否则 Android 会用第二个安装的 flavor 应用程序覆盖第一个安装的应用程序。为此,开发人员将创建一个基本的应用程序 ID(大多数情况下它类似于 com.example.app
)。然后在 flavor 配置中,开发人员将设置 applicationIDSuffix
为了让 Android 安装这两个应用程序,类似于 flavor 。假设我们必须品尝,基地 和 扩展 ,并在 build.gradle
内扩展 有applicationIDSuffix '.extended'
放。编译构建这两种风格后,将有两个应用程序,基地 应用程序 ID 为 com.example.app
,以及 扩展 与 com.example.app.extended
.因此,Android 将安装这两个没有任何问题。
对于问题 3:当然!请注意,虽然会有不同的应用程序具有不同的应用程序 ID,但它们的代码将具有相同的包名称。代码包名称和应用程序 ID 是不同的,并且彼此不相关,尽管大多数情况下它们是相同的。在编译时发生的事情是 gradle 会将来自 flavor 的代码与 main
合并。并以相同的包名编译它们,例如com.example.app
.但是 AndroidManifest.xml
将包含您选择编译的 flavor 设置的应用程序 ID,例如 com.example.app.flavor
万一applicationIDSuffix '.flavor'
已设置。
关于java - android中的productFlavors和包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43831886/