2015-11-06 4 views
2

Я работаю на структуру, которая поставляется заказчику в виде набора .aar файлов, которые затем включены в свой проект, как это:Обеспечение приоритета библиотек в Android Gradle построить

... 
+-- assets 
+-- libs 
     +-- framework-module1.aar 
     +-- framework-module2.aar 
     +-- framework-module3.aar 
     +-- customer.aar 
+-- main 
... 

Рамочную состоит из нескольких модулей, которые являются универсальными для всех клиентов, и один customer.aar, который предоставляет код и конфигурацию, специфичную для клиента. Идея заключается в том, что код/​​ресурсы в customer.aar переопределяют код/​​ресурсы по умолчанию для каждого клиента.

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

В документации к инструментам сборки упоминаются приоритеты библиотек, но они относятся только к старой системе построения на основе Eclipse, а не к основанной на основе Eradipse.

Вот мой build.gradle файл:

... 
repositories { 
    flatDir { 
     dirs file('libs') 
    } 
} 

dependencies { 
    compile(name:'framework-module1', ext:'aar') 
    compile(name:'framework-module2', ext:'aar') 
    compile(name:'framework-module3', ext:'aar') 

    compile(name:'customer', ext:'aar') 
} 
... 

Есть ли способ, что я могу сказать, что Gradle customer.aar всегда должен идти последним в сборке?

+0

Для моего опыта вы не можете указать порядок зависимостей –

ответ

2

Ресурсы обрабатываются инструментами Android build в порядке, противоположном указанному в сценарии Gradle. Код, отвечающий за заказ, составляет found here, если вы отвечаете на запросы.

Перестановка только одна линия вокруг решена проблема:

dependencies { 
    compile(name:'customer', ext:'aar') 

    compile(name:'framework-module1', ext:'aar') 
    compile(name:'framework-module2', ext:'aar') 
    compile(name:'framework-module3', ext:'aar') 
} 

Не забудьте clean вашей сборки после изменения порядка зависимостей! Gradle делает не обнаруживает его автоматически.

Обратите внимание, что этот «обратный» порядок применяется только тогда, когда ресурсы поступают из библиотек Android, то есть когда зависимость составляет aar. В случае, когда зависимость является другим проектом или модулем, нормальный (необменяемый) порядок действует.