如何根据目标设备分离库?

How to separate libraries according to target device?

我正在为一些具有自定义硬件的设备开发应用程序,它们来自不同的制造商,但应用程序级别的目的和逻辑是相同的,每个设备都有其 SDK。是否可以根据目标设备过滤每个SDK?

我在想 C/C++ 中的预处理器之类的东西,它在 make 文件中设置了一个标志,您可以在代码中查询并过滤代码中的某些部分。

知道如何在 Android 中处理这样的事情吗?

更新

设备

该设备具有一些硬件功能,例如打印机、LED、EMV 卡 reader。像这样:

SDK

这些SDK在项目中作为模块导入,主项目引用它们。

接口

有一组抽象类定义了常见的行为,如读卡、打印支票等。在这些行为上,需要根据每个设备调用特定的函数。例如,来自不同供应商的每个设备都有一种打印发票的方法。

我想做什么。

想法是只用每个设备所需的SDK生成APK,并跳过那些与目标设备不同的实现。

带有预处理器的示例。


#if defined(DEVICE1)
void printInvoice(char * msg){
   sdk_device1.print(msg);
}
#endif

#if defined(DEVICE2)
void printInvoice(char * msg){
   sdk_device2.print(msg);
}
#endif

谢谢!

我会这样处理问题:

  1. 我会根据硬件配置定义产品风格
  2. 我会为每个给定的风格关联 proguard 配置,最小目标是去除不需要的 n-1 个模块,并留下最后一个特定于硬件构建的完成
  3. 我会为发布版本启用混淆器

...经过一番思考:

  1. 您还需要某种工厂来为您提供特定风格的 sdk 实例(可能类似于我们定义 testInstrumentationRunner 的方式)。

如果您没有在您的解决方案中使用混淆器(或任何替代混淆器的方法),您可能会在引入它时遇到问题,但最终您仍然需要它,因此值得花时间解决它们。