กำลังเรียกใช้“ Cordova build android” - ไม่พบแอตทริบิวต์ android: fontVariationSettings และ android: ttcIndex


104

เมื่อฉันเรียกใช้cordova build android --buildConfig xxxx --releaseฉันได้รับข้อผิดพลาดต่อไปนี้:

ERROR: In <declare-styleable> FontFamilyFont, unable to find attribute android:fontVariationSettings
ERROR: In <declare-styleable> FontFamilyFont, unable to find attribute android:ttcIndex

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

นี่คือผลลัพธ์ที่./gradlew cdvPrintPropsฉันได้รับจากสองเครื่อง:

:cdvPrintProps
cdvCompileSdkVersion=26
cdvBuildToolsVersion=27.0.3
cdvVersionCode=null
cdvMinSdkVersion=21
cdvBuildMultipleApks=true
cdvReleaseSigningPropertiesFile=release-signing.properties
cdvDebugSigningPropertiesFile=null
cdvBuildArch=null
computedVersionCode=152045989
computedArmv7VersionCode=1520459892
computedX86VersionCode=1520459894

ด้านล่างนี้คือรายการปลั๊กอินที่ใช้:

$ cordova plugins list
cordova-custom-config 5.0.2 "cordova-custom-config"
cordova-fabric-plugin 1.1.10 "cordova-fabric-plugin"
cordova-open-native-settings 1.5.0 "Native settings"
cordova-plugin-app-event 1.2.1 "Application Events"
cordova-plugin-app-version 0.1.9 "AppVersion"
cordova-plugin-camera 2.4.1 "Camera"
cordova-plugin-compat 1.2.0 "Compat"
cordova-plugin-console 1.1.0 "Console"
cordova-plugin-crosswalk-webview 2.4.0 "Crosswalk WebView Engine"
cordova-plugin-datepicker 0.9.2 "DatePicker"
cordova-plugin-device 2.0.1 "Device"
cordova-plugin-email 1.2.7 "EmailComposer"
cordova-plugin-file 4.3.3 "File"
cordova-plugin-file-transfer 1.6.3 "File Transfer"
cordova-plugin-inappbrowser 1.7.2 "InAppBrowser"
cordova-plugin-network-information 1.3.4 "Network Information"
cordova-plugin-secure-storage 2.6.8 "SecureStorage"
cordova-plugin-splashscreen 4.1.0 "Splashscreen"
cordova-plugin-statusbar 2.4.1 "StatusBar"
cordova-plugin-whitelist 1.3.3 "Whitelist"
cordova.plugins.diagnostic 3.9.2 "Diagnostic"
de.appplant.cordova.plugin.local-notification 0.8.5 "LocalNotification"
ionic-plugin-keyboard 2.2.1 "Keyboard"

ฉันจะแก้ไขปัญหานี้ได้อย่างไร?


ปัญหานี้เกิดขึ้นกับฉันตลอดทั้งวันเช่นกัน ฉันได้ จำกัด มันให้แคบลงเป็นปลั๊กอินที่ฉันใช้ อย่างไรก็ตามฉันต้องการปลั๊กอินนี้สำหรับแอปพลิเคชันของฉัน คุณใช้ปลั๊กอินอะไร
Chris R

@ChrisRitten สวัสดีฉันได้โพสต์ด้านบนพร้อมรายการปลั๊กอินเรียบร้อยแล้ว ความนับถือ.
Stéphane Padovani

1
ไม่มีคำตอบใดช่วยดิ้นรนกับเรื่องนี้มาหนึ่งวันแล้ว
khusrav

ถ้าสิ่งนี้ช่วยได้freakyjolly.com/…
Code Spy

คำตอบ:


106

เพียงใส่สิ่งต่อไปนี้ในbuild-extras.gradle

configurations.all {
    resolutionStrategy {
        force 'com.android.support:support-v4:27.1.0'
    }
}

ขอบคุณ! นี่เป็นแนวทางที่สมเหตุสมผลสำหรับ Cordova ในการตรึงกับเวอร์ชัน
Hozuki

10
ฉันทำให้โฟลเดอร์แพลตฟอร์มของฉันไม่อยู่ในการควบคุมซอร์สดังนั้นเพื่อที่จะทำสิ่งนี้ให้สำเร็จฉันได้สร้างbuild-extras.gradleโค้ดที่เพิ่มรูทโปรเจ็กต์ของฉันเพื่อคัดลอกในhooks\after_platform_add gist.github.com/charlesbedrosian/…
cbedrosian

