File:///android_res/drawable не работает при использовании аромата с другим именем пакета
Моя проблема в том, что после того, как я добавил ароматы в свой проект, у аромата с именем пакета, отличным от фактического источника, кажется, есть проблемы с доступом к файлам в android_res/drawable
.
В частности, у меня есть html-представление, которое вызывает следующее изображение.
<img src="file:///android_res/drawable/image.png">
Изображение появляется в производственном вкусе, у которого есть имя пакета, которое совпадает с каталогом java файлов, но оно не работает для бета-вкуса:
productFlavors {
production {
packageName "com.company.myapp"
}
beta {
packageName "com.company.beta"
}
}
где фактический каталог с java файлами -
java/com/company/myapp
Довольно странно, что это происходит, поскольку ресурсы даже не в этой папке.
Ответы
Ответ 1
имя_пакета не поддерживается в gradle. Gradle имеет различие между applicationId и packageName (см. http://tools.android.com/tech-docs/new-build-system/applicationid-vs-packagename), что означает, что иметь возможность иметь имя пакета ресурсов отличается от идентификатор пакета для вашего приложения.
К сожалению, это не поддерживается программой URL:///android_res URL в веб-просмотре.
Мне удалось обойти это в моем случае, создав класс R в другом пакете с правильным внутренним классом и с открытым статическим окончательным полем int, которое было инициализировано значением из реального файла R. Это взлом и не переименовывает ресурс и не удобен, если у вас есть много ресурсов, необходимых для доступа.
Итак, в вашем случае это будет похоже на добавление этого файла в каталог исходных файлов для бета-версии:
package com.company.beta;
class R
{
class drawable
{
public static final int image = com.company.myapp.R.drawable.image;
}
}
Ответ 2
ОБНОВЛЕННЫЙ ОТВЕТ
Правильно ли настроили папки с вашими ароматами?
Если у вас есть два аромата (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
Поместите выделение для каждого аромата в соответствующую папку.
Таким образом, у вас будет файл image.png
для flavorOne
в этой папке с возможностью рисования и image.png
для flavorTwo
в папке с flavorTwo
.
Таким образом, локализация будет работать для каждого аромата.
Вы НЕ должны создавать классы "R". Они автогенерируются.
OLD ANSWER
На самом деле это не решение вашей конкретной проблемы, а другой подход.
Вместо этого вы можете перенести файлы изображений в папку с ресурсами и использовать
<img src="file:///android_asset/image.png">