Пользовательский скрипт сборки, чтобы избежать конфликтов имен библиотек?

При использовании библиотек Android, если более одного проекта (основного или библиотек) определяют один и тот же ресурс, копия проекта с более высоким приоритетом используется и заменяет предыдущую.

Это проблема при написании повторно используемой библиотеки, потому что она заставляет вас добавлять префикс к каждому имени ресурса, чтобы избежать конфликтов. Дополнительную информацию по этой теме см. в проекте Android Parcel.

Теперь то, что я хотел бы сделать, это сценарий, который перед компиляцией добавлял бы к имени каждого ресурса из всех библиотек префикс имени их пакета. Для этого я намерен использовать сгенерированный скрипт сборки ant и добавить к нему настраиваемый шаг.

Вы знаете, возможно ли это? Видите ли вы лучшее решение для решения этой проблемы?


person MasterScrat    schedule 07.08.2011    source источник


Ответы (1)


Вы знаете, возможно ли это?

Если у вас есть исходный код библиотеки, я полагаю, вы могли бы это сделать. Я подозреваю, что любое место, где вы динамически ссылаетесь на идентификаторы ресурсов (отражение, getIdentifier() и т. д.), должно быть скорректировано вручную. И вы, возможно, не сможете получить помощь от автора библиотеки, учитывая, что вы изменили его код.

Я также постараюсь убедить автора библиотеки добавить префиксы ресурсов в будущие выпуски своей библиотеки.

person CommonsWare    schedule 07.08.2011
comment
Я делаю расширяемое приложение, используя подключаемые модули (каждый из которых является библиотекой Android). Так что в моем случае я могу попросить авторов модулей не использовать отражения или что-то подобное. Затем я сделаю что-то похожее на ваш ParcelHelper, но это будет автоматически добавлять имена пакетов при поиске идентификаторов. Таким образом, разработчики модулей могли полностью игнорировать проблемы коллизий. - person MasterScrat; 07.08.2011
comment
У разработчиков вашего модуля нет другого выбора, кроме как самим обрабатывать префиксы, если только вы не собираетесь заставить их использовать ваш скрипт Ant. Ведь им нужно протестировать свой модуль. - person CommonsWare; 07.08.2011
comment
Ну да, но в любом случае им понадобится SDK и т. д., поэтому сделать скрипт Ant обязательным на самом деле не проблема. Я думаю, что так удобнее, чем использовать префиксы. - person MasterScrat; 07.08.2011
comment
На самом деле, разве это не было бы интересно как универсальное решение для разработчиков библиотек с закрытым исходным кодом? Пишите свой код, не думая о коллизиях, получайте доступ к ресурсам с помощью вспомогательных методов и экспортируйте банку с именами, которые становятся уникальными во время компиляции. Им нужен был только пользовательский сценарий Ant для выпуска. - person MasterScrat; 07.08.2011
comment
но в любом случае им понадобится SDK и т. д., поэтому сделать скрипт Ant обязательным не проблема — расскажите об этом пользователям Eclipse. :-) Разве это не было бы интересно как универсальное решение для разработчиков библиотек с закрытым исходным кодом? - если вы можете это осуществить, это, безусловно, кажется полезным. - person CommonsWare; 07.08.2011