A java_library
не сможет скомпилировать код, который зависит от Android, потому что у него не будет никаких зависимостей Android, которые предоставляет android_library
.
Вы пытались запустить приложение iOS сзависимость от common
, которая использует классы Android?Я немного удивлен, что это работает.
В любом случае, я рекомендую переместить вещи, зависящие от платформы, из common
в правила для конкретной платформы.
Так, например,Допустим, у вас есть некоторый класс бизнес-логики Model
в common
, для которого требуется регистратор, создайте некоторый интерфейс, например Logger
в common
, и Model
возьмите экземпляр Logger
.Тогда у вас может быть правило android_library
, которое зависит от common
и обеспечивает реализацию Logger
для Android, которая использует все классы android.util.*
.Тогда ваше правило android_binary
зависит как от common
, так и от android_library
.В своем коде приложения вы можете затем создать экземпляр регистратора, специфичного для Android, и передать его в Model
.
. Для половины вещей в iOS вы также можете иметь правило target-c, предоставляющее iOS-специфическое ведение журнала (хотя я менее знаком с тем, как все это будет работать в target-c или iOS).
Вы могли бы также рассмотреть разбиение common
на отдельные правила, которые улучшат инкрементность (например, добавлениевход в свое собственное правило).Все зависит от структуры вашего кода.