java - 如何将标准 Java 和 Android 代码组合到一个库中?
问题描述
如何最好地组织这样一个库的结构?
- 使用哪个构建系统(gradle 或 maven)?
- 它会是一个单独的项目,为每个 JVM 编译和打包一次吗?
- 会是 3 个项目:mylib-core、mylib-java、mylib-android?
- 如何构建、打包和分发库(或库)?
- 使用 OSGi 或 Spring 有意义吗?
最小代码示例
一个具有单一 API 的库,与 Java SE 和 Android 兼容且相同。
接口:
/*
* 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);
}
}
解决方案
推荐阅读
- r - tmerge 将数据拆分为 5 年间隔
- configuration - 如何在 .releaserc.json 中使用环境变量?
- conda - 无法使用 r-base 3.6.3 创建 conda 环境
- c# - 即使使用分页,Mongo 也会给我“排序超出内存限制”异常
- apache - .htaccess 禁用跨站点的目录访问,一个目录除外
- c# - 即使更改了 INotifyProperty,WPF XAML 控件绑定也不会更新
- webpack - “mini-css-extract-plugin”每次在每次构建的 main.js 文件中注入一个新数字,这会不必要地更改 main.js 的 contenthash 数
- java - GraphError:调用的 API 在不使用资源特定同意时需要在仅限应用程序的上下文中访问受保护的 API
- javascript - 如何在 javascript 的“文本冒险”中将图像插入到此文本元素中?
- r - tsoutliers 和使用替换