在Android应用中,我需要为特定外设使用特定的SDK。
使用单个构建变体,一切正常:
provided fileTree(include: ['peripheral.jar'], dir: 'libs')
compile fileTree(exclude: ['peripheral.jar'], dir: 'libs')
问题是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')
但是,由于缺少导入,我无法编译项目。
所以我复制了唯一使用这些导入的类:
在main/java/package/PeripheralManager.java
:
public class ScannerManager {
// fake
}
在release/java/package/PeripheralManager.java
:
import peripheral; <- IT FAILS WHEN COMPILING
public class ScannerManager {
// real code
}
无论我选择的构建类型如何,如果导入未在其中一个变体中解决,我就无法编译项目...
答案 0 :(得分:4)
我终于用口味解决了它。问题是尝试在main
和release
文件夹中复制相同的类。我们无法做到这一点。相反,我必须复制它,例如,debug
和release
,或flavour1
和flavour2
,(一个带有导入,另一个没有它们)并删除来自main
。然后,我可以选择编译什么,一切正常。
谢谢你的帮助,+ MohanRaj!
答案 1 :(得分:2)
请在您的模块build.gradle文件上试试这个,在我的代码中,请告诉我您的反馈。谢谢。
<强>的build.gradle 强>
android {
defaultConfig {
----some stuff---
multiDexEnabled true
}
packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/dependencies.txt'
exclude 'META-INF/maven/ch.acra/acra/pom.xml'
exclude 'META-INF/maven/ch.acra/acra/pom.properties'
}
buildTypes {
release {
--some stuff----
}
debug {
}
}
dexOptions {
javaMaxHeapSize "2g"
}
} }
}
dependencies {
--some stuff----
}
}