android

时间:2017-05-07 13:10:03

标签: java android gradle android-gradle android-productflavors

我一直在观看有关android studio的productFlavors功能的教程,我真的觉得它很乱,我想出了一些问题,

1)好的我理解buildtypes无论模块,你有2个构建类型发布和调试,我们可以配置发布,我们不需要默认配置调试作为其配置,如果我们必须这样做,我们可以开始initWith和jnidebug到底是什么,除了debug之外还有什么其他的东西吗?

2)他们在gradle脚本和2个flavor中添加了productFlavor,在每个flavor中添加了一个包含.flavorName的包名,之后他们创建了两个与main相同名称的包,为什么不是我们在每种风格中声明的相同的包名productFlavor?比如com.example.xx.flavor1和com.example.xx.flavor2? 为什么同样的包名称也是主要的,这里的applicationIDSuffix的目的是什么?

3)然后他们在每个flavor中创建了两个类并在main文件夹的mainActivity.java中访问它的方法,我们可以反过来,就像我们从mainActivity.java中的flavours.java中获取方法一样,如果我们有不同的包那么name,mainCoctivity的方法是否仍然可用于每个flavours.javas?

1 个答案:

答案 0 :(得分:0)

您可以在此页面找到许多有关您问题的详细信息:Gradle Definitions and Configurations。但是,通过进一步澄清您的问题,我可以改进您的问题的答案。

对于问题1:我不确定jnidebug来自哪里。可以是文件夹和源集的一部分。

对于问题2:productFlavor将创建不同的应用程序,但具有相同的代码库。例如,我们会创建两个版本的应用,例如免费版本和付费版本,免费版本包含展示广告的实现但付费版本没有。为此,免费版本包含的布局和逻辑代码与付费版本不同。但是两者都将共享相同的main基本代码。此外,一些具有不同风格的应用程序可能都需要在Android上安装,以便它们共存。要拥有它们应该具有不同的应用程序ID,否则Android将使用第二个覆盖第一个已安装的应用程序ID。为此,开发人员将创建一个基础应用程序ID(大多数情况下它与com.example.app类似)。然后在flavor配置中,开发人员会将applicationIDSuffix设置为类似于风格,以便Android安装这两个应用程序。假设我们必须使用 base 扩展,并且build.gradle 扩展中设置applicationIDSuffix '.extended' 。编译和构建两种风格时,会有两个应用程序, base ,应用程序ID为com.example.app扩展,{{1} }。因此Android将安装两者而没有任何问题。

对于问题3:当然!请注意,虽然会有不同的应用程序具有不同的应用程序ID,但它们的代码将具有相同的程序包名称。代码包名称和应用程序ID是不同的,彼此不相关,尽管大多数时候它们是相同的。在编译时发生的事情是gradle将来自flavor的代码与com.example.app.extended合并,并在相同的包名称下编译它们,例如main。但是com.example.app将包含您选择编译的flavor设置的应用程序ID,例如AndroidManifest.xml,如果com.example.app.flavor已设置。