8
ฉันไม่มีไฟล์ดังกล่าว: "build-extras.gradle"
Joe Sleiman

3
สำหรับผู้ใช้รายอื่นของ phonegap-build คำตอบคือ cordova-android-support-gradle-release forums.adobe.com/thread/2462835
catu

7
นอกเหนือจากความคิดเห็นของ @ StéphanePadovaniโปรดทราบว่าควรสร้างในโฟลเดอร์ / platform / android / app จาก Cordova Android 7.0.0
Will Kru

83

Google เปิดตัวเวอร์ชันใหม่28.0.0-alpha1ของcom.android.support:support-v4ซึ่งเพิ่ม 2 แอตทริบิวต์ใหม่ (android: fontVariationSettings และ android: ttcIndex) ปลั๊กอินบางตัวใช้ไลบรารีที่รองรับ Android ล่าสุดซึ่งส่งผลให้เกิดความไม่ลงรอยกันที่ไม่ต้องการ

ตัวเลือกที่ 1: ติดตั้งปลั๊กอินCordova-android-support-gradle-release

ปลั๊กอินที่มีเอกสารอย่างดีซึ่ง "จัดเรียงไลบรารี Android Support เวอร์ชันต่างๆที่ระบุโดยปลั๊กอินอื่น ๆ ให้เป็นเวอร์ชันเฉพาะ" ผ่านการทดสอบโดยไม่มีพฤติกรรมทำลายล้างใด ๆ

cordova plugin add cordova-android-support-gradle-release --fetch

อ่านเอกสารสำหรับชุดตัวเลือกทั้งหมด: Readme

ตัวเลือกที่ 2 : เพิ่มข้อมูลโค้ดถัดไปในbuild.gradleภายใต้แพลตฟอร์ม / Android

/** 
IMPORTANT - Manually added
Problem: 8 March 2018 - Google released version support-v4:28.0.0-alpha1 
which breaks the project with following error: unable to find attribute 
android:fontVariationSettings and android:ttcIndex

Effect: Force a specific version of the library
*/

configurations.all {
    resolutionStrategy.force 'com.android.support:support-v4:27.1.0'
}

คำเตือน:โค้ดในbuild.gradleจะถูกเขียนทับหากคุณลบ / เพิ่มแพลตฟอร์ม Android หากคุณไม่ต้องการใช้ปลั๊กอินด้วยเหตุผลบางอย่างหรือไม่ได้ผลสำหรับคุณให้สร้าง hook แทนและเขียนทับไฟล์ทุกครั้ง ตรวจสอบความคิดเห็นที่ 2 ที่นี่

หากปัญหายังคงอยู่คุณอาจลอง:

cordova platform rm android
cordova platform add android

หรือ

ตรวจสอบให้แน่ใจว่าคุณไม่ได้ติดตั้งแอปเวอร์ชันก่อนหน้าบนอุปกรณ์ที่คุณทดสอบเนื่องจากคุณจะได้รับข้อผิดพลาดที่ไม่ชัดเจนเมื่อพยายามดาวน์เกรดเวอร์ชันที่มีอยู่: "INSTALL_FAILED_VERSION_DOWNGRADE" และ "UnhandledPromiseRejectionWarning: การปฏิเสธสัญญาที่ไม่สามารถจัดการได้"


2
คำตอบที่ดีที่สุด การติดตั้งปลั๊กอินเป็นวิธีแก้ปัญหาที่ง่ายและดีที่สุด จะแก้ไขข้อผิดพลาดโดยอัตโนมัติเมื่อเพิ่มปลั๊กอิน เรียบง่าย ไม่จำเป็นต้องเล่นกับการสร้างไฟล์ในโฟลเดอร์แพลตฟอร์มที่ต้องติดตามด้วยตนเองในกรณีที่ลบและเพิ่มแพลตฟอร์ม
Neel

