cur*_*hov 5 android build gradle
我创建了一个简单的测试项目:目标是通过按下屏幕上的按钮来显示消息"hello".第一个flavor构建应该将消息写入系统日志.第二个风味构建应该显示带有消息的祝酒词.请问如何使用gradle实现这一目标?
我的build.gradle:
apply plugin: 'android'
android {
compileSdkVersion 19
buildToolsVersion "19.0.1"
defaultConfig {
minSdkVersion 14
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
productFlavors {
toast {
}
log {
}
}
sourceSets {
main {
java.srcDirs = ['src/main/java', 'src/log/java']
}
toast {
java.srcDirs = ['src/main/java', 'src/toast/java']
}
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
}
Run Code Online (Sandbox Code Playgroud)
文件结构:

Flavor log包含单类Messenger with method showMessage(Context context, CharSequence text)并使用打印文本Log.i(tag, msg)
Flavor toast包含带有方法的单类Messenger,showMessage(Context context, CharSequence text)并显示带有一些文本的toast.
主要来源不包含此类.
为什么会duplicate class:com.test.flavortest.Messenger出现错误?每种口味都有一套不同的非交叉源路径?
在您的源集定义中,您似乎将log源添加到main:
sourceSets {
main {
java.srcDirs = ['src/main/java', 'src/log/java']
}
toast {
java.srcDirs = ['src/main/java', 'src/toast/java']
}
}
Run Code Online (Sandbox Code Playgroud)
main是所有风格中包含的默认源集。Messenger这会导致在构建风味时加载重复的类 ( ) toast。
尝试仅指定log和源集:toast
sourceSets {
log {
java.srcDirs = ['src/main/java', 'src/log/java']
}
toast {
java.srcDirs = ['src/main/java', 'src/toast/java']
}
}
Run Code Online (Sandbox Code Playgroud)
您的文件结构似乎与默认值匹配,因此更好的解决方案是完全删除源集块。src/main/java默认包含,然后src/flavor/java自动添加。
| 归档时间: |
|
| 查看次数: |
3339 次 |
| 最近记录: |