Как ссылаться на «активы» Android в разных пакетах? - PullRequest
8 голосов
/ 31 марта 2011

У меня есть приложение для Android, которое публикуется в «бесплатной» и «профессиональной» версии. Я настроил свой проект с базовым проектом «библиотека», на который ссылаются обе версии, так что мой набор пакетов выглядит следующим образом:

  • com.example.myapp
  • com.example.myapp.free
  • com.example.myapp.pro

Один из классов Activity в моем базовом проекте 'library' загружает файл справки в WebView: WebView.loadUrl ("file: ///android_asset/help.html"). Этот класс расширен как в «бесплатной», так и в «профессиональной» версиях (по причинам, выходящим за рамки этого вопроса), но я бы хотел, чтобы обе версии ссылались на один и тот же HTML-файл (т.е. файл в родительском пакете). Однако в соответствии с моими текущими настройками HTML-файл необходимо дублировать в папке «assets» в пакетах «com.example.myapp.free» и «com.example.myapp.pro» для «file: //». / android_asset / "URI для работы.

Есть ли способ указать URI "file: /// android_asset /" так, чтобы он обращался к каталогу assets в родительском пакете?

Частичное решение, которое я нашел, заключается в чтении HTML-файла из каталога «raw» и последующем отправлении полученной строки в мой объект WebView, но это было бы грязно для чего-то большего, чем только текстовая HTML-страница (например, одна). с изображениями, как мой).

Приветствие.

Ответы [ 2 ]

6 голосов
/ 29 декабря 2011

Поскольку Эндрю Уайт не объяснил, как делать то, что он рекомендует, я покажу вам:

Context otherContext = context.createPackageContext("other.package.name", 0);
AssetManager am = otherContext.getAssets();

Это не так уж плохо. И я убедился, что двум пакетам не нужно совместно использовать идентификатор пользователя.

0 голосов
/ 31 марта 2011

Как разработчик, имеющий как профессиональные, так и бесплатные версии, я могу сказать по своему опыту: не пытайтесь делиться ресурсами между приложениями .Даже если вы заставите его работать, у вас будет больше хлопот, чем оно того стоит.

Если вам абсолютно необходимо это сделать, у каждого приложения должен быть один и тот же системный пользователь, и вы должны создать контекст в одном приложении, который имитирует другое.Это не сложно сделать, но и может быть кошмаром обслуживания.

...