build.gradle 파일에서 tools : overrideLibrary를 어떻게 사용합니까?


295

Android 17 이상이 필요한 린백 라이브러리를 사용하고 있습니다. 그러나 내 앱은 minSDK 16을 지원하므로 gradle에서 빌드 오류가 발생합니다.

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

빌드 도구 문서를 보면 overrideLibrary마커를 매니페스트 에 추가하는 방법을 알지만 문제는 매니페스트 대신 gradle 파일에 minSdk를 선언하는 것입니다.

overrideLibraryminSdk가 AndroidManifest.xml 대신 build.gradle에 선언 된 경우 어떻게 사용 합니까?


이러지 마 대신 build.gradle에서 minsdkversion을 업데이트하십시오
Dr Deo

4
라이브러리를 사용하기 전에 API 레벨을 테스트하여 조건부로 라이브러리를 사용하는 등 합법적 인 이유가 있습니다.
기 illa 페로

답변:


568

안드로이드 스튜디오 열기-> 매니페스트 파일 열기

추가 <uses-sdk tools:overrideLibrary="android.support.v17.leanback"/> 포함하는 것을 잊지 마세요 xmlns:tools="http://schemas.android.com/tools"전과 너무 <application>태그

여기에 이미지 설명을 입력하십시오


내 경우에tools:overrideLibrary="info.hoang8f.fbutton"
shareef

13
포함 된 라이브러리가 있는지 확인하십시오 <uses-sdk tools:ignore="GradleOverrides">. 이로 인해 귀하의 tools:overrideLibrary속성이 무시됩니다. 참조 stackoverflow.com/questions/31062893/...
테오

1
tools : overrideLibray = "ca.barrenechea.widget.recyclerview.decoration"을 추가 한 후에도 여전히 문제가 있습니다. 작동했지만 새로운 활동을 만든 후 오늘 작동이 갑자기 중단되었습니다.
arjunkn

내 일 (y)에 저장
KunalK

@arjunkn : add <uses-sdk tools : overrideLibray = "ca.barrenechea.widget.recyclerview.decoration"/>, 작동하지 않는 경우 도구 네임 스페이스가 올바른지 또는 올바른 네임 스페이스가 xmlns : tools = " 스키마인지 확인하십시오. android.com/tools "
NIPHIN

170

build.gradle에서 minSdk를 선언하는 것은 중요하지 않습니다. 당신은 복사 할 필요가 overrideLibrary당신에 AndroidManifest.xml설명 된대로, 여기 .

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

시스템은 AndroidManifest.xml에 선언 된 sdkVersion을 자동으로 무시합니다.

이것이 귀하의 문제를 해결하기를 바랍니다.


1
uses-sdk에 버전을 지정해야합니까? 무시할 AndroidManifest 버전을 지정하는 것이 혼란스러워 보입니다
emmby

1
네 말이 맞아 어쨌든 AndroidManifest gradle에서 설정하면 컴파일 타임에 무시합니다.
icastell

13
예제에서 두 개의 라이브러리를 표시하려면 +1입니다. 두 개의 별도 uses-sdk 태그를 사용할 수 없습니다. 따라서 둘 이상을 재정의하려면 중간에 쉼표를 넣을 수 있습니다. 감사!!
Hitesh Chavda

1
그러나 이것은 쉼표로 구분 된 두 개의 라이브러리를 사용하는 데 효과적이지 않았습니다. 내 라이브러리에 어떤 문제가 있습니까?
Zia Ur Rahman

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

다른 min SDK 버전 간의 충돌 문제에 직면했습니다. 그래서이 솔루션은 저에게 효과적이었습니다.


1

라이브러리에서 요구하는대로 (모듈 : 애플리케이션) 파일 minSdkVersion 17에서 동일하게 변경할 수 있습니다 build.gradle.

defaultConfig {
        minSdkVersion 17 
        targetSdkVersion 25
}

그리고 그 빌드 후에는 프로젝트가 빌드 에러를 발생시키지 않아야합니다.


4
이것이 효과가 있지만 실제로 질문에 대답하지는 않습니다. OP는 overrideLibrary의 사용 방법을 묻습니다. 그리고 준수하는 대신 재정의하려는 특정 사례가 있습니다 (재정의해도 좋습니다)
Zoe

1

난 그냥 변경 minSdkVersion="7"C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xml그것은했다.

단계 :

  1. 통로: C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xml
  2. 값: <uses-sdk android:minSdkVersion="7"/>
  3. 새 cmd 프롬프트에서 명령을 실행하십시오.

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


1
이것은 overrideLibraryminSdk가 build.gradle에 선언 될 때 사용하는 방법 인 질문에 대답하지 않습니다 .
LarsH

1

그냥 android : minSdkVersion = "16"만 변경했으며 완벽하게 작동합니다 .C : \ MyApp \ platforms \ android \ CordovaLib \ AndroidManifest.xml


0

manifest.xml에서이 코드를 사용하십시오.

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

0

모든 라이브러리의 soulution으로 SDK 버전과 일치시켜 예기치 않은 이벤트가 발생하지 않을 수 있습니다.

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

프로젝트 (gms)에서 사용하지 않는 라이브러리를 제거하고 SDK 버전이 앱 레벨 gradle 데이터와 일치하는지 확인하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.