如何将标准Java和Android代码组合到一个库中?

时间:2018-06-08 12:44:39

标签: java android maven android-gradle osgi

如何最好地组织这样一个图书馆的结构?

  • 构建使用的系统(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
    }
}

机器人:

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);
    }
}

0 个答案:

没有答案