ฉันจะใช้เครื่องมือ: overrideLibrary ในไฟล์ build.gradle ได้อย่างไร


295

ฉันใช้ไลบรารี่ไลบรารีซึ่งต้องใช้ Android 17 ขึ้นไป อย่างไรก็ตามแอพของฉันรองรับ minSDK ที่ 16 ดังนั้นฉันจึงได้รับข้อผิดพลาดในการประกอบจากคำพูดแบบละเอียด

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เครื่องหมายในรายการของฉัน แต่ปัญหาคือฉันประกาศ minSdk ของฉันในไฟล์ gradle แทนที่จะเป็นรายการของฉัน

ฉันจะใช้งานอย่างไรoverrideLibraryเมื่อประกาศ minSdk ใน build.gradle แทนใน AndroidManifest.xml


อย่าทำเช่นนี้ แทนที่จะอัปเดต minsdkversion ใน build.gradle
ดร. ดีโอ

4
มีเหตุผลที่ถูกต้องในการทำเช่นใช้ไลบรารีแบบมีเงื่อนไขโดยทดสอบระดับ API ก่อนใช้
Guillaume Perrot

คำตอบ:


568

เปิด Android Studio -> เปิดไฟล์มานิเฟสต์

เพิ่ม <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/…
Theo

1
ปัญหาของฉันยังคงมีอยู่หลังจากเพิ่มเครื่องมือ: overrideLibray = "ca.barrenechea.widget.recyclerview.decoration" มันใช้งานได้ แต่จู่ ๆ ก็หยุดทำงานในวันนี้หลังจากสร้างกิจกรรมใหม่
arjunkn

คุณบันทึกวันของฉัน (y)
KunalK

@arjunkn: เพิ่ม <uses-sdk tools: overrideLibray = "ca.barrenechea.widget.recyclerview.decoration" /> หากไม่ทำงานตรวจสอบว่า namespace ของเครื่องมือของคุณถูกต้องหรือไม่เนมสเปซที่ถูกต้องคือ xmlns: tools = " schemas android.com/tools "
NIPHIN

170

ไม่สำคัญว่าคุณจะประกาศ minSdk ของคุณใน build.gradle คุณมีการคัดลอกoverrideLibraryในของคุณAndroidManifest.xmlเป็นเอกสารที่นี่

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

ระบบจะละเว้น sdkVersion ที่ประกาศใน AndroidManifest.xml โดยอัตโนมัติ

ฉันหวังว่านี่จะช่วยแก้ปัญหาของคุณ


1
คุณต้องระบุเวอร์ชันใด ๆ ใน uses-sdk หรือไม่? ดูเหมือนสับสนในการระบุเวอร์ชันใน AndroidManifest ที่กำลังจะถูกละเว้น
emmby

1
คุณพูดถูก ไม่จำเป็นอย่างไรก็ตามถ้าคุณตั้งค่าในระดับ AndroidManifest จะไม่สนใจเมื่อมีการรวบรวม
icastell

13
+1 สำหรับแสดงสอง libs ในตัวอย่าง คุณไม่สามารถใช้สอง seperate uses-sdk tag ดังนั้นหากคุณต้องการแทนที่สองคนขึ้นไปคุณสามารถใส่เครื่องหมายจุลภาคในระหว่าง ขอบคุณ !!
Hitesh Chavda

1
แต่สิ่งนี้ไม่ได้ผลสำหรับฉันที่จะใช้สองไลบรารีคั่นด้วยเครื่องหมายจุลภาคมีปัญหากับห้องสมุดของฉันหรือไม่
เซีย Ur Rahman

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

ฉันกำลังประสบปัญหาความขัดแย้งระหว่างเวอร์ชั่น min min ที่แตกต่างกัน ดังนั้นวิธีนี้ใช้ได้ผลสำหรับฉัน


1

ตามที่ห้องสมุดต้องการminSdkVersion 17จากนั้นคุณสามารถเปลี่ยนไฟล์เดียวกันในbuild.gradle(โมดูล: แอปพลิเคชัน):

defaultConfig {
        minSdkVersion 17 
        targetSdkVersion 25
}

และหลังจากนั้นอาคารโครงการไม่ควรทิ้งข้อผิดพลาดในการสร้าง


4
แม้ว่าสิ่งนี้จะได้ผล แต่ก็ไม่ได้ตอบคำถาม OP ถามว่าจะใช้ overrideLibrary อย่างไร และมีเฉพาะกรณีที่คุณต้องการที่จะแทนที่มันแทนตาม (ตามที่มันปรับให้แทนที่)
โซอี้

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. คำสั่ง Ran ในพรอมต์คำสั่ง cmd ใหม่:

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


1
นี่ไม่ได้ตอบคำถามซึ่งเป็นวิธีการใช้overrideLibraryเมื่อประกาศ minSdk ใน build.gradle
LarsH

1

เพิ่งเปลี่ยนเฉพาะ android: minSdkVersion = "16" และมันทำงานได้อย่างสมบูรณ์แบบ C: \ MyApp \ platforms \ android \ CordovaLib \ AndroidManifest.xml



0

ในฐานะที่เป็นจิตวิญญาณสำหรับห้องสมุดทั้งหมดเราสามารถจับคู่เวอร์ชัน 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 ตรงกับข้อมูลการไล่ระดับในแอปของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.