我的问题是,在我向项目中添加了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
这很奇怪,因为资源甚至不在该文件夹中。
答案 0 :(得分:2)
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