相关疑难解决方法(0)

使用Build Flavors - 正确构建源文件夹和build.gradle

请注意:在Xavier的答案后编辑的答案

我试图在Android Studio中为同一个应用程序项目使用不同的Build Flavors.但是,我似乎很难配置它以正常工作.

脚步:

  1. 创建一个名为"Test"的新Android Studio项目.
  2. 打开build.gradle*并添加以下行:

    productFlavors {
    flavor1 {
        packageName 'com.android.studio.test.flavor1'
        }
    flavor2 {
        packageName 'com.android.studio.test.flavor2'
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 重新启动Android Studio后,我现在看到Build Variants部分下的4个构建变体.这意味着我们迄今为止在成功提供产品口味方面取得了成功.**
  4. flavor1创建了一个新的Source文件夹; 但是,我不确定我是否采取了正确的方式.我是这样做的:

    • 请记住,此项目的包名称是: com.foo.test
    • 右键单击src文件夹,对于flavor1,我实际上是以结构的方式在资源管理器中创建了各个文件夹src/flavor1/java/com/foo/test/MainActivity.java.
    • 上面工作得很好,因为'java'文件夹是蓝色的,这意味着IDE知道它是一个活动的源目录.此外,包是自动创建的.尽管如此,我发现了重复课程的警告.在此处查看截图.
    • 对于flavor2,我尝试手动创建包,但是flavor2的'src'文件夹似乎不是蓝色,因此右键单击时选项不同,并且我无法使用'New Package'.见图.
    • 请注意,对于flavor1,我还创建了一个'res'目录,它确实变成了蓝色,但尽管如此,如果我想使用不同的东西,它不能提供创建Android资源文件或Andorid资源目录的能力.适合不同口味的食物.

难道我做错了什么?或者我错过了什么?如果您需要更多信息,请告诉我.

*我的项目似乎有两个 build.gradle文件.一个位于项目文件夹(\ GradleTest)的根目录下,这个是空的.第二个位于\ GradleTest子文件夹的根目录,也标记为'GradleTest'(GradleTest-GradleTest),这是打开时已经有代码的那个; 因此,这是我编辑的那个.

**我检查gradle这个设置,显然使用自动导入已启用.尽管如此,对build.gradle文件进行更改不会自动更新构建变体.注意:我也尝试使用Build - Rebuild Project和/或Build - Make Project,no-go.我仍然需要关闭项目,并重新打开以使更改生效.

android intellij-idea gradle android-studio

163
推荐指数
3
解决办法
8万
查看次数

resValue gradle error:"generated.xml"中不支持的类型"String"

几个星期前,我发布了一个问题如何根据buildType覆盖资源.就在昨天,有一个用于androidgradle插件版本.根据这篇关于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)

每个其他构建试用版都不会创建此文件.我试过以下:

  • 在IDE上:
    • 重建项目
    • 执行外部任务"assembleBuildVariant"
  • 超过命令行:
    • gradlew assembleBuildVariant

奇怪的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)

android android-studio build.gradle android-gradle-plugin

36
推荐指数
1
解决办法
3万
查看次数

如何在android studio中用gradle替换buildvariant的字符串?

我的项目有两种:

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 …

android gradle android-studio build.gradle

25
推荐指数
2
解决办法
3万
查看次数