Как объединить стандартный код Java и Android в одну библиотеку? - PullRequest
0 голосов
/ 08 июня 2018

Как наилучшим образом организовать структуру такой библиотеки?

  • , какую систему сборки использовать (gradle или maven)?
  • это будет один проект, скомпилированный и упакованныйодин раз для каждой JVM?
  • это будет 3 проекта: mylib-core, mylib-java, mylib-android?
  • как собрать, упаковать и распространить библиотеку (или библиотеки)?
  • имеет ли смысл использовать OSGi или Spring?

Пример минимального кода

Библиотека с одним API, совместимая и равная для Java SE и Android.

API:

/*
 * Given a fonts name, size (height) and a text,
 * the library returns the doubled (<- arbitrary) width of the text in pixels.
 */
int fetchTextWidthDoubled(String fontName, int fontSize, String text);

Хотя удвоение размера является обычным кодом и не должно дублироваться, код для извлечения метрик шрифта в Android и Java SE отличается.

Предполагается, что у меня реализованы два класса с требуемым кодом, подобным следующему:

Java SE:

public class JavaSeTextWidthFetcher implements TextWidthFetcher {
    @Override
    public int fetchTextWidth(String fontName, int fontSize, String text) {
        // something with java.awt.Font
    }
}

Android:

public class AndroidTextWidthFetcher implements TextWidthFetcher {
    @Override
    public int fetchTextWidth(String fontName, int fontSize, String text) {
        // something with android.graphics.Paint.FontMetrics
    }
}

и реализация API примерно такая жеэто:

public class DoubleTextWidthFetcher

    private TextWidthFetcher impl;

    @Override
    public int fetchTextWidthDoubled(String fontName, int fontSize, String text) {
        return 2 * impl.fetchTextWidth(fontName, fontSize, text);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...