file:/// android_res / drawable在使用flavor与其他包名称时不起作用

时间:2014-05-05 09:59:49

标签: android gradle android-webview android-productflavors

我的问题是,在我向项目中添加了flavor后,包名称与实际源不同的风格似乎在访问android_res/drawable中的文件时出现问题。

更具体地说,我有一个调用以下图像的html视图。

<img src="file:///android_res/drawable/image.png">

图像显示在生产风格中,其包名与java文件的目录相同,但它不适用于beta风格:

productFlavors {
    production {
        packageName "com.company.myapp"
    }

    beta {
        packageName "com.company.beta"
    }
}

其中包含java文件的实际目录是

java/com/company/myapp

这很奇怪,因为资源甚至不在该文件夹中。

2 个答案:

答案 0 :(得分:2)

gradle中不支持

packageName。 Gradle在applicationId和packageName之间有区别(请参阅http://tools.android.com/tech-docs/new-build-system/applicationid-vs-packagename),这意味着应该能够使资源包名称与应用程序的包标识符不同。

不幸的是,webview中的file:/// android_res URL方案似乎不支持。

我能够在我的情况下通过在另一个包中创建一个具有正确内部类的R类以及一个使用真实R文件中的值初始化的public static final int字段来解决它。这是一个黑客攻击,并且无法重命名资源,如果您需要访问大量资源,则不方便。

因此,在您的情况下,将其添加到您的Beta风格源文件目录中

package com.company.beta;

class R
{
    class drawable
    {
        public static final int image = com.company.myapp.R.drawable.image;
    }
}

答案 1 :(得分:1)

更新的答案

您是否正确设置了风味文件夹?

如果您有两种口味(flavorOne,flavorTwo),则需要相应地设置源文件夹。

您的build.gradle文件应如下所示:

productFlavors {
        flavorOne {
            applicationId "com.package.name"
            versionCode 1
            versionName "1.0"
        }
        flavorTwo {
            applicationId "com.package.name.two"
            versionCode 1
            versionName "1.0"
        }
}

所以,这就是这两种风格的文件夹结构:

src
---|main
--------|java
-------------|com.package.name
--------|res
-------------|drawable

---|flavorOne
--------|java
-------------|com.package.name
--------|res
-------------|drawable

---|flavorTwo
--------|java
-------------|com.package.name
--------|res
-------------|drawable

将每种风味的drawable放入其关联的文件夹中。 因此,您可以在该drawable文件夹中获得image.png的{​​{1}}文件,在flavorOne drawable文件夹中获得image.png的{​​{1}}。

这种方式本地化适用于每种口味。

你不应该创建'R'类。这些是自动生成的。

OLD ANSWER

不是解决您确切问题的方法,而是另一种方法。

您可以将图像文件移动到资源文件夹,然后使用此

flavorTwo