Как решить проблему переназначения настраиваемых атрибутов и имен пакетов Android-библиотек во время сборки?

Со временем наш Android-проект значительно расширился, и в наши дни мы создаем несколько фирменных APK из одного и того же дерева исходных текстов. Это стало сложной задачей из-за требований Android к именованию пакетов.

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

AppProject
  Include: BrandALibrary or BrandBLibrary
  Include: SharedLibrary

SharedLibrary
-> src/..
-> res/..
BrandALibrary
-> res/..
BrandBLibrary
-> res/..

«BrandALibrary или BrandBLibrary» переключаются во время сборки, включая файлы .properties во время сборки с помощью переключателей командной строки. Ничего особенного. Сценарий сборки также должен изменить имя пакета .APK во время сборки, чтобы два файла .APK могли сосуществовать на данном устройстве одновременно (в основном для целей контроля качества, поскольку мы не ожидаем, что у клиентов будут оба файла на заодно ... хотя могли).

Все работало очень хорошо, пока наша сборка не сломалась сегодня после добавления класса в наш проект общей библиотеки кода.Пытаясь понять причину, по которой это происходит, я наткнулся на следующую веб-страницу, где этот парень столкнулся с той же проблемой и исправил свою версию aapt, чтобы это работало:

http://devmaze.wordpress.com / 2011/05/22 / the-case-of-android-libraries-and-custom-xml-attributes-part-2 /

Во время нашей сборки в журналах появляются следующие ошибки:

    -pre-build:

-code-gen:
     [echo] ----------
     [echo] Handling aidl files...
     [aidl] No aidl files to compile.
     [echo] ----------
     [echo] Handling RenderScript files...
[renderscript] No renderscript files to compile.
     [echo] ----------
     [echo] Handling Resources...
     [aapt] Found Deleted Target File
     [aapt] Generating resource IDs...
     [aapt] E:\CSI\Neal\trunk\Clients\Android\MyAppSharedLib\res\layout\fancy_layout.xml:22: error: No resource identifier found for attribute 'state_add' in package 'com.myapp'
     [aapt] E:\CSI\Neal\trunk\Clients\Android\MyAppSharedLib\res\layout\fancy_layout.xml:22: error: No resource identifier found for attribute 'state_list' in package 'com.myapp'
     [aapt] E:\CSI\Neal\trunk\Clients\Android\MyAppSharedLib\res\drawable\fancy_button_selector.xml:4: error: No resource identifier found for attribute 'state_add' in package 'com.myapp'
     [aapt] E:\CSI\Neal\trunk\Clients\Android\MyAppSharedLib\res\drawable\fancy_button_selector.xml:4: error: No resource
identifier found for attribute 'state_list' in package 'com.myapp'
     [aapt] E:\CSI\Neal\trunk\Clients\Android\MyAppSharedLib\res\drawable\fancy_button_selector.xml:5: error: No resource
identifier found for attribute 'state_add' in package 'com.myapp'
     [aapt] E:\CSI\Neal\trunk\Clients\Android\MyAppSharedLib\res\drawable\fancy_button_selector_button_selector.xml:5: error: No resource identifier found for attribute 'state_list' in package 'com.myapp'

BUILD FAILED
C:\android-sdk\tools\ant\build.xml:539: The following error occurred while executing this line:
C:\android-sdk\tools\ant\build.xml:568: null returned: 1

Мои пользовательские В атрибутах нет ничего впечатляющего, у меня определены state_add и state_list, которые я могу использовать для установки состояний по умолчанию для элемента управления, который показывает кнопку со значком, указывающим, какие состояния должны отображаться. В некотором смысле это похоже на кнопку переключения, и я мог бы в конечном итоге заменить этот элемент управления на кнопку переключения.

Я следовал этому руководству , когда создавал эту кнопку.

И, наконец, у меня вопрос (этот парень уже давно задет, не так ли?), Есть ли способ гарантировать, что aapt «переназначит» имена пакетов, используемые в настраиваемых атрибутах. Если я даже хочу написать больше настраиваемых элементов управления в нашей библиотеке, нам понадобится appt, чтобы иметь возможность делать следующее:

  • Если настраиваемое пространство имен определено в проекте библиотеки, переназначьте это пространство имен на пространство имен приложения Android, которое строится.

Мне не хватает чего-то фундаментального в способе отображения настраиваемых атрибутов во время сборки Ant? Есть ли что-нибудь простое, что я могу сделать, чтобы исправить проблемы со сборкой?

7
задан Community 23 May 2017 в 12:00
поделиться