Android风味和资源文件

时间:2015-02-23 11:27:33

标签: android gradle android-productflavors

我有安装android gradle的问题。长话短说,我创造了两种口味:

productFlavors{
        abcDemoFree{
        }

        abcDemo{
        }
}

Eeach flavor为此活动提供了自己的Activity(Settings.java)和布局(settings_layout.xml)。 从main开始,两个文件都被删除了,所以Settings.java和settings_layout.xml只存在于各种风格中。

abcDemoFree
    - java
        - Settings.java
    - res
        - settings_layout.xml

abcDemo
    - java
        - Settings.java
    - res
        - settings_layout.xml

Android Studio创建了4种构建变体:

abcDemoFreeDebug
abcDemoFreeRelease
abcDemoDebug
abcDemoRelease

一切都很好,我能够创建具有我期待的每种风格的行为的apk。 问题是,当我切换到一个buildVariant,例如abcDemoDebug,android studio报告来自另一种风格的资源文件的bug,在我的 示例来自abcDemoFreeDegub / res / settings_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
              xmlns:app="http://schemas.android.com/apk/res-auto"
              xmlns:tools="http://schemas.android.com/tools"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical"

</LinearLayout>

这些行

xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"

生成错误:URI未注册。

如何摆脱这些错误?或者这可能是正常行为?

2 个答案:

答案 0 :(得分:2)

如果您实际上没有切换构建变体,则会出现错误。如果您只是查看文件它将显示错误,但如果您实际切换构建配置并重建,您将没事。还要确认您没有针对以下类型执行特定的实现或编译:

myFlavorImplementation android.libraries.forexample

因为它将缺少必要的库来清除警告。

enter image description here

使用build variant slide out更改为其他调试版本,它应该自动重建,但如果没有,只需自己进行重建。还要确保您正在查看实际文件而不是生成的文件,如果您使用注释工具或数据绑定与布局包装器,并且您在布局和第一个子标记中有android标记它可能导致它们是红色以及生成要打包的最终布局文件。

答案 1 :(得分:1)

不幸的是,当您切换时,AndroidStudio会使用来自错误风格的资源。你必须做一个干净的工作,然后在切换变量后进行构建,以使这些错误消失。