Подтвердить что ты не робот

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

Довольно странно, что это происходит, поскольку ресурсы даже не в этой папке.

4b9b3361

Ответ 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">