2016-11-23 17 views
8

Trong ứng dụng Android, tôi cần sử dụng SDK cụ thể cho một thiết bị ngoại vi nhất định.Thư viện/nhập khẩu khác nhau tùy thuộc vào loại xây dựng

Tất cả mọi thứ hoạt động tốt với một xây dựng biến thể duy nhất:

provided fileTree(include: ['peripheral.jar'], dir: 'libs') 
compile fileTree(exclude: ['peripheral.jar'], dir: 'libs') 

Vấn đề là SDK dựa trên một thư viện chia sẻ được cài đặt trong thiết bị ngoại vi thực tế. Nếu tôi cố gắng cài đặt ứng dụng trong bất kỳ thiết bị Android nào khác (vì mục đích gỡ lỗi của các chức năng còn lại), tôi nhận được lỗi INSTALL_FAILED_MISSING_SHARED_LIBRARY.

Tôi nghĩ rằng tôi có thể sử dụng hai xây dựng phiên bản:

  • release, có sử dụng SDK
  • debug, mà không sử dụng SDK

Tôi đã thử bao gồm SDK chỉ ở loại xây dựng release:

releaseProvided fileTree(include: ['peripheral.jar'], dir: 'libs') 
releaseCompile fileTree(exclude: ['peripheral.jar'], dir: 'libs') 

Nhưng sau đó, tôi không thể biên dịch dự án vì thiếu hàng nhập khẩu.

Vì vậy, tôi nhân đôi lớp chỉ có sử dụng những hàng nhập khẩu:

Trong main/java/package/PeripheralManager.java:

public class ScannerManager { 
    // fake 
} 

Trong release/java/package/PeripheralManager.java:

import peripheral; <- IT FAILS WHEN COMPILING 

public class ScannerManager { 
    // real code 
} 

Không quan trọng kiểu build tôi đã chọn, tôi có thể không biên dịch dự án nếu việc nhập không được giải quyết theo một trong các biến thể ...

+0

Bạn có thể thử dùng nhiều lần để tránh trùng lặp hay không. –

+0

Tôi chưa bao giờ sử dụng điều đó trước đây. Bạn có nghĩ rằng điều này không thể được giải quyết bằng cách sử dụng các loại xây dựng? – thelawnmowerman

+0

Hy vọng nó sẽ giúp ích, tôi có thể chia sẻ câu trả lời ở đây không? –

Trả lời

4

cuối cùng tôi giải quyết nó với hương vị. Đã xảy ra sự cố khi sao chép cùng một lớp trong các thư mục mainrelease. Chúng tôi không thể làm điều đó. Thay vào đó, tôi phải sao chép nó vào, ví dụ: debugrelease hoặc flavour1flavour2, (một với hàng nhập và loại còn lại không có chúng) và xóa nó khỏi main. Sau đó, tôi có thể chọn những gì để biên dịch và tất cả mọi thứ hoạt động.

Cảm ơn bạn về sự giúp đỡ của bạn, + MohanRaj!

2

Hãy thử điều này trên mô-đun build.gradle của bạn, Ở đây Mã của tôi, xin vui lòng cho tôi biết phản hồi của bạn. Cảm ơn trước.

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

Có thể bạn đã tùy chỉnh các tùy chọn Đóng gói liên quan đến vấn đề của mình. –

Các vấn đề liên quan