ตัวเลือกที่ 1 ใช้ได้ผลสำหรับฉัน เป็นเรื่องที่น่าผิดหวังอย่างยิ่งที่ Cordova กำหนดการอ้างอิงของพวกเขาในลักษณะที่ไม่เข้มงวด ฉันไม่รู้ว่าทำไมพวกเขาถึงทำ ออกจากโครงการของฉันในสถานะใช้งานได้เมื่อหลายสัปดาห์ก่อนกลับมาที่โครงการเพื่อคอมไพล์เวอร์ชันดีบักอีกครั้งและเกิดข้อผิดพลาดขึ้น
Norman Breau

ไม่สามารถดึงข้อมูลปลั๊กอิน Cordova-android-support-gradle-release ผ่านรีจิสทรี
netshark1000

@ netshark1000 ปัญหานี้ไม่เกี่ยวข้องกับปลั๊กอิน แต่เกิดจาก package.json ของคุณหรือการกำหนดค่าโครงการบางอย่าง ดูใน package.json และตรวจสอบให้แน่ใจว่ายังไม่ได้ติดตั้งปลั๊กอิน หากมีอยู่ให้โทรหาไอออนิกคอร์โดวาเตรียมโหลดใหม่ หากปัญหายังคงอยู่ในการลบแพลตฟอร์มโฟลเดอร์ปลั๊กอินและเพิ่มแพลตฟอร์มอีกครั้ง นี้ควรทำเคล็ดลับ
Andrew Radulescu

1
สมบูรณ์แบบ # 1 ช่วยฉัน
GBarroso

31

เกิดข้อผิดพลาดเดียวกันกับฉัน เห็นได้ชัดว่ามีการเปิดตัวcom.android.support:support-v4ไลบรารีเวอร์ชันใหม่และปลั๊กอินที่ฉันใช้กำหนดcom.android.support:support-v4:+เป็นการพึ่งพาในplugin.xml. +เครื่องหมายหมายความว่ามันจะได้รับรุ่นล่าสุด (28.0.0) ซึ่งดูเหมือนว่าน่าจะเป็นที่เข้ากันไม่ได้กับปลั๊กอินอื่น ๆ

ฉันสามารถสร้างเวอร์ชันการพัฒนาโดยเปลี่ยนการอ้างอิงปลั๊กอินทั้งหมดจากcom.android.support:support-v4:+เป็นcom.android.support:support-v4:27.1.0. นอกจากนี้ฉันดำเนินการionic cordova platform remove androidและionic cordova platform add android. หวังว่ามันจะช่วยอย่างน้อยสำหรับการพัฒนา


ขอบคุณมากในด้านของฉันฉันเปลี่ยนไฟล์ gradle สิ่งหนึ่งของปลั๊กอินในไดเรกทอรีแพลตฟอร์ม Android โปรดชำระเงินหากใช้งานไม่ได้จากโซลูชัน @avmatte
Sandun Priyanka

ไม่ได้ผลสำหรับฉันฉันทำแบบเดียวกัน แต่เมื่อฉันเพิ่มแพลตฟอร์ม Android อีกครั้งเวอร์ชันจะกลับไปที่ v4: 24.1.1+ แม้ว่าฉันจะลบมันเป็น 27.1.0 ก็ตาม
Joe Sleiman

ฉันมีข้อผิดพลาดนี้: ไม่พบ com.android.support:support-v4:27.1.0
Joe Sleiman

28

ฉันเพิ่งแก้ไขปัญหานี้โดยไปที่โฟลเดอร์ platform / android และแก้ไขproject.properties) ไฟล์และแทนที่com.android.support:support-v4:+ด้วยcom.android.support:support-v4:27.1.0.


21

หากคุณต้องการการแก้ไขอย่างรวดเร็วเกี่ยวกับปัญหานั้นเพื่อให้บิลด์ของคุณทำงานได้คุณอาจลองเพิ่มบรรทัดต่อไปนี้ลงในไฟล์ platform / android / build.gradle ของคุณ:

configurations.all {
    resolutionStrategy {
        force 'com.android.support:support-v4:27.1.0'
    }
}

อย่างไรก็ตามการตั้งค่าเวอร์ชันที่นี่ไม่ใช่การแก้ไขที่ยั่งยืน


ทำได้ดีนี่. สิ่งนี้ทำเพื่อฉัน แต่ใช่ฉันเดาว่าสิ่งนี้จะหายไปถ้าฉันลบและเพิ่มแพลตฟอร์มหรือติดตั้งบนเครื่องใหม่
Gurnard

