java - android中的productFlavors和包

标签 java android gradle android-gradle-plugin android-productflavors

我一直在看一个关于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/

相关文章:

java - 如何将oracle转换为JOOQ?

android - 拖放 + Fling 检测器不起作用

android - 错误:无法解决:Android Studio 3.0.1中的appcompat-v7

gradle - 如何使用Gradle将外部库导入目标项目的lib文件夹

java - Android中的调用方法

java - Spring boot React js 上传文件

Java Event-Dispatching Thread 解释

java - 如何添加一次always方法?

java - 在移动设备上测试时应用程序崩溃 - Android

java - Gradle(Java 以非零退出值 2 完成)