根据构建类型不同的库/导入

the*_*man 8 android android-gradle-plugin

在Android应用中,我需要为特定外设使用特定的SDK.

使用单个构建变体,一切正常:

provided fileTree(include: ['peripheral.jar'], dir: 'libs')
compile fileTree(exclude: ['peripheral.jar'], dir: 'libs')
Run Code Online (Sandbox Code Playgroud)

问题是SDK依赖于安装在实际外设中的共享库.如果我尝试在任何其他Android设备上安装该应用程序(为了调试其他功能),我会收到INSTALL_FAILED_MISSING_SHARED_LIBRARY错误消息.

我想我可以使用两种构建变体:

  • release,使用SDK
  • debug,那不使用SDK

我已经尝试仅在release构建类型中包含SDK :

releaseProvided fileTree(include: ['peripheral.jar'], dir: 'libs')
releaseCompile fileTree(exclude: ['peripheral.jar'], dir: 'libs')
Run Code Online (Sandbox Code Playgroud)

但是,由于缺少导入,我无法编译项目.

所以我复制了唯一使用这些导入的类:

main/java/package/PeripheralManager.java:

public class ScannerManager { 
   // fake 
}
Run Code Online (Sandbox Code Playgroud)

release/java/package/PeripheralManager.java:

import peripheral; <- IT FAILS WHEN COMPILING

public class ScannerManager { 
   // real code
}
Run Code Online (Sandbox Code Playgroud)

无论我选择的构建类型如何,如果导入未在其中一个变体中解决,我无法编译项目...

the*_*man 4

最后我用口味解决了这个问题。问题是试图在mainrelease文件夹中复制相同的类。我们不能那样做。相反,我必须将其复制到例如debugand 、releaseflavour1and flavour2, (一个包含导入,另一个不包含导入)并将其从 中删除main。然后,我可以选择要编译的内容,一切正常。

不管怎样,谢谢你的帮助,+MohanRaj!