ต้องใส่สิ่งนี้ไว้ใน / platforms / android / app; อย่างที่คุณบอกว่ามันไม่ยั่งยืน
user542319

@ คุณยังไม่ได้บอกในคำตอบของคุณว่าฉันควรใส่รหัสนี้ไว้ที่ด้านล่าง?
Mohd Ali

15

มันแปลก แต่ได้ผลเมื่อฉันเพิ่มบรรทัดด้านล่างด้วยเวอร์ชันเดียวกัน

นี่คือบรรทัดที่เกี่ยวข้องของฉันในplatforms/android/build.gradleไฟล์:

dependencies {
  compile fileTree(dir: 'libs', include: '*.jar')
  // SUB-PROJECT DEPENDENCIES START
  debugCompile(project(path: "CordovaLib", configuration: "debug"))
  releaseCompile(project(path: "CordovaLib", configuration: "release"))
  compile "com.android.support:support-v4:26.+"
  compile "com.android.support:appcompat-v7:26.+"
  // SUB-PROJECT DEPENDENCIES END
}

// ADDED THESE LINES
configurations.all {
  resolutionStrategy.force 'com.android.support:support-v4:26+'
}

ในโครงการของฉันปัญหาเกิดขึ้นเนื่องจากปลั๊กอิน 'Cordova-plugin-crosswalk-webview'


ขอบคุณสิ่งนี้ช่วยในการดาวน์โหลดการอ้างอิงอีกครั้งซึ่งก่อนหน้านี้ถูกเขียนทับโดยการอัปเดต แม้ว่าการแก้ไข build.gradle ของคุณจะไม่ได้รับการสนับสนุน แต่ฉันได้ลองวิธีแก้ไขปัญหาก่อนหน้านี้แล้ว แต่ก็ไม่มีประโยชน์
Nico

9

ฉันพบวิธีแก้ปัญหาใน Ionic Forum ซึ่งเป็นวิธีเดียวที่เหมาะกับฉัน:

วิ่ง:

แพลตฟอร์มไอออนิกคอร์โดวา rm android

วิ่ง:

แพลตฟอร์มไอออนิกคอร์โดวาเพิ่ม android@8.0.0

วิ่ง:

ปลั๊กอิน ionic cordova เพิ่ม Cordova-plugin-androidx

วิ่ง:

ปลั๊กอินไอออนิกคอร์โดวาเพิ่มอะแดปเตอร์ Cordova-plugin-androidx

ตรวจสอบให้แน่ใจว่า gradle.properties ของคุณมี:

cdvMinSdkVersion = 19

ตรวจสอบให้แน่ใจว่า build.gradle ของคุณมี:

