Как распространить код многоразового использования Android в пакете? - PullRequest
6 голосов
/ 13 мая 2010

Я разработал несколько повторно используемых компонентов Android, которые в основном класс. Этот класс имеет некоторые ресурсные зависимости, например некоторые png drawables, некоторые xml-макеты и т. д. Так что этот класс ссылается на автоматически сгенерированный R-файл. Я хотел бы распространить этот код в одном пакете, таком как JAR-файл, другим разработчикам для использования в своих приложениях.

Я прочитал, что единственно возможное решение - это распространять код вместе со всеми моими ресурсами, которые другие должны скопировать в свою папку res ( source ).

Итак, я создал файл jar, содержащий файл класса (скажем, MyClass, который находится в пакете com.xyz.android.app) и ресурсы, и попытался использовать его в моем новом приложении.

Поэтому я добавил файл jar в путь сборки моего нового приложения, используя опцию add external jars в eclipse, и скопировал все ресурсы в папку res моего нового приложения. (Класс активности говорит, что MainActivity моего нового приложения находится в пакете com.abc.myapplication, только на тот случай, если это может быть полезно)

Но когда я запускаю это новое приложение, в классе MyClass есть java.lang.ClassCastException. Я попытался отладить приложение, а затем обнаружил, что в классе MyClass существует проблема «R не может быть решена».

Затем я изменил пакет MainActivity на com.xyz.android.app (что не так, другие разработчики будут рады сделать), но опять та же проблема.

Но когда я просто копирую исходный java-файл, так что MainActivity.java и MyClass.java находятся в пакете com.xyz.android.app, приложение работает нормально.

Так что, если мне нужно распространять так, чтобы другие пользователи не беспокоились об этих именах пакетов, как я могу это сделать? Пожалуйста, помогите !!

Редактировать

В android.jar также есть некоторые ресурсы. Как они упоминаются в проекте? Как они используются в классах Android? Есть также файл android.R?

Разве нельзя сделать то же самое, то есть сделать файл jar, например, android.jar, для моего повторно используемого кода?

Ответы [ 3 ]

3 голосов
/ 13 мая 2010

Как отметил Ник Стронг, в этом проекте нет ничего особенного для управления этим, и текущие признаки указывают на то, что предстоящие изменения в инструментах SDK могут только немного помочь.

Я организую некоторые другие инструменты , чтобы помочь справиться с этой проблемой. Я надеюсь опубликовать документацию для разработчиков через несколько дней.

3 голосов
/ 13 мая 2010

Это не так просто сделать в данный момент. Проблема в том, что проект, использующий ваш кувшин, не знает, где искать чертежи и т. Д. Хорошей новостью является то, что скоро это станет возможным (надеюсь, с SDK 2.2, который, по слухам, будет выпущен на IO на следующей неделе). Смотрите это сообщение в блоге http://mobilebytes.wordpress.com/2010/04/27/android-tools-version6-coming/

1 голос
/ 14 мая 2010

Я играл с классом Марка Мерфи ParcelHelper на http://github.com/commonsguy/cwac-parcel. В двух словах, это набор методов, которые позволяют вам получить доступ к компонентам 'R' по имени без необходимости импортировать 'R' в ваш код.

Если я правильно понимаю ваш вопрос, это именно то, что вы хотите. Возможно, вам все еще придется скопировать некоторые ресурсы, такие как styleables, в ваш проект.

...