进口的相对路径

时间:2016-02-17 22:41:53

标签: java android white-labelling

我想知道java中是否有办法使用相对包路径进行导入。像这样:

import *.fragments.MyFragment;

我会在我有一个whitelabel应用程序的情况下使用它,我希望主应用程序有一个定义" MyFragment,"但是产品风味需要以不同的方式定义它。

2 个答案:

答案 0 :(得分:3)

没有

类是完全合格的东西。即使你可以导入例如。从所有包中命名为Object的所有类,运行时必须知道要在任何给定语句中使用哪一个。如果没有完全限定的名称(这正是import语句的用途),运行时绝对没有办法知道你想要哪个类。而且,如果两个类共享相同的规范名称,那么它们就是同一个类。

要完成,在vanilla java中,您实际上可以将两个具有相同名称的类加载到同一个运行时中。但是,您必须使用指向不同jars的不同类加载器。您还可以巧妙地创建类路径,以便在同一个类加载器中隐藏其他类(您将获得类路径中首先出现的类)。但是android构建系统不会让你dex多个具有相同规范名称的类。您将获得DexException,因为过去所有内容都被压缩到相同的classes.dex文件中。我不知道这种限制是否在multidex世界中消失了。

要做你想做的事,你可以简单地使用特定于风味的源集。所以你有src/flavor1/java包含一个类的定义,然后src/flavor2/java包含同一个类的另一个定义。如果这样做,则无法在主源集中定义类,并且必须在每个flavor的源集中独立定义。

请注意,口味通常定义产品类型和flavor != variant。所以你想要normalwhitelabel的味道。在您使用正常片段构建的正常风味中。在白色标签的味道,你建立了不同的fragement。这只是两个不同的类别。

除此之外,您还可以选择普通的依赖注入和接口,无论如何,您可以选择从开发和gradle方便的源集概念中解开构建原则。

答案 1 :(得分:0)

作为@ dcow答案的延伸 - 您可以在尺寸上组合口味。因此,如果您想要4种口味,例如只有两种视图变体 - 添加两种口味,将它们设置为一个维度,将初始口味设置为另一个。在此之后构建您需要的任何组合。

android {
    ...
    flavorDimensions "appversion", "appserver"

    productFlavors {
        free {
            applicationId = "com.myapp.free"
            dimension  "appversion"
        }
        paid {
            applicationId = "com.myapp.paid"
            dimension  "appversion"
        }
        server1{
            dimension  "appserver"
        }
        server2{
            dimension  "appserver"
        }
    }
}