Android Gradle:如何让产品风格从src/main继承,除了一个
我想为我的android应用程序使用产品口味,因为这似乎是一个很大的优势。 但是有一件事我没有解决: 比如说,我有一个项目PlanetsAndroid 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
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
下应该只有一个副本。