Ada*_*VGP 49 android gradle android-studio source-sets
我有一个旧的eclipse项目我已经进入android studio并设置使用flavour.它似乎工作正常,直到我开始尝试在我的口味之间使用不同的java文件.
我的项目设置如下:
ProjectRoot
+- acitonbarsherlock
+- facebook
+- myLib1
+- myProject
+- src
+- commonFiles
+- flavor1
+- flavor2
+- res
+- flavor1
+- flavor2
Run Code Online (Sandbox Code Playgroud)
myProject gradle文件android闭包的内部看起来像这样:
android {
compileSdkVersion 17
buildToolsVersion "18.0.1"
signingConfigs {
...
}
productFlavors {
flavor2 {
}
flavor1 {
}
}
sourceSets{
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src/commonFiles/java']
resources.srcDirs = ['src/commonFiles/java']
aidl.srcDirs = ['src/commonFiles/java']
renderscript.srcDirs = ['src/commonFiles/java']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
flavor2 {
manifest.srcFile 'AndroidManifest-flavor2.xml'
res.srcDirs = ['res-flavor2', 'res']
java.srcDirs = ['src/flavor2/java','src/commonFiles/java']
resources.srcDirs = ['src/flavor2/java','src/commonFiles/java']
aidl.srcDirs = ['src/flavor2/java','src/commonFiles/java']
renderscript.srcDirs = ['src/flavor2/java','src/commonFiles/java']
}
flavor1 {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src/flavor1/java','src/commonFiles/java']
resources.srcDirs = ['src/flavor1/java','src/commonFiles/java']
aidl.srcDirs = ['src/flavor1/java','src/commonFiles/java']
renderscript.srcDirs = ['src/flavor1/java','src/commonFiles/java']
res.srcDirs = ['res-flavor1','res']
assets.srcDirs = ['assets']
}
// Move the tests to tests/java, tests/res, etc...
instrumentTest.setRoot('tests')
// Move the build types to build-types/<type>
// For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
// This moves them out of them default location under src/<type>/... which would
// conflict with src/ being used by the main source set.
// Adding new build types or product flavors should be accompanied
// by a similar customization.
debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
Run Code Online (Sandbox Code Playgroud)
}
我的设置像这样gradle抱怨无法找到我试图从flavor1或flavor2中的commonFiles继承的类.
从我在这里看到的各种其他主题,我看到其他人甚至没有定义源集,我觉得我在他们身上做的事情可能太多了.
有没有人以前尝试过这个并且知道如何正确配置它?
Saa*_*ooq 55
我认为你最好不要定义自定义sourceSets
但使用默认的gradle配置.我曾经做过自定义源集,直到我意识到这些约定很方便.
你会想要这样的东西:
+ src
+ main // this is your common code
+ java
+ res
+ flavor1
+ java
+ res
+ flavor2
+ java
+ res
Run Code Online (Sandbox Code Playgroud)
然后你可以继续从你的.删除源集关闭 build.gradle
注意:对于gradle
配置,合并或覆盖资源,而所有java
代码都放在同一个类路径上.例如,AndroidManifest.xml
每个flavor 的文件只需要与main
manifest文件有所不同.例如,如果存在这样的文件,那么拥有一个资产ic_launcher
会覆盖ic_launcher
from main.但是,HomeActivity.java
在两者中都有一个文件main
并且风格不可能,并且会出现重复的文件错误.
Rya*_*yan 39
如果您愿意,欢迎您使用自定义sourceSets
和flavours
(或buildTypes
).
例如,您可以按如下方式在Gradle文件中设置它们: -
productFlavors {
flavor2 {
}
flavor1 {
}
}
sourceSets{
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src/commonFiles/java']
resources.srcDirs = ['src/commonFiles/java']
aidl.srcDirs = ['src/commonFiles/java']
renderscript.srcDirs = ['src/commonFiles/java']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
flavor1 {
java.srcDirs = ['src-flavor1']
res.srcDirs = ['res-flavor1']
...
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法对我有用。享受
sourceSets {
main {
manifest.srcFile 'src/AndroidManifest.xml'
java.srcDirs = ['src/java']
resources.srcDirs = ['srs/others']
res.srcDirs = ['src/res']
assets.srcDirs = ['src/assets']
jniLibs.srcDirs = ['jniLibs']
}
development{
res.srcDirs += ['development/src/res']
}
standford{
res.srcDirs += ['standford/src/res']
}
commercial{
res.srcDirs += ['commercial/src/res']
}
}
productFlavors {
development{
flavorDimensions "default"
}
standford{
flavorDimensions "default"
}
commercial{
flavorDimensions "default"
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的Gradle的样子:
productFlavors {
// Still keeping the productFlavors closure in case we decide to add flavors later
normal {
applicationId 'com.akshat'
}
qa {
applicationId 'com.akshat.qa'
}
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
jni.srcDirs = [] // Set empty since we use our own ndkBuild task
jniLibs.srcDirs = ['libs']
}
normal {
java.srcDirs = ['src_normal']
}
qa{
java.srcDirs = ['src_qa']
}
Run Code Online (Sandbox Code Playgroud)
以下是我的目录结构:
MyApplication
- res
- libs
- jni
- src
-com/akshat/
- src_qa
- com/akshat/util/FlavorConst.java
- src_normal
- com/akshat/util/FlavorConst.java
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
49767 次 |
最近记录: |