Android,Gradle产品风味; 包不存在

4

我很努力地寻找关于这个问题的帮助,但仍然找不到任何有用的信息。

我正在使用新的构建系统开始构建一个应用程序。在这个项目中,我使用了两个产品口味:免费和专业版。gradle.build 文件如下:

   buildscript {
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:0.5.+'
        }
    }
    apply plugin: 'android'

    repositories {
        mavenCentral()
    }

    android {
        compileSdkVersion 17
        buildToolsVersion "17.0.0"

        defaultConfig {
            minSdkVersion 7
            targetSdkVersion 17
        }

        productFlavors {
            free {
                packageName "com.example.free"
                buildConfig "public static final Boolean versionPro = true;"
            }

            pro {
                packageName "com.example.pro"
                buildConfig "public static final Boolean versionPro = false;"
            }
        }
    }

    dependencies {
        compile 'com.android.support:support-v4:13.0.+'
    }

我已经建立了如下的src文件结构,它能正常工作:
-main -java -memphic -dodger -game -java文件
-free -java -memphic -dodger -free -java文件
-pro -java -memphic -dodger -pro -java文件
我想知道如何从主活动引用来自flavor源文件的类。 我已经在主Java文件中使用了以下代码尝试引用free包类文件。
com.example.free.ClassFile.addObject();
在构建免费版本时,它可以找到该包,因此有效;但是在构建专业版时,它无法找到该包引用。
有没有一种方法可以动态地引用另一个包中的类文件? 因此,在编译pro和free版本时可以动态地找到该包。 我想不出一种方法来实现它。
还有人知道哪里有很好的实际示例以使用新的构建概念吗? 像这样的概念在Gradle构建外部并没有涉及。

1
重新定义你的 flavor 中的包名是可以的,但不需要改变你类的包名!在不同 flavor 之间保持相同的包名。 - tbruyelle
1个回答

0

正如tbruyelle所提到的,解决我的问题的方法是在构建文件中保持相同的软件包名称,以避免在构建过程中发生冲突。

然后通过Grade.build文件更改构建软件包名称。这将确保每种风味在设备上部署时都是唯一的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接