project.ext { defaultBuildToolsVersion="28.0.3" //String 

defaultMinSdkVersion=19 //Integer - Minimum requirement is Android 4.4 

defaultTargetSdkVersion=28 //Integer - We ALWAYS target the latest by default 

defaultCompileSdkVersion=28 //Integer - We ALWAYS compile with the latest by default }

ตรวจสอบให้แน่ใจว่า config.xml ของคุณมี:

<preference name="android-minSdkVersion" value="19" />

จาก: https://forum.ionicframework.com/t/firebase-app-unable-to-compile-on-android-with-aapt-error/166564/7

ซึ่งจัดการในคำตอบ stackoverflow: https://stackoverflow.com/a/56656680/839691


นี่เป็นวิธีเดียวที่ใช้ได้กับIonic 3แอพเก่าของฉัน ขอบคุณ!
Sampath

การใช้ไอออนิก 3: สิ่งนี้ช่วยฉันแก้ปัญหานี้ได้ แต่ตอนนี้มีปัญหาอื่น * เกิดข้อผิดพลาด: การดำเนินการล้มเหลวสำหรับงาน ': app: compileDebugJavaWithJavac' > การรวบรวมล้มเหลว ดูเอาต์พุตข้อผิดพลาดของคอมไพเลอร์สำหรับรายละเอียด
เปรมสนิท

1
@PremSanil ไม่แน่ใจว่านี่เป็นสาเหตุของปัญหาของคุณ แต่ตรวจสอบให้แน่ใจว่าคุณได้ดาวน์โหลด build tools 28.0.3 ใน SDK Manager ของ Android Studio แล้ว
alpere

@alpere ฉันต้องอัปเดตเวอร์ชัน Node เป็น v10.17.0 และลบปลั๊กอินที่ไม่ได้ใช้ออกเริ่มทำงาน (ใช้ธีมสีฟ้า Ionic 3)
Prem Sanil

8

ฉันมีข้อผิดพลาดเดียวกัน แต่ไม่มีใน Cordova build เวอร์ชันใหม่com.android.support:appcompat-v7และการอ้างอิง แต่เวอร์ชันที่เข้ากันไม่ได้อยู่ในแพ็คเกจที่สามซึ่งขึ้นอยู่กับcom.android.support:appcompat-v7ดังนั้นฉันจึงไม่สามารถแก้ไขแพ็คเกจที่สามด้วย @avmatteของได้

ใช้โซลูชันของ@ Sai Tejaเพื่อค้นหาแพ็คเกจที่เข้ากันไม่ได้:

gradlew -q dependencies app:dependencies --configuration debugAndroidTestCompileClasspath

จากนั้นแก้ไขด้วย:

configurations.all {
    resolutionStrategy {
        force 'com.android.support:support-compat:{the_same_version}'
        force 'com.android.support:appcompat-v7:{the_same_version}'
        force 'com.android.support:support-core-utils:{the_same_version}'
        force 'com.android.support:support-core-ui:{the_same_version}'
        force 'com.android.support:support-fragment:{the_same_version}'
        force 'com.android.support:support-annotations:{the_same_version}'
        ...
    }
}

โค้ดด้านบนบังคับให้ใช้เวอร์ชันอ้างอิง


8

ฉันพบข้อผิดพลาดเดียวกัน ทำการวิจัยที่สมบูรณ์ในไดเร็กทอรีปลั๊กอินสำหรับcom.android.support:support-v4:+และแทนที่ด้วยรหัสเวอร์ชันคงที่

สำหรับฉัน, com.android.support:support-v4:23.4.0ทำงานได้ดี ไม่จำเป็นต้องลบและเพิ่มแพลตฟอร์ม Android อีกครั้งในตอนนั้น


8

นี่เป็นวิธีง่ายๆในการแก้ไขซึ่งจะยังคงมีอยู่เมื่อไดเร็กทอรีแพลตฟอร์มถูกสร้างขึ้นใหม่และไม่จำเป็นต้องใช้ปลั๊กอินทั้งหมดของคุณเพื่อพยายามค้นหาผู้ร้าย สร้างไฟล์ที่build-extras.gradleมีเนื้อหาเหล่านี้:

configurations.all {
    resolutionStrategy {
        force 'com.android.support:support-v4:27.1.0'
    }
}

จากนั้นสร้างไฟล์ที่after_platform_add/010_copy_build_extras.jsมีเนื้อหาต่อไปนี้:

#!/usr/bin/env node

var fs = require('fs');

var rootdir = process.argv[2];
var android_dir = `${rootdir}/platforms/android`;
var gradle_filename = 'build-extras.gradle';
var gradle_file = `${rootdir}/${gradle_filename}`;
if (fs.existsSync(android_dir) && fs.existsSync(gradle_file)) {
  fs.createReadStream(gradle_file)
    .pipe(fs.createWriteStream(`${android_dir}/${gradle_filename}`));
}

ตอนนี้สร้างแพลตฟอร์ม Android ขึ้นใหม่และจะใช้ไลบรารีสนับสนุนที่ตรึงไว้


ไดเรกทอรีย่อย hooks เลิกใช้ config.xml<platform name="android"> <hook src="hooks/copy_build_extras.js" type="before_build" /> </platform>
Exlord

ok ผ่านการทดสอบและรหัสของคุณน่าจะเป็นที่ไม่ถูกต้องprocess.argv[2]เป็นbuildสำหรับฉัน!
Exlord

ขออภัย @Exlord ฉันเดาว่าจะต้องมีการปรับเปลี่ยนบางอย่างเพื่อให้ทำงานกับ hook รูปแบบใหม่ แต่ฉันใช้รหัสที่แน่นอนนี้กับ sub directory hook ในปัจจุบันและใช้งานได้ดี
Brad Pitcher

5

ห้องสมุดบางแห่งของคุณควรใช้

com.android.support:support-v4:+

ค้นหาสิ่งที่เป็นด้วย

gradlew -q dependencies app:dependencies --configuration debugAndroidTestCompileClasspath

และเพิ่มไลบรารีนั้นเป็นโมดูลหากไม่ได้ใช้เวอร์ชันเฉพาะในการอัปเดตล่าสุด (เพิ่มปัญหาในไลบรารีนั้นด้วย!;))

