Android口味和资源文件

11

我在Android Gradle构建中遇到了问题。简而言之,我创建了两个渠道:

productFlavors{
        abcDemoFree{
        }

        abcDemo{
        }
}
每种口味都有自己的Activity(Settings.java)和布局(settings_layout.xml)。从主代码中这两个文件已被删除,因此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。问题是当我切换到一个构建变体时(例如abcDemoDebug),Android Studio会报告来自另一个特性的资源文件中的错误,例如:从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个回答

2

很遗憾,当你切换版本时,AndroidStudio会使用错误版本的资源。你需要先进行clean操作,然后再构建新的variant,才能消除这些错误。


2
错误会出现在您实际上没有切换构建变量的情况下。如果您只是查看文件,它将显示错误,但如果您实际上切换了构建配置并重新构建,则不会出现问题。还请确认您没有为以下味道进行特定的Implementation或Compile:

myFlavorImplementation android.libraries.forexample

因为这样会缺少清除警告所需的必要库。

enter image description here

使用构建变体滑动菜单切换到其他调试构建,它应该会自动重建,但如果没有,请手动进行重新构建。还要确保您查看的是实际文件而不是生成的文件,因为有时如果您正在使用注释工具或数据绑定与布局包装器,而您在布局中有android标记和第一个子标记,这也可能导致这些在生成最终布局文件以打包时变为红色。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接