Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Gradle:如何让产品风格从src/main继承,除了一个_Android_Inheritance_Gradle_Android Productflavors - Fatal编程技术网

Android Gradle:如何让产品风格从src/main继承,除了一个

Android Gradle:如何让产品风格从src/main继承,除了一个,android,inheritance,gradle,android-productflavors,Android,Inheritance,Gradle,Android Productflavors,我想为我的android应用程序使用产品口味,因为这似乎是一个很大的优势。 但是有一件事我没有解决: 比如说,我有一个项目Planetscom.example.Planets,我想为每个星球构建一个应用程序: productFlavors { mercury { applicationId "com.example.planets.mercury" } venus { applicationId "com.example.planets.v

我想为我的android应用程序使用产品口味,因为这似乎是一个很大的优势。 但是有一件事我没有解决:

比如说,我有一个项目Planets
com.example.Planets
,我想为每个星球构建一个应用程序:

productFlavors {
    mercury {
        applicationId "com.example.planets.mercury"
    }
    venus {
        applicationId "com.example.planets.venus"
    }
    ...
}
许多代码是共享的,因此放在
src/main
文件夹中

我还想在每个应用程序中使用相同的
MainActivity
,但地球应用程序除外,因为它在这个应用程序中不同。我如何在不复制其他文件夹中的非地球版本的情况下实现这一点

我试图“覆盖”上面提到的
MainActivity
文件夹,但没有成功


提前谢谢

我想您可以将非地球版本放在
src/main
目录中,并在
earth
的源目录中添加与地球相关的
MainActivity
。这样,除了
earth

之外,所有口味都将使用
MainActivity
的默认版本。我建议使用这样的文件结构

    .
└── src
    ├── earth
    │   └── java
    │       └── com
    │           └── example
    │               └── app
    │                   ├── MainActivity.java // extends Activity + your code
    │                   └── SomeClass.java
    ├── main
    │   └── java
    │       └── com
    │           └── example
    │               └── app
    │                   ├── MainBaseActivity.java // extends Activity + your code
    │                   └── SomeClass.java
    ├── mercury
    │   └── java
    │       └── com
    │           └── example
    │               └── app
    │                   ├── MainActivity.java // extends MainBaseActivity + empty body
    │                   └── SomeClass.java
    └── venus
        └── java
            └── com
                └── example
                    └── app
    │                   ├── MainActivity.java // extends MainBaseActivity + empty body
    │                   └── SomeClass.java
其中
SomeClass.java
表示所有常见的类和代码
水星和金星将使用“main”中的
main活动,而地球有自己的活动

这就是我想要的,但是当我这样尝试时,它会导致
错误:(13,8)错误:运行earth应用程序时重复类:com.example.planets.MainActivity
。感谢详细的文件夹树,但当我运行earth应用程序时,我总是会出现
错误:(13,8)错误:重复类:com.example.planets.MainActivity
。对你有用吗?你是如何解决“重复类”问题的?我还没有遇到过这个问题。是的,我用这种结构制作了真正的应用程序。我仍然可以建议的一种解决方法是,在main flavor中创建一个MainBaseActivity,并扩展它,即,
MainActivity扩展MainBaseActivity{/*empty body*/}
,以您希望保持不变的所有风格。在地球上,只需使用
MainActivity扩展活动{/*您的代码在这里*/}
我已经更新了我的文件树,以显示我的确切意思如果
SomeClass
代表通用代码,那么在所有产品风格中复制它是错误的。
src/main/java
下应该只有一个副本。