ขอบคุณ @avmatte!

แก้ไข: คุณยังสามารถขอให้ gradle บังคับเวอร์ชันไลบรารีได้

ext {
    supportVersion {latest_version_here}
} // In root project.gradle

configurations.all {
    resolutionStrategy {
        force "com.android.support:support-v4:$supportVersion"
    }
}

4

เมื่อวานนี้ฉันมีปัญหาเดียวกันกับสีน้ำเงิน มันเริ่มแบบสุ่ม แต่จากการอ่านรอบ ๆ ดูเหมือนว่าจะทำกับการอัปเดตตามที่กล่าวไว้ข้างต้นโดย @ cpro90 อย่างไรก็ตามฉันพยายามแล้วและไม่พบว่าจะทำการเปลี่ยนแปลงด้วยตนเองที่จำเป็นได้ที่ไหน

ในที่สุดฉันก็พบว่าปัญหาเกิดจากปลั๊กอิน Cordova-plugin-crosswalk-webview ของฉัน ใน GitHub ฉันพบปัญหาในการ repro ปลั๊กอินเมื่อเช้านี้และมีการดูมากกว่า 520 ครั้งในมื้อกลางวัน

@UNUMObile แนะนำสิ่งต่อไปนี้ในbuild.gradleไฟล์เพื่อบังคับใช้เวอร์ชันก่อนหน้าทั่วโลก:

configurations.all {
    resolutionStrategy.force 'com.android.support:support-v4:24.0.0'
}

สิ่งนี้ใช้ได้ผลทันทีสำหรับฉันและอาจช่วยผู้อื่นด้วยปลั๊กอินอื่น ๆ ที่มีการพึ่งพา 'com.android.support:support-4:<28 เวอร์ชัน 28 ใหม่ดูเหมือนจะเป็นปัญหา

ฉันหวังว่านี่จะช่วยให้ใครบางคนก้าวไปข้างหน้า


4

เคล็ดลับสำหรับนักพัฒนา Kotlin:

หากคุณทำตามคำตอบเหล่านี้ที่นี่คุณแน่ใจว่าคุณไม่มีsupport-v4ห้องสมุดในโครงการของคุณ แต่คุณยังคงเห็นข้อผิดพลาดนี้โปรดดูที่ktxห้องสมุด

ฉันเพิ่งรู้ว่าฉันใช้1.0.0-alpha1เวอร์ชันล่าสุดสำหรับไลบรารี ktx และข้อผิดพลาดนี้ปรากฏขึ้น หลังจากที่ฉันเปลี่ยนกลับเป็นเวอร์ชัน0.3แล้วตอนนี้ทุกอย่างก็กลับมาเป็นปกติ


ไม่สามารถแก้ไข: androidx.fragment: fragment-ktx: 0.3 เมื่อฉันเปลี่ยนเป็น '1.0.0-alpha1' ปัญหาเดียวกันก็เกิดขึ้น
Mahmood Ali

@MahmoodAli ลองดูการอ้างอิงอื่น ๆ ? ฉันแค่โพสต์สถานการณ์ของฉันและ Google ก็อาจให้แพ็คเกจอื่นทำผิดเหมือนกัน
Anthonyeef

@MahmoodAli ขอบคุณสำหรับลิงค์ แต่ฉันคิดว่าโครงการส่วนใหญ่เริ่มใช้ ktx lib ก่อนที่ androidx จะประกาศใน Google IO ของปีนี้ เป็นการยากที่จะหลีกเลี่ยงการผสม ktx กับไลบรารีการสนับสนุน ... บางทีการย้ายไปยัง androidx ควรเป็นทางออกสุดท้ายสำหรับข้อยกเว้นประเภทนี้
Anthonyeef

4

เพิ่มบรรทัดต่อไปนี้ในแพลตฟอร์ม / android / build.gradle ของคุณ

  configurations.all {
        resolutionStrategy {
            force 'com.android.support:support-v4:27.1.0'
        }
    }

