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

Java 如何根据目标设备分离库?,java,android,gradle,sdk,Java,Android,Gradle,Sdk,我正在为一些具有定制硬件的设备开发一个应用程序,它们来自不同的制造商,但应用程序级别的目的和逻辑是相同的,每个设备都有其SDK。是否可以根据目标设备过滤每个SDK 我在想C/C++中的预处理器,它在make文件中设置一个标志,您可以在代码中查询并过滤代码中的某些部分 你知道如何在Android中处理类似的事情吗 使现代化 装置 该设备具有一些硬件功能,如打印机、LED、EMV读卡器。大概是这样的: SDK 这些SDK作为模块导入到项目中,主项目将引用它们 接口 有一组抽象类定义了常见的行为,如

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

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

你知道如何在Android中处理类似的事情吗

使现代化 装置 该设备具有一些硬件功能,如打印机、LED、EMV读卡器。大概是这样的:

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

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

我想做的事。 其思想是仅使用每个设备所需的SDK生成APK,并跳过与目标设备不同的实现

带有预处理器的示例。
谢谢

我会这样处理这个问题:

  • 我会根据硬件配置定义产品风格
  • 我将为每个给定的风格关联proguard配置,最小的目标是剥离不需要的任何n-1模块,并为硬件构建留下最后一个特定的模块
  • 我会为发布版本启用proguard
  • …经过一番思考:

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

  • 如果您在解决方案中没有使用proguard(或proguard的任何替代方案),您可能会面临引入它的问题,但最终您仍然需要它,因此花时间解决这些问题是值得的。

    信息不足。SDK是否共享应用程序知道的某些界面?SDK在编译或运行时可用吗?如何消费SDK?使用产品口味,每个硬件一种口味。将每个硬件代码放在相应的flavor源集中,实现一些您在
    main
    中的代码可以引用的常见API。@ror感谢您的回复,我添加了您要求的详细信息:)@CommonsWave谢谢您的建议,我会看一看的!太好了,谢谢你的回复!。我将开始在一个独立的项目中进行一些测试,看看这是如何工作的。
    
    #if defined(DEVICE1)
    void printInvoice(char * msg){
       sdk_device1.print(msg);
    }
    #endif
    
    #if defined(DEVICE2)
    void printInvoice(char * msg){
       sdk_device2.print(msg);
    }
    #endif