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

时间:2016-11-23 10:30:14

标签: android android-gradle

在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
}

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

2 个答案:

答案 0 :(得分:4)

我终于用口味解决了它。问题是尝试在mainrelease文件夹中复制相同的类。我们无法做到这一点。相反,我必须复制它,例如,debugrelease,或flavour1flavour2,(一个带有导入,另一个没有它们)并删除来自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----
}
}