หากยังคงมีปัญหาให้ลองเรียกใช้คำสั่งนี้:

cordova plugin add cordova-android-support-gradle-release --fetch

3

ในbuild.gradleไฟล์ของคุณเพิ่ม

configurations.all {
    resolutionStrategy {
        force 'com.android.support:support-v4:27.1.0'
    }
}

และในproject.propertiesไฟล์ของคุณเปลี่ยนcordova.system.library.3เป็นcordova.system.library.3=com.android.support:support-v13:27.+.


2

สำหรับPhonegap รูปร่างผู้ใช้เป็น @catu mentionned ในความคิดเห็นคุณสามารถลองปลั๊กอินนี้ซึ่งวัตถุประสงค์คือเพื่อป้องกันไม่ให้สร้างความล้มเหลวที่เกิดจากการรวมถึงรุ่นที่แตกต่างกันของห้องสมุดสนับสนุน


1

เพียงแก้ไขปัญหานี้โดยใส่บรรทัดของโค้ดต่อไปนี้ในไฟล์ platform / android / app / build.gradle หลังจากบล็อก buildscript {}:

configurations.all {
    resolutionStrategy {
            force 'com.android.support:support-v4:27.1.0'
    }
}

1

ฉันมีปัญหาเดียวกันหลังจากติดตั้งปลั๊กอิน Cordova-plugin-file-opener2 มันถูกลบออกหลังจากทำ: ตัวเลือกที่ 1: ติดตั้งปลั๊กอิน Cordova-android-support-gradle-release ปลั๊กอิน Cordova เพิ่ม Cordova-android-support-gradle-release --fetch


0

อีกวิธีหนึ่งที่มีวิธีแก้ปัญหาเดียวกันคือสร้างตะขอ เป็นแบบถาวร (หลังจากติดตั้งแพลตฟอร์มใหม่) คุณสามารถยืนยันได้และไม่ต้องเพิ่มแพลตฟอร์มใหม่

% project% \ scripts \ android \ android-support-version.js

#!/usr/bin/env node

var fs = require('fs');

function replace_strings_in_file(filename, replacementsObject) {
  if (fs.existsSync(filename)) {
    var data = fs.readFileSync(filename, 'utf8');
    Object.keys(replacementsObject).forEach(function (to_replace) {
      var replace_with = replacementsObject[to_replace];
      data = data.replace(to_replace, replace_with);
    });
    console.log(data);
    fs.writeFileSync(filename, data, 'utf8');
  } else {
    console.log('file not found');
  }
}

module.exports = function (context) {
  var rootdir = process.argv[2];
  if (rootdir) {
    replace_strings_in_file("platforms/android/project.properties", {'com.android.support:support-v4:+': 'com.android.support:support-v4:27.1.0'});
    console.log('com.android.support version fix');
  }
};

เริ่มต้น hook ใน config

% project% \ config.xml

...
<platform name="android">
  <hook src="scripts/android/android-support-version.js" type="before_build" />
  ...

ติดตั้งการอ้างอิง fs ในโครงการของคุณ:

npm ฉัน fs --save-dev

เรียกใช้งานสร้าง:

Cordova สร้าง Android


0

วิธีที่ง่ายและถูกต้องที่สุดในการแก้ปัญหา!

เพียงอัปเดต sdk และเพิ่ม android 2 เวอร์ชันล่าสุด ... แล้วรีสตาร์ทคอมพิวเตอร์! เรียบร้อย ...

ตอนนี้เรามีเวลาพูดคุยเกี่ยวกับรถยนต์และกีฬา ...


0

ฉันมีปัญหาเดียวกันและไม่มีวิธีแก้ไขใดที่ใช้ได้ผลสำหรับฉัน การติดตั้ง Android SDK Build-tools เวอร์ชันล่าสุด (27.0.3) ช่วยแก้ปัญหาของฉันได้


0

ลิงค์โซลูชัน

นี่เป็นเพราะปลั๊กอินที่เข้ากันได้ ลบปลั๊กอินนั้นหากคุณมีเวอร์ชันเก่ากว่า (น้อยกว่า1.2.0 ) และตั้งค่าCordova-android@6.3.0

ปลั๊กอิน Cordova rm Cordova-plugin-compat --force

