当前位置: 首页 > 知识库问答 >
问题:

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

何麻雀
2023-03-14

我的问题是,在我的项目中添加了味道后,包名称与实际源不同的味道似乎在访问android_res/draable中的文件时遇到了问题。

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

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

该图像显示在production flavor中,其包名与java文件的目录相同,但不适用于beta flavor:

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

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

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

java/com/company/myapp

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

共有2个答案

龚玄天
2023-03-14

更新的答案

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

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

您的构建。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

将每种口味的绘图文件放在它的关联文件夹中。因此,您将拥有image.png文件,其中味道一在该绘图文件夹中,image.png用于味道二味道二绘图文件夹中。

这样,本地化将适用于每种口味。

您不应该创建“R”类。这些是自动生成的。

旧答案

不是真正解决你的问题,而是另一种方法。

您可以将图像文件移动到资产文件夹并使用它

<img src="file:///android_asset/image.png">
艾谦
2023-03-14

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

遗憾的是file:///android_resWeb视图中的URL方案。

在我的例子中,我可以通过在另一个包中创建一个具有正确内部类和一个公共静态final int字段的R类来解决这个问题,该字段是用真实R文件中的值初始化的。这是一种黑客行为,在重命名资源后无法生存,如果您需要访问大量资源,则不方便。

因此,在您的情况下,这看起来像是将其添加到beta flavor源文件目录:

package com.company.beta;

class R
{
    class drawable
    {
        public static final int image = com.company.myapp.R.drawable.image;
    }
}
 类似资料:
  • 问题内容: 我从学习Spring开始,我创建了一个基本项目,该项目创建数据库,插入值,然后在Web浏览器中打印它。我的问题是,当我将RestController和主类放在同一个包中时- 可以,但是我想将其分发到其他包中,而当我创建新包时,移动RestController则不起作用。让我们见面解释: 我的项目看起来像: 我的控制器看起来: 当一切都在包,我写的网络浏览器的http://本地主机:80

  • 我想将ListView与其他小部件一起使用,但我不能。当我将容器用于ListView时,我不能查看任何其他小部件。我该怎么做?

  • 我有一个烧瓶服务器运行在http://127.0.0.1:5000和一个vuejs前端运行http://localhost:8080我已经做了api,并用postman测试了它,一切都如预期的那样工作:( > 将请求发布到/登录- (将请求发送至/登录)- 烧瓶API代码: 登录。vue: 指数vue 当我使用邮递员登录时,我得到的响应为;当我使用邮递员获取url/索引时,我得到响应。数据但当我使

  • 问题内容: 我正在编写一个执行scala命令的小型python应用程序。用户可以通过STDIN插入命令,然后python应用将其转发到scala解释器。执行命令后,应用程序将显示操作结果。 这个想法是用来创建一个管道,通过该管道我可以发送命令并读取结果。这个想法很简单,但是没有用。我不明白的是,为什么在打开管道后它们不再起作用。这使得无法在python中读取命令。 这是我正在使用的代码: 问题答案

  • 问题内容: 我正在尝试使用动态变量名称(我不确定它们的实际名称),但是非常像这样: 返回值告诉我它不起作用。我不知道我在寻找什么语法或技术,这使得很难研究。在前面定义。 问题答案: 将它们包装在: 工作实例 使用是创建动态变量的一种方法,简单的示例: