我已将我的项目从IDEA迁移到Android Studio以使用Gradle。 我已经成功构建了应用程序(尚未查看测试),现在想要包含产品口味(我移动的原因)。
我现在可以在" Build Variants"中选择四种构建变体中的一种。菜单,并使用新设置构建在我的手机上呈现一个新的应用程序,所以似乎一切正常。
但是,我在哪里对源进行更改(使用原始目录结构)还是需要更改它?什么是最好的方法? (我没有结构/ src / xxx / res,只是src / org / bla / bla)
主要变化是字符串文件和图形等资源。 谢谢!
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.7.+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
}
dependencies {
compile 'com.google.android.gms:play-services:4.1.+'
compile 'org.apache.commons:commons-lang3:3.2.+'
compile 'org.apache.httpcomponents:httpmime:4.1.+'
compile 'com.android.support:appcompat-v7:+'
}
android {
compileSdkVersion 19
buildToolsVersion "19.0.1"
defaultConfig {
minSdkVersion 8
targetSdkVersion 19
versionCode 1
//versionName "0.5"
}
productFlavors {
iDomsPortalDev {
packageName 'org.idoms.iDomsAndroid.iDomsPortalDev'
}
iDomsPortal {
packageName 'org.idoms.iDomsAndroid.iDomsPortal'
}
}
buildTypes {
debug {
packageNameSuffix ".debug"
//versionNameSuffix "-debug"
}
release {
packageNameSuffix ".release"
//versionNameSuffix "-release"
}
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['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')
iDomsPortal.setRoot('product-flavors/iDomsPortal')
iDomsPortalDev.setRoot('product-flavors/iDomsPortalDev')
}
println "main: " + android.sourceSets.main.res.srcDirs
android.applicationVariants.all { variant ->
println variant.name + ": " + android.sourceSets[variant.name].res.srcDirs
}
android.productFlavors.all { flavor ->
println flavor.name + ": " + android.sourceSets[flavor.name].res.srcDirs
}
android.buildTypes.all { buildType ->
println buildType.name + ": " + android.sourceSets[buildType.name].res.srcDirs
}
[编辑:更新上面的数据并将代码打印在输出后的输出中,现在可以正常工作!]
答案 0 :(得分:1)
我假设你问的是哪里放了特定风味的资源;如果你问的是对主要资源和资源进行了哪些更改,那就是你在sourceSets.main
下编制的目录结构。
您可以将此位脚本添加到 build.gradle 文件的顶层(例如,在android
块之后),以打印出寻找资源的目录:
println "main: " + android.sourceSets.main.res.srcDirs
android.applicationVariants.all { variant ->
println variant.name + ": " + android.sourceSets[variant.name].res.srcDirs
}
android.productFlavors.all { flavor ->
println flavor.name + ": " + android.sourceSets[flavor.name].res.srcDirs
}
android.buildTypes.all { buildType ->
println buildType.name + ": " + android.sourceSets[buildType.name].res.srcDirs
}
这将输出特定于flavor的资源目录,以及构建变体(flavor + build type目录)。
当我在你的构建文件上运行它们时,我得到:
main: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/res]
app1: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/src/app1/res]
app2: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/src/app2/res]
debug: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/build-types/debug/res]
release: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/build-types/release/res]
app1Debug: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/src/app1Debug/res]
app1Release: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/src/app1Release/res]
app2Debug: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/src/app2Debug/res]
app2Release: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/src/app2Release/res]
main 的目录是预期的 - 这是sourceSets.main
中明确设置的目录。我们看到的 debug 和 release 类型根据sourceSets
块末尾的语句重新映射到 build-types 目录。对于 app1 和 app2 风格,它正在查找 src / app1 和 src / app2 ,这可能不是你想要什么。我建议您移动整个根目录,类似于您对构建类型的操作。我最后将那个块更改为:
// 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')
app1.setRoot('product-flavors/app1')
app2.setRoot('product-flavors/app2')
至于变体, app1Debug 等,您可能不必担心它们,除非您正在做一些特定的事情,以至于您真的需要在详细的基础上覆盖。无论如何,现在当我跑步并查看我的诊断输出时,我看到了:
main: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/res]
app1: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/product-flavors/app1/res]
app2: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/product-flavors/app2/res]
debug: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/build-types/debug/res]
release: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/build-types/release/res]
app1Debug: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/src/app1Debug/res]
app1Release: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/src/app1Release/res]
app2Debug: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/src/app2Debug/res]
app2Release: [/Users/sbarta/AndroidStudioProjects/AS_Eclipse/app/src/app2Release/res]