ปลั๊กอิน Cordova เพิ่ม Cordova-plugin-compat@1.2.0

แพลตฟอร์ม Cordova rm android

แพลตฟอร์มไอออนิกคอร์โดวาเพิ่ม android@6.3.0

ทำงานในกรณีของฉัน ขอบคุณ :)


0

อัปเดตคำตอบของ @Brad Pitcher:

hooks/copy_build_extras.js

#!/usr/bin/env node

var fs = require('fs');

module.exports = function (context) {
  var rootdir         = context.opts.projectRoot;
  var android_dir     = `${rootdir}/platforms/android`;
  var gradle_filename = 'build-extras.gradle';
  var gradle_file     = `${rootdir}/${gradle_filename}`;
  if (fs.existsSync(android_dir) && fs.existsSync(gradle_file)) {
    fs.createReadStream(gradle_file)
      .pipe(fs.createWriteStream(`${android_dir}/${gradle_filename}`));
  }
};

config.xml

<platform name="android">
    <allow-intent href="market:*" />
    <hook src="hooks/copy_build_extras.js" type="before_build" />
</platform>

build-extras.gradle ในรูทผบ

configurations.all {
  resolutionStrategy {
    force 'com.android.support:support-v4:27.1.0'
  }
}

0

ฉันพบปัญหานี้กับ react native และมันเกิดจากบรรทัดต่อไปนี้ในandroid/app/build.gradle:

implementation ("com.google.android.gms:play-services-base:+") {
  force = true;
}
implementation ("com.google.android.gms:play-services-maps:+") {
  force = true;
}

ฯลฯ ...

เห็นได้ชัดว่าสิ่งนี้ + แก้ไขเป็นเวอร์ชัน 17.0.0 ใหม่ซึ่งทำให้งานสร้างของฉันเสียหาย
การเปลี่ยน + เป็น 16.0.0 (หรือ 16.0.1 สำหรับ play-services-base) ช่วยแก้ปัญหาของฉันได้


0

ปัญหานี้คร่าชีวิตฉันมาเป็นเวลาหนึ่งสัปดาห์

ในที่สุดฉันก็จบลง android@6.4.0

ฉันเปลี่ยนแปลงandroid/project.propertiesโดยการเปลี่ยนแปลง

#cordova.system.library.3=com.google.android.gms:play-services-analytics:+
cordova.system.library.3=com.google.android.gms:play-services-analytics:15+

ในที่สุดการเปลี่ยนแปลงนั้นก็พาฉันออกจากหลุมข้อความแสดงข้อผิดพลาด ttcIndex แห่งความมืด

จากนั้นฉันได้รับข้อผิดพลาดนี้

com.android.builder.dexing.DexArchiveBuilderException: 
  com.android.builder.dexing.DexArchiveBuilderException

ข้อผิดพลาดเกิดจากปัญหาเวอร์ชัน Java จากนั้นฉันแก้ไขandroid/build.gradleด้วยการเปลี่ยนแปลงต่อไปนี้

compileOptions {
  #sourceCompatibility JavaVersion.VERSION_1_6
  #targetCompatibility JavaVersion.VERSION_1_6
  sourceCompatibility JavaVersion.VERSION_1_8
  targetCompatibility JavaVersion.VERSION_1_8
}

โปรดทราบว่าฉันcordova-android-support-gradle-releaseติดตั้งปลั๊กอินแล้ว แต่ไม่รู้ว่าฉันต้องการหรือไม่


-1

เป็นรายการที่ซ้ำกันใน values.xml ในโฟลเดอร์ที่เรียกว่าsupport-compat-28.0.0-alpha1.aar.

คุณจะพบไฟล์นี้ใน Windows ที่ \users\YOURUSERID\.gradle\caches\transforms-1\files-1.1

เมื่อเข้าไปในโฟลเดอร์ที่คุณต้องไประดับบางลึกเพื่อvalues.xml

ค้นหาองค์ประกอบในไฟล์<declare-styleable name="FontFamilyFont>นั้น

ในองค์ประกอบที่เอาสี่เส้นที่มีandroid:อยู่ในนั้น

หลังจากที่ฉันทำการเปลี่ยนแปลงนั้นฉันสามารถสร้างอีกครั้งโดยไม่มีข้อผิดพลาด

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