2016-11-23 45 views
8

在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

我試過,包括SDK只在release構建類型:

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

你可以嘗試multidex以避免重複。 –

+0

我從來沒有使用過。你認爲這不能使用構建類型來解決嗎? – thelawnmowerman

+0

希望它會有所幫助,我可以在這裏分享答案嗎? –

回答

4

我最後用香精解決它。問題是試圖複製mainrelease文件夾中的同一個類。我們不能那樣做。相反,我必須將其複製到debugreleaseflavour1flavour2(其中一個進口,另一個沒有它們)並將其從main中刪除。然後,我可以選擇編譯什麼,一切正常。

謝謝你的幫助,+ MohanRaj!

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---- 
} 
} 
+0

也許您可以自定義與您的問題相關的打包選項。 –

相關問題