请注意:在Xavier的答案后编辑的答案
我试图在Android Studio中为同一个应用程序项目使用不同的Build Flavors.但是,我似乎很难配置它以正常工作.
脚步:
打开build.gradle*并添加以下行:
productFlavors {
flavor1 {
packageName 'com.android.studio.test.flavor1'
}
flavor2 {
packageName 'com.android.studio.test.flavor2'
}
}
Run Code Online (Sandbox Code Playgroud)为flavor1创建了一个新的Source文件夹; 但是,我不确定我是否采取了正确的方式.我是这样做的:
com.foo.testsrc文件夹,对于flavor1,我实际上是以结构的方式在资源管理器中创建了各个文件夹src/flavor1/java/com/foo/test/MainActivity.java.难道我做错了什么?或者我错过了什么?如果您需要更多信息,请告诉我.
*我的项目似乎有两个 build.gradle文件.一个位于项目文件夹(\ GradleTest)的根目录下,这个是空的.第二个位于\ GradleTest子文件夹的根目录,也标记为'GradleTest'(GradleTest-GradleTest),这是打开时已经有代码的那个; 因此,这是我编辑的那个.
**我检查gradle这个设置,显然使用自动导入了已启用.尽管如此,对build.gradle文件进行更改不会自动更新构建变体.注意:我也尝试使用Build - Rebuild Project和/或Build - Make Project,no-go.我仍然需要关闭项目,并重新打开以使更改生效.
几个星期前,我发布了一个问题如何根据buildType覆盖资源.就在昨天,有一个用于android的gradle插件版本.根据这篇关于G +的帖子,我决定写下这个问题.
我详细描述的问题:
我想根据它创建一些资源值buildType,但这不能正常工作:只有在命令行上完成构建时才会创建文件"generated.xml":
gradlew build
Run Code Online (Sandbox Code Playgroud)
但是我通过在comannd线上构建完整的项目也会出错:
* What went wrong: Execution failed for task ':app:merge<buildVariant>Resources'.
Unsupported type 'String' in file C:\Users\...\build\res\generated\release\values\generated.xml
Run Code Online (Sandbox Code Playgroud)
每个其他构建试用版都不会创建此文件.我试过以下:
奇怪的gradle控制台输出:
:app:generateBuildVariantResValues UP-TO-DATE
Run Code Online (Sandbox Code Playgroud)
我的build.gradle:
buildTypes {
debug{
buildConfigField "String", "FOO", "\"FOO DEBUG\""
resValue "String", "RES FOO", "RES FOO DEBUG"
}
release {
buildConfigField "String", "FOO", "\"FOO RELEASE\""
resValue "String", "RES FOO", "RES FOO RELEASE"
}
}
Run Code Online (Sandbox Code Playgroud)
我的"generated.xml":
<!-- Automatically generated file. …Run Code Online (Sandbox Code Playgroud) 我的项目有两种:
flavor1 -> packagename: com.example.flavor1
flavor2 -> packagename: com.example.flavor2
Run Code Online (Sandbox Code Playgroud)
现在我想构建一个flavor1和flavor2的构造变量.buildvariant的唯一区别是另一个packagename.
我的项目使用MapFragments并且只有一个Manifest - 所以我将MAPS_RECEIVE的权限名称放在我各自风格的字符串资源文件中.
问题是:如何替换buildvariant的字符串资源?
我尝试了以下方法(在这篇文章中描述):
buildTypes{
flavor1Rev{
packageName 'com.example.rev.flavor1'
filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: ['package_permission' : 'com.example.rev.flavor1.permission.MAPS_RECEIVE'])
}
}
Run Code Online (Sandbox Code Playgroud)
但是使用这个我得到了这个错误:
找不到参数[{tokens = {package_permission = com.example.rev.flavor1.permission.MAPS_RECEIVE}}的方法filter(),BuildTypeDsl_D ecorated {name = ReplaceTokens,debuggable = false,jniDebugBuild = false,renderscript DebugBuild = false, BuildTypeD上的renderscriptOptimLevel = 3,packageNameSuffix = null,versionNameS uffix = null,runProguard = false,zipAlign = true,signingConfig = null}] sl_Decorated {name = buderusFinal,debuggable = false,jniDebugBuild = false,renderscr iptDebugBuild = false,renderscriptOptimLevel = 3 ,packageNameSuffix = null,versionNa meSuffix = null,runProguard = false,zipAlign …