Làm cách nào để sử dụng các công cụ: ghi đè Thư viện trong tệp build.gradle?


295

Tôi đang sử dụng các thư viện leanback, yêu cầu Android 17 trở lên. Tuy nhiên, ứng dụng của tôi hỗ trợ minSDK là 16, vì vậy tôi gặp lỗi xây dựng từ việc nói lớp

Error:Execution failed for task ':Tasks:processPhoneDebugManifest'.
> Manifest merger failed : uses-sdk:minSdkVersion 16 cannot be smaller than version 17 declared in library /Users/mike/Projects/android-for-dummies-v3/Tasks/build/intermediates/exploded-aar/com.android.support/leanback-v17/21.0.2/AndroidManifest.xml
    Suggestion: use tools:overrideLibrary="android.support.v17.leanback" to force usage

Khi tôi xem tài liệu về công cụ xây dựng , tôi thấy cách thêm overrideLibraryđiểm đánh dấu vào bảng kê khai của mình, nhưng vấn đề là tôi đang khai báo minSdk của mình trong tệp lớp của tôi thay vì trong tệp kê khai của tôi.

Làm cách nào để sử dụng overrideLibrarykhi minSdk được khai báo trong build.gradle thay vì trong AndroidManifest.xml?


Đừng làm điều này. Thay vào đó hãy cập nhật minsdkversion trong build.gradle
Dr Deo

4
Có những lý do chính đáng để làm điều này, chẳng hạn như sử dụng có điều kiện một thư viện bằng cách kiểm tra mức API trước khi sử dụng nó.
Guillaume Perrot

Câu trả lời:


568

Mở Android Studio -> Mở tệp kê khai

thêm <uses-sdk tools:overrideLibrary="android.support.v17.leanback"/> đừng quên bao gồm xmlns:tools="http://schemas.android.com/tools"quá, trước <application>thẻ

nhập mô tả hình ảnh ở đây


trong trường hợp của tôitools:overrideLibrary="info.hoang8f.fbutton"
shareef

13
Xem ra cho các thư viện bao gồm có <uses-sdk tools:ignore="GradleOverrides">. Những thứ đó sẽ khiến tools:overrideLibrarythuộc tính của bạn bị bỏ qua. Xem stackoverflow.com/questions/31062893/ hy
Theo

1
Vấn đề của tôi vẫn tồn tại sau khi thêm các công cụ: overrideLibray = "ca.barrenechea.widget.recyclerview.decoration". Nó đã hoạt động nhưng đột nhiên ngừng hoạt động ngày hôm nay sau khi tạo ra một hoạt động mới.
arjunkn

bạn đã cứu ngày của tôi (y)
KunalK

@arjunkn: add <dụng-sdk công cụ: overrideLibray = "ca.barrenechea.widget.recyclerview.decoration" />, Nếu kiểm tra không làm việc của mình nếu công cụ không gian tên của bạn là đúng hay không gian tên đúng là xmlns: công cụ =" schemas. android.com/tools "
NIPHIN

170

không vấn đề gì khi bạn khai báo minSdk của bạn trong build.gradle. Bạn phải sao chép overrideLibrarytrong AndroidManifest.xmltài liệu của bạn , như được ghi lại ở đây .

<manifest 
    ... >
<uses-sdk tools:overrideLibrary="com.example.lib1, com.example.lib2"/>
    ...
</manifest>

Hệ thống tự động bỏ qua sdkVersion được khai báo trong AndroidManifest.xml.

Tôi hy vọng điều này giải quyết vấn đề của bạn.


1
Bạn có phải chỉ định bất kỳ phiên bản nào trong sử dụng-sdk không? Có vẻ khó hiểu khi chỉ định các phiên bản trong AndroidManifest sẽ bị bỏ qua
emmby

1
Bạn đúng rồi. Không cần thiết, dù sao đi nữa, nếu bạn đặt nó trong lớp AndroidManifest sẽ bỏ qua nó trong thời gian biên dịch.
icastell

13
+1 để hiển thị hai lib trong ví dụ. Bạn không thể sử dụng hai thẻ sdk sử dụng riêng biệt. vì vậy nếu bạn muốn ghi đè hai hoặc nhiều hơn, bạn có thể đặt dấu phẩy ở giữa. Cảm ơn!!
Hitesh Chavda

1
nhưng điều này không làm việc cho tôi để sử dụng hai thư viện được phân tách bằng dấu phẩy, có vấn đề gì với thư viện của tôi không?
Zia Ur Rahman

7
<manifest xmlns:tools="http://schemas.android.com/tools" ... >
  <uses-sdk tools:overrideLibrary="nl.innovalor.ocr, nl.innovalor.corelib" />

Tôi đã phải đối mặt với vấn đề xung đột giữa các phiên bản sdk tối thiểu khác nhau. Vì vậy, giải pháp này đã làm việc cho tôi.


1

Khi thư viện yêu cầu minSdkVersion 17thì bạn có thể thay đổi tương tự trong build.gradletệp (Mô-đun: Ứng dụng):

defaultConfig {
        minSdkVersion 17 
        targetSdkVersion 25
}

và sau đó xây dựng dự án không nên ném bất kỳ lỗi xây dựng.


4
Trong khi điều này sẽ làm việc, nó không thực sự trả lời câu hỏi. OP hỏi cách ghi đè Thư viện được sử dụng. Và có những trường hợp cụ thể mà bạn muốn ghi đè lên thay vì tuân thủ (vì sẽ tốt hơn khi ghi đè lên nó)
Zoe

1

Tôi chỉ thay đổi minSdkVersion="7"trong C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xmlvà nó làm việc.

Các bước:

  1. Con đường: C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xml
  2. Giá trị: <uses-sdk android:minSdkVersion="7"/>
  3. Lệnh Ran trong dấu nhắc cmd mới:

    C:\MyApp>phonegap build android --debug [phonegap] executing 'cordova build android --debug'... [phonegap] completed 'cordova build android --debug'


1
Điều này không trả lời câu hỏi, đó là cách sử dụng overrideLibrarykhi minSdk được khai báo trong build.gradle.
LarsH

1

chỉ thay đổi android: minSdkVersion = "16" và nó hoạt động hoàn hảo C: \ MyApp \ platform \ android \ CordovaLib \ AndroidManifest.xml


0

sử dụng mã này trong tệp kê khai

<uses-sdk
android:minSdkVersion="16"
android:maxSdkVersion="17"
tools:overrideLibrary="x"/>

0

Để đảm bảo cho tất cả các thư viện, chúng tôi có thể khớp phiên bản sdk của chúng để không xảy ra sự kiện bất ngờ nào

subprojects { 
afterEvaluate {project -> 
    if (project.hasProperty("android")) { 
        android { 
            compileSdkVersion 28 
            buildToolsVersion '28.0.3'
            defaultConfig {
                //It's kinda tricking android studio but anyway it works
                minSdkVersion 17
            }
        } 
    } 
    if (project.hasProperty("dependencies")) {
        dependencies {
            implementation 'com.android.support:support-core-utils:28.0.0'
            implementation 'com.android.support:appcompat-v7:28.0.0'
            implementation 'com.google.android.gms:play-services-base:16.1.0'
        }
    }
} 
}

Xóa các thư viện mà bạn không sử dụng trong dự án của bạn (gms) và đảm bảo rằng phiên bản sdk phù hợp với dữ liệu phân loại cấp ứng dụng của bạn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.